← Back to Blog

"Can Someone From Ops Approve This?" — Said Every Engineer, Every Day, Forever

The code's been ready since 10am. Tests pass. The only thing standing between you and production is a person in a different timezone who hasn't seen your Slack message yet. This isn't a people problem — it's what happens when every deploy routes through the same human checkpoint, no matter the risk.

By SafeDeployer Engineering Team
6 min read
"Can Someone From Ops Approve This?" — Said Every Engineer, Every Day, Forever

“Can someone from ops approve this?”

Said every engineer, every day, forever.

The code’s been ready since 10am. The tests pass. Review is done. The only thing standing between a finished change and production is a person in a different timezone who hasn’t seen the Slack message yet — because they’re asleep, or in a meeting, or three items deep in their own queue, working through approvals in the order they arrived rather than the order they matter.

By the time the approval lands, the “ready since 10am” change ships at 4pm, or the next morning, or Monday. Nothing about the code changed in that window. Only the waiting did.


This isn’t a people problem

It’s tempting to read that story as an ops team that’s slow, understaffed, or unresponsive. It usually isn’t. Ops teams aren’t the bottleneck by choice — they’re the bottleneck because the deployment process routes through a human checkpoint by default, on every single change, no matter how small.

A one-line copy fix to a marketing page goes through the same approval gate as a schema migration that touches billing. A config tweak that only affects a feature flag’s default value waits in the same queue as a change to the authentication flow. From the system’s point of view, there’s no difference between them — they’re all just “a deploy,” and every deploy needs a human to say yes.

That’s not a staffing problem. It’s a design problem. You could double the size of the ops team and the queue would still exist, because the queue isn’t caused by too few approvers — it’s caused by too many things requiring approval that never needed a human in the first place.


Undifferentiated risk is the actual bug

Here’s the core issue: approval gates should exist where risk actually lives — not on every deployment, regardless of size.

When everything requires the same ceremony, nothing gets prioritized correctly. The reviewer looking at a genuinely risky database migration is working through the exact same queue, in the exact same way, as the person who fixed a typo in a footer. There’s no signal in the system that says “spend your attention here, not there.” Every change looks equally important, which in practice means every change gets equally rushed or equally delayed — including the ones that actually deserved a careful second look.

This produces two failure modes at once, and most teams are living with both:

  1. Low-risk changes get stuck behind a human checkpoint they never needed, purely because the process doesn’t distinguish them from high-risk ones.
  2. High-risk changes get rubber-stamped because reviewers, buried under a queue full of trivial approvals, develop the reasonable habit of approving quickly — including on the one change where quick approval was actually dangerous.

A blanket approval requirement doesn’t make your riskiest deploys safer. It just spreads a fixed amount of human attention across a much larger surface area than it needs to cover, thinning it out exactly where it matters most.


What risk-based gating actually looks like

The fix isn’t removing approvals. Some changes genuinely deserve a second pair of eyes — that instinct is correct. The fix is making approval a property of the change, not a property of the act of deploying.

Concretely, that means:

✅ Low-risk changes ship without a human in the loop. A config value, a feature flag default, a dependency patch bump with green tests and no schema changes — none of that needs to wait on someone in another timezone. It should ship the moment it’s ready, gated by automated health checks instead of a person’s calendar.

✅ High-risk changes get real, deliberate review — not a rubber stamp. Schema migrations, changes to auth, anything touching payments or PII — these should route to a human, and that human should be looking at a short, meaningful queue instead of one buried in seventeen approvals for a CSS tweak. Attention is a limited resource; risk-based gating is how you spend it where it counts.

✅ The blast radius is small even when something slips through. Automated canary rollouts and health-gated switches mean a bad low-risk change doesn’t need a human to catch it in advance — it gets caught by the system, on a small slice of traffic, and rolled back automatically, before it needs anyone’s approval to undo.

✅ Risk criteria are explicit, not vibes-based. “This touches the payments service” or “this includes a database migration” are the kind of concrete triggers that should route to a human. “It’s a deploy” is not a risk criterion — it’s just a description of what’s happening, true of everything in the queue equally.


How this fits into SafeDeployer

SafeDeployer’s health-gated blue/green and canary deploys are built to carry the weight that a human approval gate currently carries by default — for the changes that don’t actually need a person to make the call.

  • Health checks replace the “does this look okay” glance that ops was doing manually anyway, except they run automatically, every time, without waiting for someone’s timezone to line up.
  • Canary rollouts contain the blast radius of anything that slips past automated checks, so low-risk changes can ship without a pre-approval and still fail safely if something’s wrong.
  • Automatic rollback means a mistake doesn’t need a human to notice and intervene — the system already reverted it by the time anyone would’ve seen the alert.
  • That frees your team to reserve actual human review for what deserves it — the migrations, the auth changes, the genuinely risky deploys — instead of spreading the same scrutiny evenly across everything, including the footer typo fix.

The goal isn’t fewer humans in the loop. It’s the right humans, on the right changes, instead of every change waiting on whoever’s turn it is in the queue.


Stop waiting on a timezone

If “can someone from ops approve this” is a sentence your team says daily, the fix isn’t a faster ops team — it’s a deploy pipeline that only asks a human when the risk actually warrants it, and handles everything else safely on its own.

Create a free SafeDeployer account → Set up health-gated, automatically-verified deploys today — no credit card required to start.

Want to talk through where your team’s real risk lives, and how to route approvals accordingly? Book a 15-minute setup call and we’ll help you figure out what actually needs a human — and what’s just been waiting on one by habit.

Boring is the goal. That includes how often a person needs to be in the room.


Discussion