February 21, 2007

...Learn TDD with Codemanship

Software Aging & Portfolio Management

Maybe you know already, but I'm a great believer in the theory that software ages and eventually dies. Strangely, this fact doesn't seem to be taken into account in product portfolio management.

Some software products age faster than others

You have a bunch of systems in your business - or products, if you're a software company. Some are older than others. Some cost much, much more to maintain than others. Is there a relationship? I will bet hard cash that there is, and if only senior managers would acknowledge this fact then I suspect design quality would be a much higher priority on most projects. Software that is refactored more is likely to age more gracefully and deliver value for longer.

I don't believe - as some Agile folk do - that developer productivity can be maintained indefinitely, though. I think we are being fooled by thinking that a much slower decline in productivity is actually - seen in the short term - a flatline. It is not. It may be happening much more slowly, but it is happening nevertheless. The code will age. Indeed, the more productive we are in extending and changing it, the more complexity and disorder we inject into it. This is why teams that start their projects at a lightning pace tend to slow dramatically as the project progresses - their initial productivity increases entropy in the code faster, and so they hit the buffers much sooner (live fast, die young!)

I have seen this very effect hit a couple of companies very badly. They started out with eXtremely high productivity (you know who you are), but the entropy builds up very quickly and soon they are wading through treacle. Commercially, I have had project managers tell me that they just don't care about design quality. But the evidence suggests that they are plain wrong - in a commercial sense - to ignore it. I know for a fact that it has hurt these companies quite badly, both in their reputations and in their pockets.

Managing a portfolio of systems is like managing a stable of racehorses - you don't keep feeding the dead ones!

I suspect one of the keys to managing a portfolio of software products or projects is understanding this lifecycle and recognising the tell-tale signs. Of premature aging. I think it will also help to recognise death when we see it. How many of us have gone through the pain of administering the kiss of life to a code base that's been dead for years?

I reckon there's yet another fun dice game in this - probably related to the disciplines of product and portfolio management. Indeed, I think the aging (and dying) process might be one of the keys to successfully managing a product portfolio.

Think of each software product as a racehorse. When horses are younger, they can run faster, but the faster and more often they run, the quicker they age. Run your horses too hard and they may burn out and die young. Run them too slow and not often enough, and you don't make enough money to support them and buy new horses. Critically, we must learn to recognise when a horse has passed the point where it can run at all. If you visit a stables, you'll notice that they don't keep feeding the dead horses.

Posted 14 years, 6 months ago on February 21, 2007