Holistically, if your system is meant to endure the test of time (think Google-scale), more technical debt is worse than less technical debt.
Holistically, if your system is meant to endure the test of time (think Google-scale), more technical debt is worse than less technical debt.
While some exceedingly few products have that destiny, it’s precisely the naive bias towards thinking that your project does that leads to wasteful over-engineering.
Products and projects are not the same thing. Most of the Google-scale products that you see leveraged tons of technical debt on projects along the way, some critically valuable and some certainly wasteful.
If you’re adding a feature to one of these products that are already at that scale, then your attitude toward technical debt will be different.
But effectively nobody reading this thread is doing that, and the few that are know who they are.
Most readers here are working on projects with near-term deadlines and development lifetimes measured in a few months or years. As much as judicious exercise of technical debt enables those projects to deliver on their requirements more quickly and for less cost, more is better.
Many of us come into the industry thinking otherwise because we’re drawn to the intellectual purity of clean systems, but that purity just isn’t what actually matters most of the time. It can take a while to accept and internalize that.
That's the false dichotomy which earned me my stripes.
I used to think I am the former guy, then I realised I am the latter guy. The only thing that changed is that some time passed.
The hind-sight of my mistaken identity is that the systems I have been working on for 15 years became less, not more maintainable as a result of tolerating technical debt.
They also became Google-scale (which is what we were hoping for, but didn't believe at first).
I am the furthest thing from a purist. I am a filthy rich pragmatist who regrets having low-quality standards.
We'd all like to be a filthy rich pragmatist but I wonder just how much the 'low-quality standards' enabled you to achieve that. Seriously, I would love to be a millionaire with regrets about low quality code instead of being broke with junior developers pointing out my code smells and technical debt.
These kind of assertions are always after the fact. And in hind-sight I think we could've done a tad better.
I might be less-rich, but that's not even close to being broke. And the people I hire to clean up my technical debt would hate working here less.
I've always felt we've misunderstood technical debt. It seems to be regarded as a problem with a lot of negativity surrounding it. Developers seem to fear being accused of introducing technical debt - like it's the worst kind of developer crime. But in reality, there is value in embracing it in early stage projects. As thinkingkong mentions below; 'Its only debt if it sticks around long enough to need to be dealt with.'
> But effectively nobody reading this thread is doing that, and the few that are know who they are.
Aren't a large fraction of HN readers working at Google or similar companies?