Schedule your complimentary code review today

Standarizing Architectural Core Quality Attributes


8/14/2009 12:03:00 AM
To differentiate a "good" architecture from a "not so good" one there are a few common quality attributes across the board, regardless of the specific business application. Once we have a common standard, it will be easy to have a basic rating of any software architecture.

When we analyze the quality attributes such a performance, availability, scalability, testability, supportability, usability etc... we notice that we can classify any of them in two broad groups. The dividing line between those two groups is runtime. To simplify, there are pre-runtime quality attributes and post-runtime quality attributes. We can call the pre-runtime ones design-time qualities and the post-runtime simply run-time qualities. For example, scalability is a run-time quality attribute but reusability is a design-time quality attribute. Here are the two groups:

Architectural Run-Time Quality Attributes

1. Availability
2. Interoperability
3. Monitorability
4. Performance
5. Reliability
6. Scalability
7. Security

Architectural Design-Time Quality Attributes

1. Conceptual Integrity
2. Configurability
3. Extensibility
4. Reusability
5. Usability
6. Supportability a.k.a. Readability and Fixability
7. Testability

Upon closer examination we can observe that the run-time qualities vary more often depending on the business application whereas the design-time qualities are standard across the board. For example, in the run-time qualities group, not every system needs to be scalable or highly secure. It depends on the business application. Also, run-time qualities can compete with each other such as performance and security.

On the other hand, all design-time qualities for nearly all systems regardless of their business application can be optimized without negative implications. For example, it is highly beneficial for any system to have excellent usability, conceptual integrity, configurability, extensibility, supportability... the more the merrier. Also, we notice that none of the attributes in the design-time group compete with each other. On the contrary, they support each other.

In conclusion, software architects in general should strive to optimize design-time quality attributes regardless of the business application. Optimizing design-time quality attributes must be a best-practice for software architecture. Design-time quality attributes can be called the architectural "core" attributes. Schedule your complimentary code review today
Share |