“Identifying and preserving architecture characteristics is a key responsibility for
architects.” — Neal Ford
Quality attributes are also known as non-functional requirements, architecture concerns, and architecture characteristics. Quality attributes such as performance, scalability, security, and usability are usually underrated by new architects which may have an important impact on the success of a project.
New architects often underestimate the role of quality attributes in the architecture they are building. The reason is that the quality attributes are vaguely understood.
Why quality attributes are critical in architecture?
By understanding, identifying, and documenting a system’s quality attributes, architects can make informed decisions about the design of a system and ensure that it meets the requirements of users.
For example, if you are working in a domain where regulations change frequently, you may need to separate the module containing the code that implements regulations from the other modules that are more stable (E.g., using microservices architecture). Or if you are working on a system where thousands of users will access simultaneously at specific times, you need to consider scalability as part of your quality attributes and reflect it in your architecture decision by using, for example, microservices and asynchronous communications.
Additionally, quality attributes can help anticipate and mitigate potential issues that may arise during the development and maintenance of a system. For example, if you know that the system you are building integrates with external components that might be replaced or are updated frequently, you might decide to make Maintainability one of your architecture characteristics and build your architecture to reduce the impacts of those moving parts on your system by using an abstraction layer between your system and the external components.
The requirements specify what applications should do, while architectural characteristics define the essential aspects of a system, how to implement the requirements, and why to justify the decisions made.
How to find the quality attributes of the system you are building?
Some quality attributes are explicit and can be found by reading the requirements, such as the number of users that access a system, the expected response time, and the system’s availability. But much of what affects the architecture will not be listed in the requirements and the documentation and need to be found by working collaboratively with the different stakeholders. This is a challenge that every architect has to face.
Document the quality attributes you discover incrementally from the start of your project and share your findings with the stakeholders to validate your understanding. As quality attributes are not equal, it is critical to find the most important ones by prioritizing them. Otherwise, you may end up with a large list of architecture characteristics that may lead to a generic design that doesn’t support any adequately. The goal is to focus on the attributes you identified as the most critical for your system.
If there is one thing to retain is that identifying the driving quality attributes is a critical and challenging task you must focus on them early in your project. You can find a template to help you prioritize them here.