“Finished” but unreleased (maybe even untested) code is just like that little container of baked beans that you put in the fridge three or four weeks ago.
What? You don’t remember the baked beans? Well, let’s go look in the fridge…they’re there. Way in the back.
Now look underneath the beans. Hmmm, not sure what’s in that container. And we’re not sure we want to open it. But since we don’t have time to deal with it right now…well…oh, let’s just leave it there for now. (If you can’t relate to this, you clearly have NOT been to college!)
Unreleased code is just like those beans (and that, um, whatever underneath them). It goes bad on you.
When the code was new, chances are that your team knew the requirements. That you felt confident that the requirements were met by the code. That the code fit into the rest of the project. That you knew what assumptions were being made (there are always assumptions). And that someone could understand the code.
Now that it’s been sitting there for a while, you’re not so sure. The developer who wrote it doesn’t remember as much about it. Even if it “works”, does it meet the requirements? They might have changed by now—including those that were not perfectly documented.
Let that code sit long enough and chances are that no one wants to open it up and have a look. So it sits even longer. Eventually the only reasonable thing to do is throw it out.
One of the great things about Agile Development is its emphasis on frequent releases. Agile Development (specifically, Extreme Programming) also likes us to try to use metaphors whenever useful. So how about this one: releasing software is like cleaning out your fridge!