It shows what happens when you keep shipping release after release without ever addressing the debt. Cost, complexity, and risk climb. Velocity, scalability, and resiliency drop. At some point the two lines cross, and the app becomes harder and riskier to work with than it is worth. The takeaway: left unaddressed, an application tends to need a real modernization roughly every five years.
|
In their research across 220 companies in seven sectors, the companies with the healthiest tech-debt scores (the top 20%) grew revenue about 20% faster than those with the worst (the bottom 20%), and about 10% faster than the average.
They also found that technical debt typically eats 20 to 40% of the value of a company's entire technology estate.
In plain terms: unmanaged debt is not just an engineering problem. It shows up in the numbers the business actually cares about.
That is the industry view. If you want to see what this looks like on a single product, I once put real numbers on it: around €35K of yearly cost on one app, and how I used that to make the case to leadership.
→ Making the case to kill €35K of tech debt
Not all debt is the same. Knowing the type helps you talk about it clearly with your team.
→ Code debt. Messy, duplicated, or hard-to-read code. The classic "we will clean this up later" that never gets cleaned up.
→ Architecture and design debt. The structure of the system itself holds you back. Think a monolith that cannot scale, or services tangled so tightly that one change ripples everywhere.
→ Testing debt. Low or missing test coverage, or fragile tests. Every release becomes a gamble and a lot of manual checking.
→ Documentation debt. Little or no record of how things work and why. New people onboard slowly, and knowledge lives in just a few people's heads.
There are others, like infrastructure and dependency debt, but these four cover most of what you will run into.
You probably will not run these tools yourself. But knowing they exist helps you ask sharper questions and understand what your engineers show you.
Grouped roughly by what they look at:
Tools like SonarQube scan the codebase for bugs, code smells, and maintainability issues, and can even express debt as an estimated "time to fix." CodeScene takes a different angle, using your version history to find hotspots: the code that is both complex and changed most often.
Tools like Snyk flag known vulnerabilities in your own code and in the open-source libraries you rely on.
Tools like vFunction and CAST analyze the structure and dependencies of larger systems to show where architectural debt is concentrated.
Test coverage reports show how much of your code is actually exercised by tests, which is a decent proxy for testing debt.
Monitoring and observability tools (Datadog, New Relic, Grafana) will not say "this is debt," but they show you where debt hurts: errors, slow endpoints, repeat incidents.
Two more low-tech approaches that work surprisingly well:
→ Ask your engineers. A simple session where the team marks the parts of the system that scare them most will surface debt no scanner can. They know where the bodies are buried.
→ Track it in your backlog. Make debt visible. Create tickets for it, label them clearly, and reserve a slice of each sprint to pay some down. Debt you cannot see is debt you will never prioritize.
No tools needed. Read each statement and tick the ones that sound true for your product right now.
Small changes often set off unexpected changes somewhere else.
→ A routine upgrade or dependency bump turns into a full project.
→ Releases feel risky, and we lean on a lot of manual testing.
→ There are parts of the code the team quietly avoids touching.
→ We get repeat incidents or slow performance that never quite get fixed.
→ Getting data in or out, or integrating with other systems, is painful.
→ New developers take a long time to become productive.
→ If one key person left, a lot of "how it works" would leave with them.
Now count your ticks.
→ 0 to 2: Healthy. Keep an eye on it, but no alarm.
→ 3 to 5: Moderate. Worth putting a plan together before it grows.
→ 6 to 8: High. Time to make the case, and you have the numbers above to do it.
One last thing: look at which statements you ticked. They point to the kind of debt you carry most, whether that is code, architecture, testing, or documentation.
What do you think? Did this make technical debt feel a little less scary? Hit reply and let me know — do you love it, hate it, want more of something else? See you next week, Maria |
Hi, I’m Maria. For the past 7 years, I’ve been building internal products across FMCG and tech companies.Now, I share everything I’ve learned to help junior PMs master delivery from technical skills to stakeholder communication. Join 200+ Internal PMs who get weekly insights from the Build Internal Products newsletter.
Hi Reader, Have you ever felt like your team is doing CI/CD wrong? What if what's wrong in one context is exactly right in another? Theoretical CI/CD content online always shows the most advanced picture. But we live in a different reality. So let's talk about what our realities actually are, and how you can improve yours. Today in 10 minutes you will: See the 5-question checklist I use to score any delivery pipeline Walk through seven real pipelines, from zero automation to fully automated...
Hi Reader, Every internal product manager wants to build. We're action driven. It feels like our core competency. But put that feeling aside for a second. In a lot of scenarios, buying, not building, is the right call for your context. If you want to learn how to assess this properly, stick with me for this one. Today in 10 minutes you will: Understand why build vs buy gets skipped, even when it shouldn't Learn the 7 steps to run a proper build vs buy assessment See how those steps play out...
Hi Reader, Have you been wanting to refresh your knowledge of databases? Maybe even get your hands on the keyboard, create one, and run a few simple queries? If so, I must have READ YOUR MIND. Because today, that's exactly what we're doing. Today in 10 minutes you will: See where a database actually lives inside an app Learn the difference between relational and non-relational, minus the jargon Understand ACID, translated into plain human Create your own free database and run your first...