Is the invisible face of software maintenance destroying your business?
Published 26 March 2012 under software maintenance
Neglecting the invisible face of software maintenance means that your code builds up cruft over time. This makes it increasingly difficult to change and extend. The end result is unhappy developers and customers.
I’m sure that you’ve come across software developers with the attitude “when I’ve got time I’ll make my code nicer/better/cleaner/safer”. However, this attitude could be costing your company a great deal of money through missed release dates, increased bugs and poor customer relationships.
When a software system has low internal quality, developers try to minimize changes as they cannot be sure if they have introduced new bugs or changed functionality. This is self perpetuating and quality continues to decline due to a fear of refactoring. The customer outcomes of low quality are damage to reputation, increased time to market and potentially project cancellation e.g. Gorman cites the case of a well known company that experienced a 20x cost increase in the cost per line of code after only 8 releases due to low quality.
Software maintenance comes in four flavours (see ISO standard ISO/IEC 14764):
Corrective maintenance: Reactive modification of a software product performed after delivery to correct discovered problems.
Adaptive maintenance: Modification of a software product performed after delivery to keep a software product usable in a changed or changing environment.
Perfective maintenance: Modification of a software product after delivery to improve performance or maintainability.
Preventive maintenance: Modification of a software product after delivery to detect and correct latent faults in the software product before they become effective faults.
So what does it all mean?
- This is probably what most people mean when they talk about maintenance i.e. bug fixing.
- This is essentially "feature" addition to keep the product current.
These two are generally the visible face of maintenance. The need for them is usually well understood as they are directly visible to customers. Consequently, it is generally easy to convince management of the need to resource such maintenance.
Now we come to the interesting part.
- I think the most important part here is, "Making it easier to maintain."
- This is trying to identify faults which haven't manifested themselves yet. This could be because it's in a rare use-case or we have just been lucky.
Our experience is that these two are not even seen as part of maintenance by many developers and most managers. This is particularly the case when test coverage is poor and typically in these cases both perfective and preventive maintenance are ignored as not being cost effective. In our experience the problem is that perfective and preventive maintenance are key to minimizing the long-term cost of corrective and adaptive maintenance.
So what's the answer?
The most effective (http://en.wikipedia.org/wiki/Software_maintenance) in terms of impact are:
- Maintenance specialists 35%
- High staff experience 34%
- Table-driven variables and data 33%
- Low complexity of base code 32%
- Code restructuring tools 29%
- Re-engineering tools 27%
with the most detrimental effects being:
- Error prone modules -50%
- Embedded variables and data -45%
- Staff inexperience -40%
- High code complexity -30%
- Manual change control methods -27%
How can we help?
Whilst working on your projects, Afterthought Software provides training for your most important asset, your staff, through the latest best practices and development tools.