Pete McBreen's Position paper

Maintenance is the normal state of most commercial software systems. The initial system development activities are an anomaly in that the system is not running while these activities are taking place. Once we ship and the system goes live we are in Maintenance until we replace that system.

Therefore I make the claim that "Maintenance is the most important phase in the life of a software system".

Priorities change during maintenance. Timescales are much shorter. When a valuable production system is down, the team has to be able to diagnose and repair really quickly. Similarly, when a business change is identified that needs a system change, the time to change is typically measured in days or weeks, not months or years as is typical during initial development.

I make these claims from a background of 8 years working with Manufacturing systems (in the 1980's) and the last 5 years observing (and assisting) with the evolution of a stock exchange system. These were developed in a variety of languages, but many of the lessons are the same. I can remember one conversation that points to the difference between a maintenance and development mindset (This was in a component written in C). "Q: How long is a UserId? A: UserIdLen. Q: No, how long is it really? A: It's UserIdLen bytes long, I don't know how many bytes that is." Eventually to satisfy curiousity we looked up the actual value in the header file, but the entire system has been designed without any embedded numerical constants, all of the field lengths are defined in one header file.

Lessons learned

Surprising observations

Design for Maintenance

Teams can design for maintenance, but current methodologies do not help very much.

Incremental development seems to be an essential part of design for maintenance. That way the team gets practice at dealing with new and changing requirements. This is why I now prefer incremental requirements capture, it allows the team to experience requirements surprises so that they do not build in too many assumptions. With a process that captures all of the requirements up front, the team (think they) know all of the requirements and hence make brittle assumptions. Object technology helps, but it is very easy to assume something that isn't so (or more likely has changed by the time you get to work on it).

Pete McBreen, 27-Sept-1999

To participate in this workshop please read the Call for Participation