Patching security holes. Wrestling with upgrades. Debugging in circles because a single misconfigured realm brought the whole system to its knees. Every sprint, hours vanished into maintenance instead of building the features that matter. It wasn’t a lack of skill. It was the nature of running Keycloak in production without a safety net.
Keycloak is powerful. It’s also demanding. Self-hosting means tracking every release, testing every change, applying the right JVM tuning, managing complex clusters, and keeping it all secure while avoiding downtime. The initial setup might look fast, but in real life, teams watch engineering hours slip away month after month. Multiply each upgrade by every staging environment, every deployment region, every hidden dependency, and the cost balloons.
Those lost hours matter. They slow new product launches, they delay experiments, and they drain focus from customer needs. Every additional plugin, integration, or federated identity source multiplies the complexity. This is how entire teams spend more time babysitting infrastructure than writing new code.