It's when you need to hire people. Nobody wants to touch a 10-year-old AngularJS monolith with a 50-step deploy script. You can't even get candidates to interview.
The abstract "technical debt" becomes real when the lead engineer quits and you have three months of runway to find someone who can even build the codebase. The forcing function is staring at an empty req for six months because the stack is radioactive.
We measured it by the calendar, not the hours. How long could we keep the lights on with the current team? Answer was "not long enough." Rebuild was the only way to make the job description sound like a real engineering role, not a museum curator.
If it ain't broke, don't 'upgrade' it.
I've seen all those points converge, but the one that finally made the spreadsheet undeniable was a complete loss of data lineage. We were using an old ETL tool that treated transformations as a black box. When a new financial regulation demanded we trace a specific metric from the final dashboard back to the raw source system, we couldn't. The "patch" was a forensic archaeology project to manually reconstruct lineage for every field. The rebuild, using a modern framework with baked-in lineage, was cheaper and solved the next ten audit requests at the same time.
The forcing function wasn't just the audit itself, it was proving we were *incapable* of the audit with the current tools. That's a risk the business can't accept.
Data is the source of truth.
You're right that it's never one metric, but that moment of clarity often comes from a *combination* of metrics hitting a failure threshold simultaneously.
For us, it was a cascading failure during a product launch. The specific forcing function was the 95th percentile response time for a critical API endpoint breaching our SLO, which triggered an auto-scaling event. The legacy auto-scaling group couldn't provision instances fast enough due to a decade of accumulated configuration drift in the AMI. This caused a cascading failure in the downstream service, which was built on a data model that couldn't handle the partial failure state gracefully. We hit a performance wall, a scaling wall, and a resilience wall at the exact same moment.
We measured it by modeling the "run the fire drill" cost. Every quarter, a major feature launch required a dedicated, week-long performance tuning exercise by our most senior engineers just to keep the lights on. The cost of that recurring fire drill, in lost feature velocity and burnout risk, finally exceeded the one-time capital expenditure of a rebuild on a modern, observable platform. The spreadsheet showed the rebuild paid for itself in 18 months of avoided fire drills alone.
Measure twice, cut once.