Skip to main content
Test Double company logo
Services
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say Hello
Test Double logo
Menu
Services
BackGrid of dots icon
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
Cycle icon
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say hello
Developers
Developers
Developers
Legacy modernization

Ratcheting to zero: How incremental constraints eliminate technical debt

How we made working with legacy code enjoyable: measure what you want to improve → automate it → make a change. Repeat. The demonstrable march toward improvement is what makes development satisfying.
Dave Mosher
|
June 24, 2025
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Why ratcheting works to reduce technical debt

As an engineer, you've probably been in this situation: explaining to leadership why technical debt matters (the "why"), only to get hit with the harder questions: "Okay, but how exactly are you going to fix it, and how long will it take?" That's where most conversations stall out; not because the why isn't compelling, but because we lack concrete tactics to bridge the execution gap.

The frustration isn't from lack of understanding; your team knows technical debt matters. The real challenge is having systematic approaches that you can actually deploy when leadership asks for specifics. Many teams get stuck choosing between massive rewrites (unrealistic) or relying on good intentions (unsustainable). But there's a better way that gives you concrete answers for leadership while making the work genuinely satisfying for your team.

This screencast explores how engineering teams can use automated measurement and incremental improvement (what we call "ratcheting") to systematically reduce technical debt while maintaining feature velocity. Instead of choosing between shipping features and improving code quality, you'll discover how to make technical improvement a natural part of your development process so that you can confidently communicate upward.

The execution gap

Most teams understand that technical debt is important to address, but struggle with concrete implementation strategies. The gap between philosophical understanding and practical execution is where most technical debt initiatives fail.

Outcomes over tools: Avoiding the "If You Build It" trap

Engineering teams often fall into the pattern of chasing shiny new tools instead of addressing underlying problems. Instead of asking "what tool should we use?", start with "what specific outcome are we trying to achieve?" Distill it into measurable metrics - not just "fewer bugs" but "reduce P0 incidents by 50%" or "cut deployment time from 30min to 5min."

The engineering improvement loop

The most sustainable approach follows a simple pattern: measure what you want to improve → automate the measurement → make a change. This loop can be applied even to legacy systems without requiring a complete technology overhaul, making incremental improvement both satisfying and effective.

Automation as a forcing function

Manual processes and good intentions don't scale. The key to successful debt paydown is building automated guardrails that prevent regression while allowing incremental progress. This gives teams the satisfaction of building something concrete while focusing on outcomes rather than shiny objects.

Making legacy work enjoyable

Ratcheting transforms working with crusty legacy technology from frustrating to engaging. The demonstrable march toward improvement counters the natural desire to swap to something new and shiny. When you can see measurable progress, maintaining and improving existing systems becomes rewarding work.

Cultural benefits beyond code quality

Ratcheting often results in cross-disciplinary collaboration. Backend developers contributed to frontend debt reduction, and team members across all seniority levels participated in the solution. Shared measurement and visible progress builds team cohesion.

Flexibility within structure

The most successful constraint systems include escape hatches for genuine emergencies. Having a bypass mechanism for production fires actually built more leadership trust, not less. Adaptability within a structured approach demonstrates rational thinking over dogmatic adherence to process.

Continuous vs. concentrated effort

Tech debt sprints and hackathons feel productive but often fail to create lasting change. Integrating debt paydown into normal development cycles creates sustainable improvement. Small wins from multiple contributors across disciplines add up to transformational change.

Universal application

The ratcheting approach works for any quantifiable technical metric: test coverage, accessibility scores, performance metrics, dependency counts, or documentation coverage. The key is building measurement and process rather than just switching tools.

Conclusion

Technical debt doesn't have to remain an unquantified mess that teams endlessly debate. By making the invisible visible (measuring what matters and building systems that show measurable progress) you transform that scary unknown into something manageable and actionable.

This prevents the all-too-common scenario where teams accumulate multiple incomplete migrations, creating systems that feel held together with duct tape rather than intentional decisions. Most importantly, this shifts your technical work from reactive firefighting to intentional improvement, giving you a systematic way to make measurable progress toward valuable goals.

This isn't just about cleaner code; it's about building teams that find satisfaction in systematic improvement rather than constantly chasing the next shiny technology.

Your technical debt isn't going away on its own. But with the right measurement systems and cultural practices, it doesn't have to be a perpetual source of frustration either. Start with one metric, build one automated check, and begin your own ratcheting journey. Your future deployments (and your team's morale) will thank you.

And if you need help bridging that execution gap and guiding your team through systematic technical improvement, give us a shout. We love talking about how to modernize legacy systems.

Related Insights

🔗
Why legacy code rewrites are the hardest job in software
🔗
The end of legacy code
🔗
Mastering automated refactoring tools: A practical guide
🔗
Why we should stop paying tech debt
🔗
Surgical Refactors with Suture
🔗
Simplify your code: the power of extracting functions in refactoring

Explore our insights

See all insights
Leadership
Leadership
Leadership
The business of AI: Solve real problems for real people

After participating in the Perplexity AI Business Fellowship, one thing became clear: the AI hype cycle is missing the business fundamentals. Here are 3 evidence-based insights from practitioners actually building or investing in AI solutions that solve real problems.

by
Cathy Colliver
Leadership
Leadership
Leadership
Pragmatic approaches to agentic coding for engineering leaders

Discover essential practices for AI agentic coding to enhance your team’s AI development learning and adoption, while avoiding common pitfalls of vibe coding.

by
A.J. Hekman
by
Aaron Gough
by
Alex Martin
by
Dave Mosher
by
David Lewis
Developers
Developers
Developers
16 things software developers believe, per a Justin Searls survey

Ruby on Rails developer Justin Searls made a personality quiz, and more than 7,000 software developers filled it out. Here's what it revealed.

by
Justin Searls
Letter art spelling out NEAT

Join the conversation

Technology is a means to an end: answers to very human questions. That’s why we created a community for developers and product managers.

Explore the community
Test Double Executive Leadership Team

Learn about our team

Like what we have to say about building great software and great teams?

Get to know us
Test Double company logo
Improving the way the world builds software.
What we do
Services OverviewSoftware DeliveryProduct ManagementLegacy ModernizationDevOpsUpgrade RailsTechnical RecruitmentTechnical Assessments
Who WE ARE
About UsCulture & CareersGreat CausesEDIOur TeamContact UsNews & AwardsN.E.A.T.
Resources
Case StudiesAll InsightsLeadership InsightsDeveloper InsightsProduct InsightsPairing & Office Hours
NEWSLETTER
Sign up hear about our latest innovations.
Your email has been added!
Oops! Something went wrong while submitting the form.
Standard Ruby badge
614.349.4279hello@testdouble.com
Privacy Policy
© 2020 Test Double. All Rights Reserved.