I had an issue with a legacy component today. It’s pretty much a poster child for technical debt, ill-understood, no documented procedures, precious little logging and everyone avoids touching it in case it breaks. It’s also using an outdated architecture and the code is frankly bad. In fact, the debt’s so bad… I’ve been putting off paying it off. For the most part it doesn’t bother me and the inconveniences are mild.
The inconvenience today wasn’t. Actually, I got really lucky. Some messing around with IP addresses fixed it. But I don’t know why it broke, and that bothers me, because next time I won’t be as lucky.
Borrowing from the bank is a relatively safe occupation. You agree a sum, they check you can repay, you agree an interest rate and you agree a schedule of repayments. You keep up the payments and eventually, the debt is paid off.
Technical debt isn’t like borrowing from the bank. It’s like going to a loan shark. You can borrow any amount, irrespective of your ability to repay. The interest rate is high, and subject to change. You don’t even need to pay it off all of the time. In fact, it’s all smiles until the he comes round to break your legs.
If you’re lucky, you’ll get some warning. If you’re not, the first thing you know is when someone’s banging on your door telling you it’s time to pay up. And you’d better pay up there and then because the consequences of not doing so are pretty severe. And that’s the really pernicious thing. Technical debt often feels like a small problem, but it mounts up all of the time. You can put off repaying it most of the time, so it doesn’t feel that big. Until one day a something breaks and there’s no sensible way of fixing it. So pay it off before the payment becomes due.