The contracts were growing faster than the team could read them.
What began as a contained framework exploded into thousands of granular definitions. Each new feature, every integration, every microservice call added another layer. Soon, the contract registry wasn’t a helpful reference—it was a living, sprawling organism. The result was a large-scale role explosion, a state where every service, endpoint, and event triggered its own rules, permissions, and dependencies. It wasn’t chaos yet. But it was heading there.
Ramp contracts define service-to-service expectations. They set the rules of engagement for APIs, roles, and access scopes. At small scale, they are easy to maintain. At large scale, duplicated definitions, inconsistent naming, and role creep become real threats. When hundreds of roles exist, mapping them to the right service boundaries becomes slow, fragile work.
The pain isn’t just in the number of contracts—it’s in the knock-on effect. A permission added in one place gets overlooked elsewhere. A consumer depends on an outdated shape. A single refactor demands updates in dozens of files. Multiply this by every team and the friction compounds. This is the cost of large-scale role explosion.