BYC Home TechSets Free Articles Harvard Business Offers Career News Job Boards About Us
Learning to Distinguish a Solution from a Problem
Robert L. Glass, Computing Trends

This column is about software maintenance.

Don't quit reading, now! I know that seems like a pretty boring topic. But it's also a vitally important and, more to the point, a totally misunderstood one.

I've been flaming about software maintenance for what seems like several decades. Someone comes out and says something completely stupid about maintenance, and once again I leap into the fray to try to set the record straight.

The Latest Stupidity

InformationWeek is one of my favorite popular-press computing magazines. It doesn't engage in the hype and excess of most of its kin, and I deeply respect it for that. But it was an editorial in the 24 March 2003 issue of IW that set me off this time. In that issue, Bob Evans, IW's editor in chief, starts off on a crusade about what he calls "The Monster in the Basement." As you read on in his editorial, you come to realize that he's talking about legacy software. Not only does he call it a monster, he says "it's strangling innovation and progress," "it's a recipe for atrophy, irrelevance, and ultimately collapse," and the increase in the amount of maintenance over the years is a "dangerous trend."

IW and its editor aren't the first to pick on maintenance, of course. Over the years, it's been a favorite topic for those who see it as an impediment to progress. One notable in the field even paraphrased the "don't automate, obliterate" phrase to apply it to maintenance of legacy code, implying that we ought to throw away the old and rebuild anew. And if you read Evans's editorial carefully, that's what he's advocating as well.

The Buck Stops Here

We in the field seem, in many ways, to reinforce that negative view of maintenance:

  • We tend to assign the newest and greenest programmers to maintaining our legacy programs. We assign the best and brightest to new development.
  • We eschew the old and the ancient as being out of date. We evolve toward new paradigms and new concepts and are eager to leave the old ones—including old code—behind.
  • We teach programmers how to write new programs, but we rarely if ever teach them how to read old ones.
  • We talk about software maintenance as if it were a problem and think we should do less of it.
  • We evolve and promote methodologies to guide our new software development. We rarely provide tools and techniques, let alone methodologies, to maintenance programmers.
  • Once a piece of new software goes into production, we breathe a sign of relief, break up the team, and prepare to move on. We rarely hold postimplementation reviews, gather past project data for future learning experiences, or organize what some academics call experience factories to capitalize on lessons learned.

In short, we generally behave as if the maintenance of legacy software is a Bad Thing, one that we believe would go away if only we would engage in enough Good Acts.

The Facts of Maintenance

All of that is backwards! Somehow, over the few years that software has been a productive, useful discipline, we keep trying to kill the goose that lays more golden eggs than any other in the software barnyard. By disrespecting the maintenance of legacy software, we've turned our collective back on (a) what most people in software do, (b) what most of the money in software is spent on, and (c) our greatest opportunity to please our clients and customers.

But there's more. In disrespecting maintenance, we also ignore some of the most important and perhaps surprising facts in the software field. In Facts and Fallacies of Software Engineering (Addison-Wesley, 2003), I list these three frequently forgotten but fundamental facts about maintenance:

  • Maintenance typically consumes 40 to 80 percent of software costs. So, it's probably software's most important lifecycle phase.
  • Enhancement is responsible for roughly 60 percent of software maintenance costs. Error correction is roughly 17 percent. So, software maintenance is largely about adding new capability to old software, not fixing it.
  • Better software engineering development leads to more maintenance, not less. (To completely understand this counterintuitive fact, you'll have to read the book! But basically, this concerns backlogs of maintenance activities such that, if a maintenance task takes less time, you can address more of the backlog.)

Given those facts, I conclude that maintenance is a solution, not a problem (another frequently forgotten but fundamental fact, and the rallying cry I'd like you to take away from this column!). And, if it's a solution, we should be doing more of it, not less.

History Repeats Itself

Let me tell you a little story about maintenance, one that's very personal and yet generalizable to the whole field. One of software's most articulate spokespersons, when he was fresh out of college, was asked by his company to discard an old, legacy software product and produce a new version of it. He accepted the assignment with alacrity, looking forward to putting to work all those gleaming new concepts he had learned in computing academe.

As time festered on, he realized to his horror that the task was approaching insurmountability. No one knew all the requirements for the old product (those who did had left the company long ago). No one knew enough about the old code's design to reengineer it to recreate those requirements. No one seemed to understand how much work had gone into the old product, so the expectation existed that with new and gleaming techniques, the re-creation would somehow take an insignificant amount of time. And, as time passed, no one in management held much patience for the mushrooming task of discarding the old and re-creating it.

In the end, the new product was thrown away, a dead loss, because it couldn't be made to do what the old product had done. The old, legacy product was placed back in maintenance, soldiering productively on into the future.

If that were the only such story in software history, it would make an interesting anecdote, but nothing more. But I've seen this story repeated time after time. Brilliant software engineers such as David Parnas and his team were unable to reproduce, using new techniques, the software functionality for the A-7 aircraft on a sufficiently timely basis. Hordes of software specialists at a leading banking institution were unable to produce a new, enhanced version of their old and seemingly obsolete main product because they couldn't wrap their arms around its complex functionality. In my view, some of the worst disasters in computing history have involved trying to rebuild those old legacy systems.

Conclusion

Now, is legacy software really "the monster in the basement"? Or is it, instead, the silent majority of software work, quietly cranking out valid, useful results, decade after decade?

You know what my answer is.

Robert L. Glass is editor emeritus of Elsevier's Journal of Systems and Software, the publisher and editor of the Software Practitioner newsletter, and a certified "premier curmudgeon of software practice." Contact him at rglass@indiana.edu; he'd be pleased to hear from you.

Advertisement




Suggestions