Technical debt smells like money
Ah, I just love the smell of technical debt! Do you know what it smells like? No, no, not old socks and the festering corpses of bad decisions.
Technical debt smells like money.
What?! Yes, money. At least, it smells like money if you’re doing it right.
Startups are built on all sorts of debt. They need to borrow money, whether literally borrow it from an investor, or borrow the opportunity cost from the founder doing something else (i.e., bootstrapping). They need people sometimes before we can pay for them, or can pay them the usual market rates. They need designs before they can get a designer (i.e., using themes). They need ops before they can hire an ops team, accountancy before they can hire an accountant, legal agreements before they can afford a lawyer.
Everything a startup does in the early days is borrowing against the future and making a bet that it will pay off in the end.
And this is true of technical debt. When I say technical debt smells like money it’s because building a product and getting into the hands of customers is the first—and only—priority at the early stage. The game is to move fast enough to build a business that survives long enough to start paying off the technical debt incurred in the early days.
It’s a delicate balance though. Take on too little technical debt and you’ll have a “perfect” codebase but you’ll have taken too long to ship, run out of money, or lost valuable customer feedback whilst you polished the code.
On the flip side, if you take on too much technical debt you might not even ship the first version. And if you do, you might not have enough flexibility to rapidly iterate based on customer feedback.
So, it’s a balance. It’s not no-debt or lots-of-debt. It’s a middle ground.
But I have no a doubt: a startup without any technical debt is doomed as a business.
How many successful businesses have you heard of with no technical debt? Zero. How many people do you know have spent their time polishing code and ultimately never shipped? Plenty.
There’s a survivorship bias at work here too: we see lots of technical debt everywhere in this industry. I posit that it’s not because we’re all terrible people and poor programmers. It’s because technical debt is a winning business strategy (if done well). Companies that don’t manage their technical debt correctly, either by having none or by having too much of it, just don’t survive.
Like I said, technical debt smells like money.
I’ll write a follow-up post about how I think about technical debt, how and when we pay it off, and how we prioritise its various forms.