What Your ArgoCD Setup Is Missing?

Most engineers I talk to hate ArgoCD. The #1 reason?
👉🏾 “It’s too UI-centric.” But here’s the interesting part…
According to the 2025 State of GitOps Report:
→ ArgoCD is the most adopted GitOps tool (50%)
→ Yet only 16% of teams actually practice GitOps end-to-end
So maybe the problem isn’t ArgoCD…Maybe it’s how we’re using GitOps.
📊 Octopus Deploy broke this down (with insights from 660+ engineers doing GitOps):
👉 Read the full breakdown here.
Hey {{first name | there}},

We have come a long way from the days of "it works on my machine." Over the years, tooling enabling reproducible builds, such as Docker and packagers, can handle version pinning much better than they could years ago. If you are one of the cool kids, you probably have used Nix to reproduce entire machine builds.
The point I am trying to make with all of this is that we have the tooling to ensure production machines, staging, development, and production.
Yet, a push to prod can still break code that worked on your machine.
In this issue, I wanted to go over some of the challenges you and I have likely encountered when releasing software and how you can stop finding out in production with Octopus Deploy.
The DIY Deployment Trap

One thing I have observed over the years is something called The DIY Deployment Trap.
Teams looking to ship a product would often treat a deployment as a checklist of some sort, whereby you install dependencies, run the build as soon as tests pass, and if something happens in between, you patch the deployment script or even the environment it is running in and keep it moving.
As time passes, teams find themselves fighting their release process and not actual bugs. This is why DIY deployments are dangerous; they start simple but over time become technical debt tied closely to your release process.
What Actually Needs to Be Tested
Software delivery exceeds working code. The scripts, variables, and references that move your artifact from one environment to the next are part of what you ship, and they deserve the same scrutiny as the application itself.
Your deployment process should flow through environments the same way your code does.
A change to a script, a variable, an API key reference: these are changes that need to be validated from the start of the pipeline, not patched in place mid-promotion.
If you update your deployment script at staging because dev surfaced a bug, you now need to go back to dev. The whole point is that by the time production runs it, nothing should be new.
Consider a dependency bump as a concrete case. You pin a library version in your staging deployment script to validate a patch. Staging goes green. The artifact looks clean. But your production script still points at latest, or at a different pinned version entirely.
What shipped to prod is not what you tested in staging.
It worked on your machine.
It worked in staging.
It breaks the moment prod runs, because the process that fetched and deployed the dependency was never promoted alongside the change.
What Your ArgoCD Setup Is Missing?

Most engineers I talk to hate ArgoCD. The #1 reason?
👉🏾 “It’s too UI-centric.” But here’s the interesting part…
According to the 2025 State of GitOps Report:
→ ArgoCD is the most adopted GitOps tool (50%)
→ Yet only 16% of teams actually practice GitOps end-to-end
So maybe the problem isn’t ArgoCD…Maybe it’s how we’re using GitOps.
📊 Octopus Deploy broke this down (with insights from 660+ engineers doing GitOps):
👉 Read the full breakdown here.
The Snapshot Model

What the scenario in the last section demands is immutability. Not for the artifact, which most teams already version and pin, but for the deployment process that surrounds it.
Once a release moves, neither its steps, nor its variables, nor its package references should be allowed to change.
This is the route Octopus Deploy takes. When you create a release, Octopus captures a snapshot containing the deployment process, variables (including Variable Sets), and package versions bound to that release.
If something in the process needs to change, the answer is not to edit the release.
It is to create a new one. Release 1.2.3-patch1 carries a fresh snapshot with your fix. Release 1.2.3 stays exactly as it was tested in staging.
This is also enforced at the lifecycle level. A release must be deployed to at least ONE environment before deploying to production. This way, a “push to prod” has been validated at least once.
Why This Matters More Than You Think
What makes Octopus Deploy’s approach work is that you do not have to build this yourself. Sure, you could string this together with a policy engine and a dozen scripts, but the cost is engineering hours and having to maintain it long term.
Snapshots are an incredible way to prevent environments from changing underneath you, and it's quite surprising that more vendors do not do this. If this has remotely piqued your interest, give Octopus Deploy a try or schedule a demo!
If you made it this far into today's issue, I would like to say a huge thank you. We have gotten some good feedback and are working on bringing you quality engineering content.
Also, Divine said to tell you to share this link with a colleague or fellow DevOps Engineer who is still finding out in production.
Until next time.
Jubril Oyetunji
Chief Technology Officer, EverythingDevOps
