What is "technical debt"
Martin Fowler's description of technical debt is pretty good:
In this metaphor, doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice.
We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.
Why call it tech debt?
When I first was thinking about this I was questioning whether or not you could avoid having tech debt.
After talking with Nick - came to the conclusion that tech debt is always going to happen and it's about framing it around the product decisions you're making.
If you don't consider it tech debt - are you just being negligent?
Could it be not a question of having tech debt or not - more how you deal with it around your product?
What product decisions would mean I introduce tech debt?
If you've identified problems with your product you may come up with some possible ways to solve it. You could test they'd work in different ways:
- Prototype through something like Marvel
- Quick and 'messy' code implementation introducing tech debt
- Slow and well designed code implementation introducing no tech debt
It's balancing how long it'd take and whether you can test it in another way.
Introducing tech debt and finding out how to solve your problem might actually be a good trade off.
Paying off tech debt
We’re making an effort to priortise removing tech debt alongside key product work.
While in the short term it's useful it can make a codebase hard to work on in the long term.
We create work tickets for the technical debt like we would a product feature or a bug and add them into our sprints during priortisation at the start of the week.
This means we can track how much we're doing and also make sure it happens in the first place.
Time to get into debt
Tech debt gives you a mindset to help you balance solving user problems through your product and keeping a well maintained and enjoyable codebase to work on.
How do you approach tech debt on the projects you work on?