The Friday Deploy
The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.
“Technical Debt” Explained for People Who Don’t Code
Your developer mentions “technical debt” as a reason the last feature took longer than expected. You’ve heard the term before but you’re not entirely sure what it means or why it matters. This article explains technical debt in business terms, how it affects your organisation, and how to make informed decisions about addressing it.
What Technical Debt Actually Is
Technical debt is the accumulated cost of past shortcuts in your software. It’s work you’ll need to do in the future because of compromises made today.
The metaphor comes from financial debt. When you take out a loan, you get money now in exchange for paying back more later through interest. Technical debt works the same way: you get features faster now, but you’ll pay for that speed through slower development and higher costs in the future.
Ward Cunningham, who coined the term in the 1990s, described it this way: “With borrowed money you can do something sooner than you might otherwise, but until you pay back that money you’ll be paying interest.”
The key insight is that technical debt isn’t always bad. Just as borrowing money can be a smart business decision, accepting some technical debt to meet a market opportunity can make perfect sense. The problem comes when debt accumulates without a repayment plan.
How Technical Debt Happens
Technical debt accumulates through decisions made during development, often for legitimate business reasons.
Deliberate shortcuts to meet deadlines
Your team needs to launch before a competitor enters the market. The developers take a faster approach they know will need revision later, but getting to market first matters more than perfect code.
This is strategic technical debt. You’re making a conscious trade-off: speed now for additional work later. The risk is forgetting or refusing to do that additional work once the immediate pressure passes.
Quick fixes that become permanent
A bug appears the day before a major product launch. The developer implements a workaround that solves the immediate problem but doesn’t address the root cause. The launch succeeds, everyone moves on, and the workaround stays in place for years.
This is inadvertent technical debt. The fix was meant to be temporary, but it became permanent because no one revisited it.
Evolving requirements
Your application was built to handle 100 transactions per day. Three years later you’re processing 10,000 daily. The original architecture wasn’t designed for this scale and starts struggling.
This is natural technical debt from growth. The system was appropriate when built but became inadequate as business needs changed.
Developer inexperience or turnover
A junior developer implements a feature using patterns they understand, not necessarily the best approach. Or the developer who built a complex part of the system leaves, and their replacement works around code they don’t fully understand rather than refactoring it.
This is skill-based technical debt. It happens not from intentional shortcuts but from gaps in knowledge or documentation.
What Technical Debt Looks Like in Practice
Technical debt manifests as observable problems in your development process and business operations.
New features take increasingly longer to build. A feature that took two weeks last year now takes four weeks because developers spend half their time working around existing problems.
Bug counts increase. You fix one issue and two more appear because the underlying code has become so complicated that changes have unexpected side effects.
Developers avoid certain parts of the codebase. There’s that one module everyone fears touching because it’s fragile and poorly understood. Features requiring changes to that area get delayed or rejected.
Deployment becomes risky. Releasing new versions causes anxiety because something usually breaks. You schedule releases for Friday afternoons so developers can spend the weekend fixing problems.
Knowledge silos develop. Only one person understands how critical systems work. When they’re unavailable or leave, the business faces serious risk.
Documentation doesn’t match reality. The code works differently than the documentation describes, and developers trust neither, relying instead on trial and error.
The Business Costs of Technical Debt
Research provides concrete numbers on technical debt’s financial impact.
McKinsey found that 10-20% of IT budgets intended for new product development get diverted to managing technical debt. For a company spending $1 million annually on development, that’s $100,000-$200,000 just paying interest on accumulated debt.
The Consortium for Information & Software Quality estimated that technical debt in US companies totals $1.52 trillion, with the broader cost of poor software quality reaching $2.41 trillion annually.
A mid-sized fintech company tracked their technical debt impact and found engineers spent 35% of their time addressing debt-related issues rather than building new features. With a $4.2 million annual engineering budget, $1.47 million was effectively spent on debt interest.
Direct costs
Development velocity decreases. Teams with high technical debt spend 20-40% of their time fixing problems instead of building features. This productivity loss translates directly to wasted salary expense.
Maintenance costs escalate. Systems with accumulated debt require more ongoing work to keep running. Bug fixes take longer, changes require more testing, and problems occur more frequently.
Infrastructure expenses grow. Poorly optimised code consumes more server resources, driving up hosting costs. Systems that could run on modest infrastructure instead require expensive capacity.
Indirect costs
Time to market increases. New features take longer to develop because developers work around accumulated problems. You miss market opportunities because competitors ship faster.
Quality degrades. Higher bug rates mean more customer complaints, support costs, and potential churn. User experience suffers when the application becomes slow or unreliable.
Innovation slows. Teams become conservative, avoiding bold improvements for fear of breaking things. The codebase becomes so fragile that meaningful innovation feels too risky.
Staff turnover rises. Developers dislike working in poor-quality codebases. Your best engineers leave for organisations with healthier technical environments, and recruiting becomes harder when your technical reputation suffers.
Types of Technical Debt
Not all technical debt is the same. Understanding the categories helps prioritise what to address.
Code debt
This is shortcuts in the code itself – complex logic that’s hard to understand, duplicate code that should be consolidated, or poor structure that makes changes difficult. Code debt is the most common and most visible form.
Architecture debt
This is structural problems in how the system is organised. Maybe everything runs in one massive application when it should be broken into services. Or the database design makes certain queries impossibly slow.
Architecture debt is expensive to fix because it requires reworking fundamental systems, but leaving it unaddressed eventually limits what the application can do.
Documentation debt
This is missing or outdated documentation. No one knows how certain features work, why particular decisions were made, or how different parts of the system interact.
Documentation debt makes everything slower because developers spend time figuring out what code does instead of what it should do. It becomes critical when key people leave.
Test debt
This is insufficient automated testing. Changes require extensive manual testing because there aren’t automated checks to catch problems. This slows releases and increases the risk that bugs reach production.
Infrastructure debt
This is outdated servers, unsupported operating systems, or deprecated dependencies. Infrastructure debt creates security risks and compatibility problems with modern tools.
When Technical Debt Is Acceptable
Technical debt isn’t inherently bad. Strategic debt serves legitimate business purposes.
Accept technical debt to capture market opportunities. If launching six weeks early means reaching customers before a competitor, technical debt enabling that speed is worthwhile. The key is planning to repay it after launch.
Accept technical debt for experiments and prototypes. If you’re testing whether users want a feature, a quick implementation makes sense. If the feature succeeds, you rebuild it properly. If it fails, you discard it without having invested in perfection.
Accept technical debt in low-value areas. If a particular feature is rarely used and unlikely to change, investing in perfect implementation wastes resources. Some debt is cheaper to carry than to fix.
Accept technical debt temporarily during crises. When production is down, the immediate fix matters more than the elegant solution. Apply the patch, restore service, then schedule proper remediation.
When Technical Debt Becomes Dangerous
Certain patterns signal that technical debt has shifted from manageable to problematic.
Debt accumulates faster than it’s repaid. If you’re constantly taking shortcuts but never going back to clean them up, interest compounds until the system becomes unmaintainable.
Developers can’t estimate effort accurately. When even simple features become unpredictable because of unknown complications in the codebase, debt has made planning impossible.
Only specific people can work in certain areas. If particular developers are irreplaceable because they’re the only ones who understand critical systems, you have dangerous knowledge concentration.
Releases consistently cause problems. If deployments reliably break things, technical debt has made your system too fragile for normal change.
Security vulnerabilities accumulate. When your system runs on outdated dependencies with known security issues, technical debt becomes an active business risk.
How to Assess Your Technical Debt
Quantifying technical debt helps make informed decisions about addressing it.
Track development velocity over time
Measure how long similar features take to build across different periods. If simple features that took one week two years ago now take three weeks, accumulated debt is slowing your team.
This velocity change can be expressed as a cost: the salary expense for those extra two weeks multiplied across all features represents debt interest you’re paying.
Calculate rework percentage
Track what percentage of development time goes to fixing issues versus building new things. Industry research suggests teams spend 40-50% of time on unplanned work caused by technical debt.
If your developers spend half their time on bug fixes and firefighting, technical debt is consuming half your development budget.
Measure deployment frequency and failure rate
Teams with low technical debt deploy frequently with few failures. Teams with high debt deploy rarely and problems are common.
If you deploy monthly and 30% of releases cause incidents, debt is making your release process unreliable and expensive.
Inventory critical knowledge gaps
Identify systems where only one or two people understand how things work. Calculate the business risk if those people become unavailable.
This concentrated knowledge represents a specific form of technical debt – usually caused by poor documentation and complex, uncommented code.
Questions to Ask Your Developers
Get specific information about technical debt to make informed prioritisation decisions.
What parts of the system have the highest debt? Not all debt is equal. Debt in critical, frequently-changed areas matters more than debt in stable, rarely-touched code.
How much development time currently goes to managing debt versus building features? This quantifies the interest you’re paying. If it’s over 30%, debt is significantly impacting productivity.
What would happen if we dedicated one sprint to debt reduction? A time-boxed experiment shows whether reducing debt actually improves velocity or if the benefits are less tangible than claimed.
Which debt is blocking specific features we want to build? Sometimes technical debt prevents implementing valuable features. Identifying these blockers helps prioritise repayment.
What’s the minimum viable debt reduction that would improve our situation? Perfect code is impossible and unnecessary. What’s the 20% of effort that would eliminate 80% of the pain?
Strategies for Managing Technical Debt
Effective debt management balances repayment with continued feature development.
Allocate capacity for debt reduction
Reserve a percentage of each sprint or month for technical debt work. Common approaches include 20% time for debt, one full sprint per quarter, or Friday afternoons dedicated to cleanup.
This turns debt repayment from an aspiration into a planned, budgeted activity.
Pay debt when touching code
When developers work in an area, they should leave it slightly better than they found it. Add missing tests, improve documentation, simplify complex logic.
This “boy scout rule” means debt decreases gradually without requiring dedicated projects.
Prioritise by business impact
Not all debt needs immediate attention. Focus on debt that:
- Slows development of high-value features
- Creates security or stability risks
- Exists in frequently-changed code
- Blocks hiring because the codebase is too difficult for new developers
Debt in rarely-changed, low-importance areas can remain indefinitely.
Make debt visible
Track technical debt alongside features in your project management system. When developers identify debt, it gets logged, estimated, and prioritised like any other work.
Invisible debt gets ignored. Visible, quantified debt gets addressed.
Set quality standards for new code
Prevent new debt by establishing minimum standards. All new code requires tests. Complex logic requires documentation. Code reviews catch potential debt before it enters the codebase.
This doesn’t eliminate debt – some will still accumulate – but it dramatically reduces the rate of accumulation.
Common Misconceptions About Technical Debt
Several myths about technical debt lead to poor decisions.
“We’ll fix it later” rarely happens without explicit planning. “Later” never comes because there’s always new feature pressure. Schedule repayment specifically or it won’t occur.
“We need to rebuild from scratch“ is usually wrong. Complete rewrites can be prohibitively costly, politically sensitive and often reintroduce the same problems. Incremental refactoring almost always delivers better returns.
“Zero technical debt is achievable” is neither possible nor desirable. Some debt is inevitable as technology evolves and requirements change. The goal is managing debt at sustainable levels, not elimination.
“Only developers care about technical debt” ignores business impact. Technical debt manifests as slow feature delivery, frequent outages, and unhappy customers – all business problems.
“We can’t afford to address it” often means you can’t afford not to. The compound interest on ignored debt eventually makes even small changes prohibitively expensive.
The Decision Framework
Use these principles to make informed decisions about technical debt.
Understand the trade-off explicitly. When accepting debt, document what you’re trading and when you’ll pay it back. “We’re taking this shortcut to launch by June 1st, and we’ll refactor it in the July-August sprint.”
Quantify the interest. How much does this debt cost in slower development, higher maintenance, or reduced quality? If it costs $10,000 per month in lost productivity but would cost $50,000 to fix, the payback period is five months.
Consider your business lifecycle. Early-stage startups might rationally carry more debt to achieve speed. Mature businesses need sustainable velocity, making debt more costly.
Factor in team impact. Technical debt affects morale. If your best developers are leaving because they’re frustrated with code quality, the hidden cost might exceed the visible one.
Plan repayment before accepting debt. Strategic debt has a repayment plan. Debt accepted without knowing how or when it’ll be addressed is just poor decision-making.
Making Technical Debt Conversations Productive
Improve how your organisation discusses and manages technical debt.
Reframe as technical risk
While developers typically call this “technical debt,” you might get better traction with stakeholders by discussing it as “technical risk.”
Risk is universal business language. Every executive understands risk assessment, risk mitigation, and risk management. They’re accustomed to evaluating risks in other areas – market risk, operational risk, compliance risk – and applying the same frameworks.
When your developer raises technical debt concerns, translate it: “This accumulated technical debt creates several business risks: increased likelihood of outages during peak periods, slower response to competitive features, and potential security vulnerabilities.”
This shifts the conversation from “we need to pay for past shortcuts” (which can sound like blame or waste) to “we need to mitigate growing business risks” (which sounds like prudent management).
The framing also makes prioritisation clearer. Instead of arguing whether debt repayment is more important than new features, you’re assessing which risks need mitigation most urgently – a familiar decision-making process.
Translate to business metrics
Instead of “the code is messy,” frame it as “new features take 40% longer because of code complexity, costing approximately $X per month in lost productivity.”
Business leaders can’t act on technical complaints but can act on quantified business impact.
Link debt to blocked features
When technical debt prevents valuable features, make that connection explicit. “We can’t add the reporting dashboard customers want because our database structure requires restructuring first.”
This transforms debt from abstract technical problem to concrete business obstacle.
Propose specific remediation with ROI
Don’t just complain about debt – propose solutions with estimated costs and benefits. “Spending two weeks refactoring the checkout system will reduce our bug fix time from 6 hours average to 2 hours average, saving approximately 20 hours per month.”
This gives decision-makers information they need to prioritise intelligently.
Show progress on debt reduction
When time is allocated to debt repayment, demonstrate the results. “After our debt reduction sprint, we decreased page load time by 35% and new feature estimates by 25%.”
Visible results from debt repayment justify future investment in it.
The Long-Term View
Technical debt is an inevitable part of software development. The question isn’t whether you’ll have it, but how you’ll manage it.
Organisations that treat technical debt as normal business overhead and budget for ongoing repayment maintain healthy, productive systems. They balance shipping features with maintaining code quality.
Organisations that ignore technical debt until crises force attention spend more overall and deliver less value. They’re constantly firefighting instead of building.
The metaphor of financial debt is apt: moderate, managed debt enables faster growth. Uncontrolled debt leads to bankruptcy. The skill is knowing the difference and acting accordingly.
If your developers raise concerns about technical debt, they’re trying to prevent future problems, not creating obstacles. The conversation should focus on trade-offs and priorities, not whether debt matters. It does.
The question is: how much debt is strategic, and how much is simply accumulating interest you’ll eventually have to pay?
Read more Technical Translation
Previous NextThe Friday Deploy
The plain English newsletter for people who run the business, not the tech stack. No jargon. Every Friday.