Juggling Plates in Variable Gravity
We all know from painful experience that modifying and extending existing software is far more expensive than creating software from scratch. Whether you call it “refactoring” or “maintenance” or something else, once a software system goes live, suddenly changes become significantly more challenging. However, we don’t often talk about why, so permit me to indulge in an analogy.
Imagine that you, and a few of your close friends, are practicing a juggling act that will involve throwing fine china plates, donated by volunteers in the audience, to one another. Knowing that this is an expensive and risky act, your troupe first procures a large stack of “practice” plates – they’re about the right shape, and about the right weight, and they’re cheap so that when you inevitably drop a few and smash them, they’re easy to replace.
Your troupe’s practice goes about as well as can be expected – incremental improvements, many smashed plates, a few complete reworks of your blocking and choreography, many smashed plates, a lot of feedback from a handful of folks you’ve dragged into rehearsals with you, and many smashed plates. However, every time the act falls apart and the plates hit the ground, the group of you shrug, pick up some more plates, and try again. These “practice” plates have no intrinsic value, so losing them all means nothing and costs very little.
Little by little, you refine your act, until you can do it without any dropped plates at all! You and your troupe can smoothly keep enough plates in the air to serve a five-course meal without having any mishaps.
Then comes opening night.
Suddenly, you’re up there with your expensive, real plates, in front of an audience of hundreds or thousands. These plates matter, and even if you drop one, you’ve still got many others in the air that also matter.
In fact, these plates matter so much that if you do drop one, you need to somehow put it back together and get it back into the show without dropping the others.
Two nights later, you discover that you need to change your juggling act, right in the middle of the show, without dropping any plates.
So it goes with software, too. While you’re building a new system, it’s relatively easy to gut your test data and start over, and nobody cares. Once your system holds real data, though, you need some way to keep the plates in the air while you make changes. Suddenly, the data matters, and the longer your system’s been around, the more it matters to everyone involved.
While there are other factors that drive up the cost of maintaining existing software, screwing up your users’ data is one of the fastest ways to destroy your users’ trust. How well does your system juggle plates?
1 Comment
Other Links to this Post
RSS feed for comments on this post. TrackBack URI

By Derek Lewis, September 19, 2011 @ 6:19 pm
Variable gravity? Nice pun. Intentional?
It’s not a very grave matter if you drop cheap plates. Dropping the fine china plates though is a matter of significant gravity.