I write software because it is beautiful. Well-crafted code combines the elegance of mathematics with the intimacy of prose. Since programming is an engineering discipline, aesthetics and utility have a tendency to align. At its best, the software industry is place where you get paid a lot of money to create beauty all day long.
Bad software is ugly. Spaghetti dependencies, rush work, a blithe disregard for clarity–these are like a bowl of rotting fruit set in the middle of an elegant dinner table. They are also a sign that the code probably won’t work well–it will be buggy and unextendable, and ultimately consume more in the effort it takes to maintain it than it produces by performing its appointed task. I’ve been in this business for a while now, so my instincts about what’s going to work long term are pretty good, but expressing them in terms of beauty often strikes an off note of frivolousness in business planning meetings. That is why I was overjoyed when I came across the technical debt metaphor. I could now relate my architectural concerns in terms of dollars and cents, a language everyone understands.
Technical debt is a wonderful metaphor, but it doesn’t go far enough. When the analogy is made explicit, it’s usually expressed in terms of interest rates. Bad code is like an unpaid credit card–taking little bites out of the bottom line with finance charges and late fees. These are clearly bad things, but they are annoyances. A nagging drain, but nevertheless small and predictable. Everything is still under control.
This is not the way bad code actually does its damage. The credit card company puts the late fee down at the bottom of your statement where it rankles you every month, whereas the dirty little secret of bad code is that it works most of the time. Bad code is just reliable enough to not draw attention, and ugly enough to scare off anyone who would seek to repair or replace it. It is a stick bug with a foul-tasting carapace. And when the bill on technical debt finally comes due, it arrives not as a finance charge but as sudden catastrophic collapse that strikes for no reason and hangs around for weeks, as the unwarranted complexity that was the cause of the whole problem to begin with transforms itself into tenacity.
Technical debt is toxic debt. It’s not an unpaid credit card. It’s a snarl of collateralized debt obligations and credit default swaps poised to suck you down when you least expect it and not let go. This is the sense of the metaphor to put forward, because this is how it plays out in the real world.