Technical debt or tech debt is a term coined or brought to light by Ward Cunningham, a well-known american programmer, who used it to describe the cost for the future of a bad implementation in the present.
With other words, tech debts is simply an invoice of your bad choices. It’s pretty fair, right? If you do something bad in the past or in the present, don’t wait for something good in the future!
Tech debt is very common in software development and it has several definitions. How many? As many as answers… I have my own definition too. Do you have one? After reading this article, you’ll have one too.
The main purpose of this article is to understand the technical debt, what exactly it is, what are some best practices to avoid it and of course, how to get rid of it.
A tech debt is dangerous because it has to deal with the human behavior, more precisely, with the human character. Your work reveals who you are, yes or not? A bad work outlines a bad character and that’s how technical debt is formed…
What Is A Technical Debt?
I don’t want to withdraw the merits of Ward Cunningham or to say that his definition is not good or incomplete, but I want to look at this subject from more perspectives, let’s say three perspectives.
In that way, I have the following three definitions which formed a better cohesion for understanding:
- Definition 1: Technical debt is the future cost of work incurred by choosing an easy or fast solution now, instead of a more sustainable approach.
- Definition 2: Technical debt represents the gap between our initial understanding of the problem and the superior insight we gain only after the implementation is complete.
- Definition 3: Technical debt is the invoice of a sub-optimal implementation.
What do you think of these definitions? I believe that technical debt is worth more than a single definition and I’m convinced that it’s a subject that deserves to be explained, not defined.
Why Do Technical Debts Arise?
First, let’s say that a technical debt is not necessary bad or 100% bad, but certainly, it has maximum potential for bad results.
When you take out a loan, you desperately need that money, right? I don’t want to judge, you know better your current circumstance. With that loan, you pay what needs to be paid.
A worse example is when your team leader or manager says you need to finish a task. When? If possible, have it ready yesterday. What do you do in this situation? You’ll find a solution. Maybe not a good one (in most cases a bad one), but a functional one. The result? You’ll pay with hard work and “big time” later.
As I wrote in first definition, technical debt is the future cost of work incurred by choosing an easy solution, instead of a more sustainable approach.
When you work under pressure, it’s hard to make good decisions and you’ll wake up with technical debts. It’s like a snowball: the more you roll it, the bigger it gets.
Wherever you are an employee, an employer, or a team leader, be wise enough to not be the source of a technical debt!
I’m a christian (Jesus Christ’s follower) and I believe what the Biblie says about debts (or duties). Let’s read the following verses:
- Let us hear the conclusion of the whole matter: Fear God, and keep his commandments: for this is the whole duty of a man. (Ecclesiastes 12:13)
- Owe no man any thing, but to love one another: for he that loveth another hath fulfilled the law. (Romans 13:8)
You need to make that loan or to finish that project yesterday and you’re out of ideas? Pray, don’t borrow! Then act wisely!
Best Practices To Avoid Technical Debts
To avoid a risk or something danger, you need to put the pedal to the medal or to handle prevention.
There are some who say that technical debts are good if you use them in a strategic way. I still don’t or can’t believe that a debt can be used strategically because it’s too burdensome and discouraging.
Have you heard before about SOLID, DRY or KISS principles? Not just in IT industry, but in life you always need to have principles; good principles!
When you respect a principle, you prevent unnecessary complexity. It’s very slippery to add unimportant things to your project just to meet the deadline, but lately you’ll realize the burden of the cost. It will cost you time and money. Can you afford such unforeseen costs that could put you in trouble? I don’t think so…
It’s difficult to think and to make decisions under pressure and that’s the main reason to seek to be wise from the very beginning. You don’t know how? Stop and look for the best possible solutions!
You can’t do the job perfectly from the beginning, but if you have a strong documentation and a well reasoning idea, you are already halfway there.
Do you know the quote “Less is more”? It means quality over quantity. I completely agree that you can do quality in every quantity, but not from the start.
Are you stingy? If you are a project manager or an entrepreneur who wants to save some money by investing as little as possible, be careful not to get a surprise…
Cheap can be synonymous with risk, worst case scenario, and failure.
I have some doubts about MVPs (Minimum Viable Products). Why? Because you build something with minimum effort and you want maximum results. How is that possible? It’s not logical! You want to test your idea? Take your time and do something quality from the beginning, don’t wait for validation with minimum effort!
Do you want shortcuts? Shortcuts are for losers!
A good practice to use to avoid or prevent technical debts is to say “NO”. How? Simple, just say “NO”. But what if they fire you? Do you prefer to stay in a place with poor project management, unrealistic delivery deadlines and last-minute stakeholder requests without saying nothing?
If you don’t comply with their whims, you as a programmer, IT professional, or even a team leader will suffer. Stress is not the most desirable spice for work.
When you are new in a team and you see that there are some big tech debts, tell them that you need to allocate some time for solving. If they don’t agree with you that they have problems, you are free to seek for another job. Don’t waste your time in teams of impertinent people!
I like to create frameworks and I have one to avoid or prevent tech debts. When you take out a loan, you take out a credit, right? The name of my framework is CREDIT.
CREDIT is a logical engineering flow, where each step naturally leads to the next. CREDIT is an acronym for:
- Clarity: understand the problem
- Research: explore for solutions
- Execute: make it happen
- Document: without documentation, your project will be in danger (see the article “The Bus Factor: A Silent Threat To Organizational Stability“)
- Improve: apply the Boy Scout Rule – always leave the code better than you found it
- Test: verify everything (don’t forget the unit tests!)
If tests fail or reveal problems, return to clarity and iterate…
I think this framework is very useful to avoid or prevent technical debts. If you need a CREDIT, create one, don’t borrow it!
Technical Debts In The AI Era
Technical debts in the AI era are open wounds. The problem is that only few realize the danger.
Do you know what is vibe coding? Let’s say that is some rasta guy who think his style is the best in the world and who’s trying to pass unnoticed between 100 people dressed in suits. Do you think he can do it?
In other words, those who use vibe coding believe that they can change the world or create a new world with the help of AI. I appreciate their motivation, but it’s too arrogant.
You can use AI to develop some websites or apps, but these require continuous maintenance. You integrate an AI into the project, locally, and everyone would be happy, right? If that were the case, we would all have projects worth millions.
The technical debt of vibe coding is enormously and terribly harmful! Why? Because at some point, your friend (or “friend”), the AI, will not be able to help you anymore. An AI assistant is limited. Limited by subscription? No. Limited by knowledge.
(And I don’t want to say what would happen to your project when it gets an update – moving from GPT-4 to GPT-5 and so on.)
If you think that AI is unlimited in knowledge, please reconsider what unlimited or infinite means for you.
Don’t get me wrong, I use AI and still believe it’s great for a second opinion or as an assistant, but I will never let him to decide for me. I’m a specialist who tends to become an expert. Am I arrogant? Not at all!
Why would I leave a project in someone’s hands if I don’t have total control? For money? Who guarantees that vibe coding will bring me money? It’s not good at all to work blindfolded!
I respect those guys from YouTube who say that they made six figures with AI, but that’s an exception of the rule, not the rule itself.
If you know how to program and you understand the architecture of an application, then you can survive a technical debt later, but otherwise, you’ll end the project.
Vibe coding is for lazy people, not for those who want to develop something sustainable.
Do you want something quick? Don’t be superficial!
The speed of AI adoption often forces teams to trade long-term stability for immediat “WOW” factors, creating unique challenges that traditional software never faced.
In traditional software, if a function breaks, it usually throws an error. In AI, things often fail silently. Why? Because “The Brain” is anyone else but you.
AI means “Artificial Intelligence”. Do you like artificial things? I hope you don’t like artificial thinking…
I don’t want to repeat myself, AI is good, but is not “The Solution”, it’s just a tool to find or to conceive “That Solution” which suits you. An AI assistant is a digital mirror; it reflects your own intellectual depth. If you engage with brilliance, you receive brilliance. If not, good luck…
Debts Are Everywhere
Unfortunately or fortunately (for our development), debts are everywhere.
Did you have French lessons at school, but now you can’t say a word because you didn’t learn it? It’s your tech debt! It would have been great for you to know another foreign language when you grow up, right?
Did you renovate your apartment, but you used poor quality materials, and now you have to repair everything? It’s your tech debt! Maybe you didn’t have enough money and I understand that, but if you don’t have resources, then don’t anything or just analyze and think. Thinking is a good medication…
We accumulate tech debts at school, at work, in our personal lives, and this seems quite daunting when we have to fix the situation. It’s hard to start over and over again after failures. But a failure is not the end!
Take a look at the following quote:
- Success is not final, failure is not fatal: it’s the courage to continue that counts.” (Winston Churchill)
You, me, we, and everybody need the courage to continue regardless of the unfavorable situation we find ourselves in. Why? Because we have God’s favor to be alive. The life is a gift and how we live is our gift for God. Remember this statement!
Learn & Grow
That being said, now you know what is a technical debt, what are some best practices to avoid it, the tech debts in AI era, and what you need to go forward in life.
I think this article outlines the meaning of technical debts, that meaning which is meant to win. From meaning to winning is the main theme of this post.
Thank you for coming this far! I hope you’ll do the best to avoid technical debts in your personal and professional life, and if happen to have some debts, be prepared to face them step by step with God’ help!
“Good is good when it’s well done.”
✍ Horja Robert Emanuel
Digital Ecosystems Architect