Not the deliverables. Not the budget. The contract. You open the diff and see the new language. Calls that were supposed to take one set of fields now take another. A parameter is gone. A data type collapses from array to string. Your test suite passes, but your gut tells you it means trouble.
This is the pain point of contract amendment. It is never planned. It arrives with urgency, disguised as “just a small change.” Every system that touched the old contract now has to be traced, updated, tested, deployed. Documentation falls out of sync. Old contracts live in caches, queues, and clients no one controls. The risk is not just downtime but silent failure: data misinterpretation, default values masking errors, user input breaking features weeks later.
The real cost is the chain reaction. Even minor contract amendments move through services, jobs, pipelines, and APIs. Staging doesn’t catch it all because staging doesn’t have production traffic. It’s easy to miss the integrations you no longer own. You find them when something breaks in production, far from the original code change.