«    »

The Importance of Maintainable Software

I've heard that a typical enterprise business application spends at least 80% of its time in maintenance (versus development). I don't have a reference for this, but if you assume that an application takes one year to build, and is in use for four years, then you arrive at the 80% figure. Why does software need maintenance? Unlike physical products, software exists only in digital form, which means that it is not subject to wear or decay. So in theory it is possible to have a piece of software running for years without modification. In practice, this doesn't happen. Software is like a biological organism / species: it exists within a particular environment, and must adapt as its environment changes. Some of the causes of software maintenance are:

  1. Defect fixing. This is most common when software first goes into production use from development.
  2. Changed or new business requirements. During development, projects can experience a 25% change in requirements (Rapid Development by Steve McConnell, page 331). Depending on the level of customer involvement during the development process and the handling of requirements changes during development, there can be even more requirements changes once the software goes into production. If a waterfall development methodology was used with the requirements fixed up front in the requirements phase, then the customer will likely have a backlog of changes to be made once the software is in actual use. If the customer had minimal involvement during the development of the software - i.e. if the first time they saw the software was in user acceptance testing, then they will likely have changes they'll want done once they actually sit down to use the software.
  3. Changes to the software's execution context. By execution context, I refer to the hardware and other software required for a business application to run. This includes such things as the operating system, database, application/web server, programming libraries, and network. Changing the operating system version or hardware will often have minimal impact on a business application, but will require maintenance effort to test the application on the new configuration and migrate to it.

So if business software will spend much more time in maintenance mode than in development, and will need to be maintained / changed fairly frequently, then it seems obvious to me that it is important that such software be maintainable. I define maintainable software as software for which it is easy to develop and deploy changes with minimal risk and impact to existing users. This definition suggests another reason why maintainability is important: you don't want to make changes to software in production use that negatively affect users (i.e. by introducing new defects in previously working functionality). This is not an issue faced in development. A poorly-coded piece of software can often be hacked and 'duct-taped' together to pass user acceptance testing. But once such software is being used daily, it becomes more and more difficult (approaching impossible) to make required changes, typically because each defect fix unexpectedly introduces new defects.

Many of the software development books I have read spend little time talking about the challenges and importance of maintainable software, and typically assume a new (greenfield) software development project. I hope I have convinced you of the importance of creating maintainable software. In future articles I will discuss how to achieve this.

If you find this article helpful, please make a donation.

One Comment on “The Importance of Maintainable Software”

«    »