The shift from push-based deployments to a pull-based, Git-native model — and why it makes production safer.
Most teams ship to production by running a script, triggering a pipeline, or pressing a button in a deployment tool. Someone applies a change, something happens in the cluster, and the team holds their breath for a few minutes to see if it worked. If it didn't, the rollback is usually manual, often stressful, and sometimes involves someone SSH-ing into a server at 11pm.
GitOps is a different model. The core idea is straightforward: your Git repository is the single source of truth for what should be running in your infrastructure. Instead of pushing changes into your cluster, an agent running inside the cluster — ArgoCD is the most common choice — continuously watches the repository and pulls it into sync with what's actually deployed. If your cluster drifts from what's in Git, the agent corrects it. If you want to deploy a new version, you merge a pull request.
The immediate practical benefit is auditability. Every change to your production environment is a commit. It has an author, a timestamp, a description, and a diff. You can see exactly what changed, when, and why — without digging through CI logs or asking someone what they ran last Tuesday. In regulated industries, that audit trail alone justifies the change.
The second benefit is rollback. Rolling back a GitOps deployment means reverting a commit. The cluster converges on the previous state automatically. There is no special rollback command to remember, no procedure to rehearse, no risk of forgetting a step under pressure. You revert the commit and wait thirty seconds.
The third benefit is what happens to your team's relationship with production. When the cluster is always converging toward what's in Git, engineers stop treating production as a place where things are manually configured and start treating it as a reflection of code. That shift in mental model reduces the number of undocumented changes, the amount of configuration drift, and the number of incidents that start with "someone changed something but we're not sure what."
The transition to GitOps isn't always frictionless. Teams that are used to imperative deployments — kubectl apply, helm upgrade, direct API calls — have to get comfortable with a more declarative, asynchronous model. Changes don't take effect the moment you merge; they take effect when the agent reconciles. That small delay can feel uncomfortable at first, particularly during incident response when you want to know immediately whether your fix worked.
The tooling has a learning curve too. ArgoCD, Flux, and similar tools have their own concepts — Applications, AppProjects, sync policies, health checks — that take time to understand well. Getting the right balance of auto-sync versus manual sync, understanding how to handle secrets in a GitOps model, and knowing when to break glass and apply something directly are skills that come with experience.
But the long-term payoff is a deployment process that teams actually trust. When shipping to production means merging a pull request and watching a dashboard go green, engineers deploy more often, more confidently, and with less ceremony. And that — more frequent, lower-risk deployments — is one of the clearest signals of a healthy engineering platform.
Related posts
Stay in the loop
Get new posts delivered to your inbox
Platform engineering, frontend craft, and systems thinking. No spam.