Maintainability increases your development speedMaintainability can be described as ease or difficulty with which a software system can be modified. Controlling maintainability is key for your development speed.
As a software company, you want to stay competitive through hitting the market window with a good product at a reasonable cost. There are many potential impediments, one of them is having a codebase that is difficult to maintain and update.
Being a developer can sometimes be a painstaking job. If you have to change source code written by others (or even by yourself) you know that it can be easy or really difficult. Sometimes the lines of code to change are nicely isolated and tests confirm that it works as intended. At other times, the only solution may be to create a hack that unintentionally introduces more problems than it solves.
The ease or difficulty with which a software system can be modified is known as its maintainability and is determined by properties of its source code. Low maintainability means that developers spend much time on maintaining and fixing old code leaving less time for writing new features.
Lack of maintainability is to a large extent caused by simple issues that occur over and over again. Consequently, the most efficient and effective way to improve maintainability is to address these simple issues. A combination of relatively simple skills and knowledge, plus the discipline and environment to apply them, leads to the largest improvements.
According to ISO standard 25010, software quality can be broken down into eight characteristics, whereof maintainability is one. However, maintainability has specific significance in that lack of it causes substantial negative business impact and it is also an enabler for other quality characteristics. When issue resolution and code enhancements can be done quickly and easily, maintenance cost is lowered and time to market for new solutions can be reduced. Generally, optimizing a software system requires modifications to its source code, whether for performance, functional suitability, security or any of the other characteristics defined by ISO 25010.
Just using software code style guides or static code analysis tools as a way to improve can be discouraging. They often contain hundreds of rules, each of which implies a guideline. They all make sense but their effect on maintainability are not equal.
So how can maintainability be controlled in a more structured and effective way?
SIG (Software Improvement Group) is a company that measures software quality by using a certified software analysis laboratory performing inspections against the ISO 25010 standard for software product quality. Based on data collected by SIG, maintaining source code takes at least twice as long when maintainability is measured below average compared to when maintainability is above average (see figure 1).
Figure 1. Relation between maintainability rating and time to implement enhancements or fix bugs. From “Faster issue resolution with higher technical quality of software”, Software Quality Journal, 2011.
Through working with real world systems and creating a large database of benchmark software solutions, SIG have selected the eight system properties that have the largest impact on maintainability. For any system, they can readily be measured, are technology independent and can be translated into actionable insights and guidelines for developers working with the system.
In ISO 25010, maintainability is composed of five sub-characteristics: analysability, modifiability, testability, modularity and reusability. As shown in figure 2, these five areas are impacted by the eight system properties that SIG have selected for their code analysis. By rating a system on each property, a rating can be compiled for each of the five maintainability sub-characteristics, and finally an aggregated score for the complete system can be calculated. Ratings are done in number of stars from one (poor, lowest 5%) to five (best-in-class, top 5%).
The eight code properties that are measured in the SIG tool inspection of code are: Unit size, Unit complexity, Unit interfaces, Duplication, Module coupling, Component independence, Component balance and Volume. (Details can be found in the book “Building Maintainable Software”.)
Figure 2. Relation between ISO 25010 sub-characteristics (to the left) and the eight measured code properties (on top).
These code properties are easily translated to guidelines for developers in a system, and although there is sometimes a need to do trade-offs between guidelines, they generally push a system in the same direction. The overall star rating can also be translated into an estimated yearly cost for maintenance and an effort for raising the technical quality of the system to the next star level. Thus, an analysis will both give qualitative guidance on improvement measures as well as quantitative estimates of cost for maintaining or improving the system. The star rating as such is also benchmarked with all the systems inspected by SIG (currently more than 2000 systems worldwide), and the benchmark data is recalibrated yearly to be relevant and up-to-date.
At Addalot we think that code quality is at the core of being a successful software company, since it is so closely tied to cost and time to market. To measure and quantify how well your codebase is doing in this respect is a good idea – but it is even more important to act on it. Do you need to do general or targeted refactoring? Can you make a habit out of checking and measuring code quality? Should you update your development process to more pro-actively address coding quality issues?
This article is largely based on the book “Building Maintainable Software” by Joost Visser, O’Reilly Media Inc., 2016.
Mentioned in the text: International Standard ISO/IEC 25010. Systems and Software Engineering – Systems and Software Quality Requirements and Evaluation (SQuaRE) – System and Software Quality Models. First Edition, 2011-03-11