Lately, I've come across a couple of blog posts like "Most Technical Debt Is Just Bullshit" and "Technical Debt Isn’t Real". They're discussing whether we twisted the initial definition of technical debt to mean anything and thus nothing. People have since then asked me about my opinion on the topic. So, here it is.
Before I start I'd like to state one thing I particularly don't like about any of those articles: Their catchy but aggressive titles. I've written about non-violent communication and I believe that if you want to have an earnest discussion you can't use such titles. This article contains my thoughts on the topic and I'm trying to keep emotion out of it.
TL;DRa symptom of a larger organizational problem.
If engineering teams are not empowered to make decisions on their own this can lead to large-scale problems that no product manager will be able to solve.
We need to acknowledge that it's impossible to avoid technical debt and we should, therefore, design our development process in a way to reduce it every day.
One way of doing this is through continuous improvement which can come in all sorts and flavors.
In the end, it doesn't matter so much what we improve but that we're improving the system because the alternative is doing nothing and this will always hurt us.
What is technical debt?
- developers aren't familiar with the used technology anymore,
- the system around the code has changed so drastically that it might be impossible to adjust, or
- it seems easier to rewrite the code instead of refactoring it (which means duplicate work).
once told me "The moment you write a line of code you also put an expiry date on it".
For me, this is what technical debt is all about.
Making sure to refactor code before it reaches its expiry date.
Because when this happens you end up in a situation where:
this is - developers aren't familiar with the used technology anymore,
- the system around the code has changed so drastically that it might be impossible to adjust, or
- it seems easier to rewrite the code instead of refactoring it (which means duplicate work).
In short, by not making sure that you update your code before it expires you create waste.
Taking on technical debt
.I now think that the real meaning of the statement above is
As a product manager, you need to make sure the team cuts corners to get those features delivered faster.
But this doesn't sound so good if you'd actually say it out loud. Even worse, this has nothing to do with technical debt. This is asking the team to ignore defects in the software to gain the illusion of speed. It's a bit like stating that breaks make a car heavier, and, therefore, slower so why not remove them?