Tuesday, August 19, 2008

Alternative Metaphors for Technical Debt

Brian Marick (see link on side nav) has been blogging about new metaphors for technical debt. He used "fertile assets", a gardening metaphor, which I like. If you don't amend the soil and plant your seeds at the right depth and weed thoughtfully, you won't get a good harvest. You might garden rather lazily like me and use ground covers and minimum tillage, but those are still good practices and produce good results. But if you let all the weeds grow up, it might be hard to remove them without damaging the good plants. Just like code that's hard to change if you don't have automated tests to tell you something got damaged.

I like Brian's metaphor, but to me, it's too positive. If we don't protect our code with tests, and don't refactor continually, and just hack in code changes without thinking, we won't just have a bad harvest, we might ruin the soil so it can't grow anything again.

I think technical debt is more like global warming. Lots of people claim it's just a myth and that we can ignore it. If I, as a tester, try to use good practices, but the programmers don't, it's like Denmark being green but not China. If everyone collaborates on a solution, emissions will go down quicker, and we will all breathe easier.

But, since global warming is a politically charged subject, it will get people arguing about that instead of thinking about how to make teams understand how shortcuts, poor design and lack of automation will grow an ever-larger burden for them to carry.

I'm now working on a metaphor that involves donkeys, perhaps log skidding. Recently my friends cut some small trees and branches near their creek bottom to make room for a bridge. We used the mini donkeys to haul the wood and brush over to the cabin's woodpile. If we tried to put too many logs in the bundle, or tied them so they dragged too much in the dirt, the donkeys had trouble pulling them up the hill. If we didn't take the time to tie them together well, they fell off. But when we took enough time to prepare optimally-sized, securely-tied, drag-dynamic bundles, we could make quick trips, and the woodpile grew fast. A little experimentation taught us that cutting corners didn't pay off.

1 comment:

Richard said...

Out of curiosity, did you ever come up with any other metaphors for technical debt other than gardening?

I have great respect for Ward Cunningham, but have noticed that using "technical debt" as a metaphor seems very limited in use. It seems to be a reasonable metaphor to convince management of the need to "till the garden", but once it has been decided that a group should take some time out to reduce the technical debt, it seems to add no real value. Gardening as a metaphor, has a bit more use at the point of action, but still seems to be missing clear indicators what part of the software is causing issues and why.

Bear with me, but it seems like there should be a metaphor to indicate the issues with the state of the software and help identify the areas that need to be improved. Perhaps something with keeping snow shoveled off the sidewalks so that you can move quickly and not keep falling on your bottom. This way, any software that needs "this shoveling of cruft", can be recognized as the software that developers are slow to make changes to and those changes typically result in more bugs than other code.

Also seems like we could capitalize on the vast amounts of snow vocabulary like igloos, snow tunnels, snow ball fights, and even snowmen.

Anyway, this posting is a bit dated and having lived in Texas for the last 20 years, I am not sure I am the best to propose a snow metaphor ;).

btw, my twitter account is twitter.