What Is Technical Debt? A Simple Explanation for Software Engineers in Startups
Discover how understanding and managing technical debt can streamline your development process and boost your startup's success.
What Is Technical Debt?
Tech Debt is the debt we owe to our software.
While working on software, we borrow time. This time tends to accumulate if you don’t pay it back. I see tech debt as the time you need to pay to your code.
There are multiple ways to generate tech debt.
1. Intentional Tech Debt
Let’s say you want to open a bookstore.
To open a store, you need some money. You need to rent a place or buy one, for example. If you don’t have the money, you have two options:
Start accumulating money.
Ask for a loan.
With option number 1, getting enough money for your store might take some time, maybe years. That’s why many people might consider option number 2. As a result, they generate a debt to speed up the process and will pay it back over time with the money generated by their business.
This is how Intentional Tech Debt works, too.
You generate debt because you want to speed up your development and know that you’ll need to pay it back later.
I don’t see this type of debt as a bad thing.
Engineers sometimes take shortcuts to reach a specific goal. Like the bookstore example, this goal might generate enough outcomes for them to pay back the debt and, hopefully, do something else.
Many startups use this approach, especially in the beginning.
2. Resume-Driven Development
Working in a startup means you often have a lot of space to explore new things.
The product developed in a startup might lack a lot of functionalities. You might need to choose a new library, framework, or technology when implementing them.
As engineers, we love exploring technologies.
When I start a new project, I usually spend more time deciding what database to use than collecting requirements—shame on me. But I have many friends who have the same problem.
Sometimes, this exploration is led by the will to improve your resume.
If you never worked with GraphQL, you could implement the new functionality using it so that you can add it to your resume. Would you like to try microservices? Create one for the new functionality!
This is the worst case of Tech Debt you can find.
The result of this type of debt is:
You introduce technologies your team might not be experienced in.
You create code that is harder to maintain.
You might use a new technology which might disappear in a few years.
3. Rust
Software gets old.
It doesn’t matter how well you write your code. After a few months, your code might be legacy. The reason for that is straightforward:
Software is a living thing.
I live in Italy, so I can see monuments still standing every day after hundreds of years. The idea of a monument is to be there forever. Software is different.
Software is made to evolve.
It might evolve because the business needs are different. Libraries have to be updated. And so on.
Software gets rusty after a while.
This type of debt is usually harder to spot because it is not always visible. While you know your Intentional Tech Debt, it is harder to realize that the code you wrote 6 months ago should be changed until it’s too late.
A new client is asking for a new functionality in our email module.
When was the last time someone worked on the email module?
Dealing With Tech Debt
You can’t eliminate Tech Debt.
Tech Debt is part of our work as Software Engineers. We deal with it every day. We can’t avoid it and must know how to work to avoid bankruptcy.
Tech Debt must be visible.
Accumulating Tech Debt could be dangerous. I’ve seen many situations where changing a simple label meant days of work. The reason for that was a massive amount of tech debt nobody had paid in years.
Use A Tech Debt Wall.
Tech Debt Wall is a strategy to deal with Tech Debt, as explained by Pete Hodgson in his blog. It consists of creating and dividing Tech Debt Items based on the cost of fixing them and their value. I think this approach is brilliant.