Thinking about Architectural Performance and Scalability following on from my Blog yesterday it occurred to me that there is another dimension to architecture here and that is the “abilities”. Performance and Scalability are just two of the quality attributes associated with architecture, there are a number of others such as reliability (a personal hot button, I believe that the majority of unreliable systems are due to poor architecture and specifically systems at performance or scalability limits) availability, manageability, security, maintainability, deployability (is that a word?) etc. Before undertaking a project all the architectural or non functional requirements or attributes need to be mapped out and defined.
Coming from a chip design background (a long time ago!) it always amazes me how much importance and effort the software communities place on functional requirements as opposed to quality requirements. In chip design only about 30% of the effort was on function, the rest went on timing, power, heat, testing constraints etc which were much more difficult to meet. This shows up clearly in the AOP elements in hardware design languages such as VHDL (which has been around for 20 years). Anyway I digress (although I have a number of thoughts around AOP and specifically how the attributes can be implemented by the CLR)..
So ideally we need a framework for Architecture requirements and quality which allows the formal definition and prioritisation of the architectural requirements. I actually really like the quality attribute utility tree which is part of the SEI’s Architectural Tradeoff Analysis Method (ATAM) for doing this. ATAM is really a process for looking at Architecture so it is valuable in providing a much needed focus on this key step of the SDLC (not the comms protocol, which I rather confusingly did a chip design for!) and also has this useful way of defining architectural requirements as an artefact (the tree and associated scenarios). It struggles however in providing guidance in how to build an architecture to meet those requirements. This is of course where my blog of yesterday comes in for the specific performance and scalability requirements.
I just love Architecture; there are just so many dimensions and facets to it!