Jeff Atwood makes some good points regarding paying down your technical debt. I certainly agree with many of his sentiments.
The problem is, refactoring takes time. The best option is a little now, a little later. Putting it off for long periods, will eventually come back to bite you.
I’m in the process of being bitten…
I’m currently working on a product, written in Java, which hasn’t seen much love over its lifetime. It’s perfectly functional, and popular with our customers, but it’s crying out for refactoring.
The initial product release was 1999. By pre-dating Ant, the build system is comprised of some 1500 lines of batch script. Looking back through its history in our source management system, it seems that this was an upgrade from a previous make based build system. I can hear all you modern Java developers shuddering about now.
Another example from this project is its web based user interface. That’s pretty cutting edge for 1999, but alas, time and technologies have moved on. Having html hard-coded in servelets no longer seems quite so advanced. How does one bring AJAX to the product, without great difficulty and refactoring?
Our competitors have also moved on, and are doing their best to keep us on our toes. Since we make a large chunk of change from hardware sales, and we can’t release hardware without supporting software, we are under constant pressure for feature updates and new functionality to support new hardware models. This, perhaps, goes some way to explaining why our technical debt has been rising. Management and Marketing departments have always wanted new features now, and Engineering has never been able to explain why spending time on refactoring is worthwhile.
How long can this situation last? At what point during the 24 page install guide, do you realise that we should be making this simpler for customers? When do non-software people begin to realise that the accumulation of hacks, quick-fixes and workarounds, makes your software more shanty than mansion?
I can only liken this situation to racing on a flat tyre. Do you put the boot down, and try to not lose ground, or do you take the opportunity to fix as you go?
Thankfully, I think we’re beginning to realise. Though as of yet, Management and Marketing want everything we have, and more, made simpler and better, yesterday.
They’re asking us to fix the tyre, without stopping the car.