Policy-As-Code was meant to solve access management complexity, not amplify it. Yet at scale, poorly managed role definitions create chaos: dozens of nearly identical roles, overlapping policies, and permissions that drift from principle of least privilege. The result is impossible audits, fragile infrastructure, and growing risk surface.
Role explosion happens when teams create new roles for every slight variation in access needs. Over months or years, this leads to thousands of JSON policy files or YAML manifests. Even small changes in a resource can require patching multiple policies. Policy-As-Code without governance turns into an unpredictable web of bindings, identities, and exceptions buried deep in Git repos.
The impact is bigger than wasted engineering hours. Excessive roles weaken security by granting broader permissions than necessary. They break compliance audits because mapping roles to human-readable responsibilities becomes a manual detective job. They slow delivery because policy changes ripple across stacks and force engineers to hesitate before deploying.