The Four Aspects of Software Quality
Robert Watson
Lead Full Stack Developer | Software Engineer | Infrastructure & i18n Expert | Sitecore | Cloud Architect | Kubernetes | Global Content Personalization
I first learned about the four aspects of software quality while studying for my bachelor's degree during a semester abroad in the UK. These aspects were drilled into my head and have since become an obsessive consideration every time I code something new. Not only do they drive the overall quality of code and reduce bugs, but they also instill a level of consideration for your future self and other developers who will work in the same codebase. It is almost as if you and your team are living in the same house, sharing resources like dishes, the dining room table, and other common areas. Just as we wouldn’t leave our dishes in the sink for someone else to clean, we shouldn’t write poorly maintained code for someone else to fix.
Beyond consideration for other developers and delivering a maintainable product for the client, the biggest motivator for instilling these practices into our work is integrity. Software development is a career path we’ve chosen and what we dedicate much of our waking hours to. In all likelihood, the time we spend programming represents the most significant intellectual effort we output during the day. Over time, the quality of our code and the solutions we create become a measure of the intellectual capacity we demonstrate to the world.
With this in mind, we do not code for the client or even for the company we work for (if they are not the same). We code for ourselves. The work we submit to the world is a reflection of our intellectual capability. If these aspects are violated, it reflects a failure of our own integrity.
Conversely, we must remain objective about the code we write. If our code needs to be refactored or even deleted to meet these aspects, it must be done without resistance. This should be seen as an opportunity for reflection and improvement.
There are four main aspects of software quality, often overlapping and complementing one another: Readability, Reliability, Dependability, and Maintainability.
Readability
As stated before, code must be understandable for the next developer—or your future self. This key aspect helps reduce the time and money required to maintain the solution.
When I was a junior developer, my mentor told me that my code should only take 15 seconds to understand. For more complex code, there is room for flexibility, but there are many strategies to help achieve this “15-second rule.” Below are some examples to improve readability in both complex and simple implementations:
Reliability
Reliability ensures that a solution can withstand the inevitable passage of time. We must not only solve the current problem but also consider how the solution will be maintained long-term. Will future changes or deviations still work within the existing code? Could different input variables in the future break what we’ve written?
Thinking long-term reduces technical debt, lowers costs, and increases satisfaction for both the client and the developers maintaining the code. One key strategy to enhance reliability is configuration. Anything subject to future changes should be handled through a configuration that is easily accessible.
领英推荐
The placement of configuration variables is also important. For example, variables not easily understood by the client are better kept in a config file for developers or DevOps to maintain. Simpler variables that the client can manage could be exposed as content items.
Dependability
While closely related to reliability, dependability focuses on ensuring the system is accessible and functional when needed. It must be flexible enough to handle new use cases without sacrificing maintainability.
Maintainability
Maintainability ensures that the codebase can be tested, repaired, and evolved easily over time. One common design principle to achieve this is the Open/Closed Principle: code should be open for extension but closed for modification. This requires proper abstraction to balance long-term reliability with practical implementation.
Abstraction
When working on a complex project, start with an outline. Early in my career, I was taught to sketch out what needs to happen without including too many details. Once the outline is complete, you can refine it step by step until it’s ready for coding.
With experience, this process becomes second nature. Often, I find myself programming in my head before even sitting down at a computer—sometimes to the amusement (or confusion) of friends when I’m lost in thought.
Conclusion
There are many solutions to a problem, but very few are truly correct. We cannot defend subpar code with the excuse, “Well, it works.” Imagine dining at a restaurant where a waiter serves you a plate of spaghetti. Would you eat it with your hands just because it’s possible, or would you use a fork and spoon? Both methods technically work, but only one is desirable.
The same applies to software development: quality matters. By adhering to these four aspects—readability, reliability, dependability, and maintainability—we can deliver not just functional solutions, but truly exceptional ones.
Robert, you are on point with this. It is so frustrating to open up someone's code and see something impossible to understand. It is even harder when the coder cuts and pastes someone else's code and does not take the time to clean it up.