Tech Debt: Understanding its Business Impact

Adrian Sutton

Adrian Sutton

Aug 2025

Aug 2025

Technical debt has become a catchall term for engineering challenges, often cited as a blocker without clear articulation of its actual impact. For teams building critical infrastructure at scale, this vague framing fails to capture the nuanced ways that different forms of debt affect our ability to deliver value effectively.

At OP Labs, we've found that moving beyond generic complaints about "tech debt" to identifying specific business costs creates more productive conversations. When we can quantify how particular implementation choices slow development velocity, increase bug rates, or consume maintenance resources, we enable better prioritization decisions across product and engineering teams.

This precision matters because not all technical debt carries the same cost. Some represents calculated trade-offs that allowed us to ship important features earlier, while other forms silently drain resources without delivering corresponding value. The distinction affects both how we communicate about these challenges and how we approach resolving them.

This article explores the different categories of tech debt we've encountered, their varied impacts on development velocity, and strategies for managing them responsibly. By understanding these patterns, we can make more informed decisions that maximize our ability to ship faster, better software while maintaining the reliability our users expect.

Accidental Complexity

Every system contains essential complexity—the inherent difficulty of the problems we're solving. At OP Labs, this includes cryptography and advanced mathematics that justify our business value. However, accidental complexity often creeps in alongside it.

Accidental complexity makes our systems harder to reason about, test, and modify. When code becomes unnecessarily intricate, our development velocity decreases while bug rates increase. This has concrete business costs: longer development cycles, more resources spent on fixes, and potential incidents requiring emergency response.

When addressing accidental complexity, we should resist the temptation of complete rewrites. Existing code embodies hard-won lessons that can be lost in rewrites, which themselves become forms of tech debt by blocking progress. Incremental simplification, while sometimes slower on the calendar, carries lower risk and allows us to continue delivering value in parallel.

Routine and Deferred Maintenance

Routine maintenance—updating dependencies, incorporating upstream changes, testing backups—is necessary to prevent code rot. We can reduce these costs through automation and tooling investments, as we've done successfully with projects like op-workbench.

Deferring maintenance creates a calculated risk. While it may free resources in the short term, the cost of delay can compound. When we postponed expanding Cannon to support Go 1.23, for example, we experienced cascading delays in incorporating upstream changes and faced larger, riskier reviews.

This is analogous to deferring car maintenance—skipping an oil change might work out, but risks a far more expensive engine failure. Short deferrals to avoid interrupting current work are reasonable; longer ones often become false economies.

Poor Usability as Tech Debt

Sometimes what we label "tech debt" represents deliberate decisions to limit features or polish to meet delivery deadlines. This creates ongoing costs, particularly when we use our own software. A prime example is our inability to deploy new chains with correctly configured permissionless fault proofs—a scope reduction that helped us ship earlier but now costs significant time when creating devnets.

While perfect usability might delay shipping, the accumulated costs of poor usability eventually exceed what it would have cost to address initially. These decisions require careful product consideration, weighing short-term delivery needs against long-term efficiency. We need to clearly communicate the business impact of these tradeoffs to make informed prioritization decisions.

Bugs and Incident Response

The direct costs of fixing bugs and responding to incidents are obvious but substantial. More importantly, they represent interruptions to planned work that disrupt flow and delay value delivery.

Investments in testing (especially early in development), monitoring, and incident response tools can significantly reduce these costs. We should track alert patterns and allocate capacity for reliability improvements, with an expectation that on-call engineers will address the root causes of alerts rather than just responding to symptoms.

Dead Code

Feature toggles, deprecated functionality, and unused features accumulate as "dead code" that provides no value but still requires maintenance. This includes configuration complexity around features that were shipped but never gained traction.

We need disciplined processes to remove feature toggles after deployment stabilizes and to sunset features that don't deliver their expected value. Working with product teams to make these decisions helps prevent paying ongoing costs for code that no longer benefits the business.

Lack of Testing

Code without sufficient automated testing represents one of the costliest forms of tech debt. Our derivation pipeline exemplifies this challenge—we restrict the reviewer pool because of the consensus-critical nature of the code, but this human-dependent process is both inefficient and error-prone.

More comprehensive automated testing would simultaneously increase confidence and broaden the pool of developers who can safely contribute. Ultimately, every bug and incident represents a missing test that could have caught the issue earlier.

Slow Feedback Loops

Developer productivity hinges on rapid feedback. The longer developers wait to learn if their changes are correct, the more time they waste pursuing incorrect paths and the more expensive fixes become.

Feedback loops span everything from compiler run times to test execution to our overall development process. Shortening these loops—through test optimization, working in smaller increments, and shifting validation earlier in the process—is the single most effective way to improve productivity.

Conclusion

Understanding tech debt through its specific business impacts enables better decision-making about what to address and when. By categorizing issues more precisely than simply "tech debt," we can communicate their costs effectively and prioritize solutions that maximize our ability to deliver value.

The goal isn't to eliminate all tech debt—some calculated trade-offs are necessary—but to make those decisions with full awareness of their long-term consequences. By systematically addressing the most impactful forms of tech debt, we can maintain development velocity while building systems that remain maintainable, reliable, and adaptable to changing requirements.

At OP Labs, we're continually refining our approach to these challenges, balancing technical excellence with pragmatic delivery. We're looking for engineers who share our commitment to sustainable development practices—people who can identify when quick solutions make sense and when investment in infrastructure will yield compounding returns. If you're passionate about building critical systems that can evolve gracefully over time, we'd love to hear from you.

Sign up for our newsletter

By registering for our newsletter, you consent to receive updates from us. Please review our privacy policy to learn how we handle your data. You can unsubscribe at any time.

Sign up for our newsletter

By registering for our newsletter, you consent to receive updates from us. Please review our privacy policy to learn how we handle your data. You can unsubscribe at any time.

Sign up for our newsletter

By registering for our newsletter, you consent to receive updates from us. Please review our privacy policy to learn how we handle your data. You can unsubscribe at any time.

Before you continue, please read and agree to the Terms of Service and Optimism Community Agreement.

Before you continue, please read and agree to the Terms of Service and Optimism Community Agreement.

Solutions

Developers

Case studies