Quality Attributes: a beacon for every product
Quality attributes are holistic parameters that drive your solution’s architecture and help you make the right technical decisions for your product. In this post, we’ll tell you what quality attributes exactly are, why they matter and how you should start working with them.
Building excellent software isn’t just about building the right features. Not every aspect of a digital product is tied to a single function or even any functionality at all. These are the elements we like to call quality attributes or non-functional requirements. Often overlooked, these elements play a pivotal role in your product’s architecture, growth and - eventually - your company’s success.
If you’re unfamiliar with them, it’s high time to get acquainted with quality attributes.
What are quality attributes?
Quality attributes define the holistic qualities of a solution or its components. Or to explain it to your kids: they are like the special qualities that make a toy awesome, such as how fast it can go, how strong it is, or how easy it is to play with. When talking about quality attributes, we refer to elements like performance, usability, maintainability, scalability and security.
Of course, quality attributes aren’t binary. It’s not a case of “having them” or “not having them”. Think of it more like a spectrum or a degree. You won’t say: “I want my product to be scalable.” You should say: “My product should be scalable to a certain degree, without losing too much performance.”
Quality attributes aren’t binary. It’s not a case of “having them” or “not having them”.
Why should you care about quality attributes?
Quality attributes drive a solution’s architecture, outlining the essential characteristics a system must possess to meet user and stakeholder expectations. Architectural decisions made during design and development are directly influenced by these attributes.
For instance, a healthcare app requires a laser focus on security and privacy, significantly impacting the eventual product’s foundations and future construction. Trying to achieve these attributes as an afterthought is challenging and extremely expensive. So, let’s make this clear right here and right now: quality attributes should be realised by design.
Not a checklist, but a game of trade-offs
It’s crucial to understand that you can’t have the highest level for all quality attributes simultaneously. It’s not a checklist. Otherwise, everyone would just say: “Well, give me all of them!” Consider it more as a priority list that will guide all your product decisions. In many cases, quality attributes are incompatible with each other. For example, enhancing performance may require sacrificing a bit of reliability. Or improving maintainability means making concessions on performance.
These trade-offs are an essential part of a product or solution’s architecture design. Therefore, it’s crucial to carefully consider which quality attributes your solution needs. But also: which ones are more important than others. These decisions shouldn’t be made overnight, but require careful, conscious and continuous consideration.
Qualitative software is a continuous process
Once you’ve identified and prioritised the quality attributes of your product, service or platform, ensuring they meet the intended requirements becomes crucial. It’s important to recognise that nothing remains static in this process, though. Your solution needs to adapt to the ever-changing realities. Therefore, you need ways to validate that your emerging solution - which factors in the changing context - effectively meets the intended quality attribute requirements. This means you’ll need the appropriate metrics and target levels to test again.
In the event of significant changes in the business context, your quality attributes will need to evolve as well.
Additionally, it’s also important to align your quality attributes with your dynamic business reality. In the event of significant changes in the business context, your quality attributes will need to evolve as well. For instance, if your user numbers increase more rapidly than initially anticipated, you might need to revisit related design decisions sooner rather than later. So, you also need to implement mechanisms to monitor the underlying assumptions associated with the current set of quality attributes.
Measuring your quality attributes
Measuring and monitoring your quality attributes is key. But how on earth does one measure or monitor abstract characteristics like performance, usability, maintainability, scalability or security? That’s where the story of Site Reliability Engineering comes into play.