Having previously been a programmer myself, I can attest to very real and maddening phenomenon that affects nearly everyone in this line of work: the urge to rewrite. It comes on hard and fast, usually immediately after finishing a piece of software. Sometimes it even comes on smack in the middle of your efforts.
The reason is simple: as you go through the process of writing the code, you gain new perspectives on the shortcomings of your original approach to the problem. It’s the same thing that happens when we look back on the events of our past and think “if I only knew then what I know now…” In a way, the better the software that you’ve written turned out, the better your perspective becomes, and therefore the more pernicious the urge to rewrite it becomes.
Maybe no one would notice if I started over...
A great example of this is our own Knowledge Management software. It’s a great piece of software that’s very highly regarded in the industry, and an awful lot of people tell us how much they enjoy using it. We could very easily add on to the existing code base, adding new features and improving existing ones, and release a new version and make a ton of money. But it wouldn’t be as good as we know that we could make it. Because now we’ve been working with the product for years, supporting it, using it on our own site; we know too much about it now; we know what its potential is.
So what are we doing now? Rewriting the whole damn thing from scratch. And it’s going to be great. It’ll be a lot faster, more flexible, and have lots of little touches that would’ve been too difficult to work into the old framework.
Of course, like anything, there has to be balance. You can’t rewrite a product every day or even every year and still remain profitable. At some point you have to recognize that no matter how much potential you see, only a certain amount of that potential is realizable in the immediate future. No matter how good a piece of web software becomes, there will always be room for improvement. The better a piece of software gets, in fact, the more strongly it advocates for the shifting of its own paradigm. You’re always climbing into view of the next incredible set of previously unthinkable goals.
The art of software development is in recognizing when you’ve found a nice plateau, and then allowing yourself to rest there for a while. That way you have room for some horizontal growth–feature enhancements, optimizations–and this give you and your clients time to enjoy all the hard work and creativity that’s gone into the software’s current iteration.