The pain point with ad hoc access control is its hidden complexity. Developers add quick fixes to meet immediate needs: a hardcoded role for one team, a manual override for an urgent request. These short-term solutions slip past code reviews because they solve today’s problem. But they create a patchwork of permissions that drifts over time.
This drift erodes security. It weakens consistency. Policies that once matched business requirements start conflicting. You see missed revocations, outdated roles, and paths to sensitive data that no one documented. When users leave or change jobs, orphaned permissions remain. Auditing becomes guesswork. Compliance fails.
Ad hoc access control is also hard to scale. Every new feature requires tracing legacy exceptions. Testing gets slower. Deployments grow risky because you don’t know what permissions will break. As your surface area grows, so does the attack surface.