sethserver.com Subscribe
A blue cartoon robot with large eyes sits at a desk holding a trophy in one hand and a pen in the other, with papers containing charts and graphs spread out in front of it. Above the robot are floating symbols including a green checkmark, red X, light bulb, question mark, and pointing hand gestures against a mint green background.

Human in the Loop, Not Human as Rubber Stamp

By Seth Black • Updated: September 17, 2026

AI · 4 min read

Like this kind of writing? Get one email a week with notes on startups, AI, and the occasional strong opinion about Python: subscribe to the newsletter.

People love to say "we have a human review step." I'm guilty of this sin. They ship a UI that turns the human into a rubber stamp. The person clicks Approve, nobody reads anything, and suddenly the company has "human-in-the-loop" on a slide deck.

That's not a loop. That's a checkbox.

I've watched this flop in a few flavors. One of my favorites was a SaaS company that swore they used AI for boring financial work. A few weeks in, I noticed support and services were oddly protective. Simple questions got rehearsed answers. At one point I was literally told, "come to our office and watch us work." Code review later: the "AI" was mostly spreadsheet column mapping and data formatting. Excel cosplay with a GPU budget. The "review" step was a human clicking through a blob of output they didn't understand, under time pressure, with zero context. They predictably approved junk. Then everyone blamed "the model."

Why your review step doesn’t work

Humans happily approve things they don't understand. Especially when:

If approvals feel rigid or opaque, trust but verify. Ask, "What's our runway?" for the business. Ask, "What's our rollback plan?" for the system. Same instinct, different layers.

When humans actually need to be in the loop

Some actions are too spicy to run end-to-end without a real review:

If the blast radius is big, the human can't be theater. They need tools that make it hard to sleepwalk into a catastrophe.

Design review surfaces humans can actually use

The fastest way to kill a review step is to dump raw output in a box and call it a day. Don’t do that.

Show diffs, not blobs

If the model edits text, show before/after with a diff.

If it edits structured data, show field-level changes.

- refund_amount: 0
+ refund_amount: 49.99
- refund_reason: null
+ refund_reason: "Duplicate charge"

Humans can scan diffs. Humans cannot meaningfully review a wall of JSON between Slack pings.

Summarize impact in plain language

Put the consequence at the top:

If your UI can't say what’s about to happen, your system doesn't understand what it’s doing. That’s the real bug.

Put risk where the reviewer will see it

Confidence scores are cute, but you need signals that match real risk:

Make the risky bits loud. Reviewers shouldn't have to play Where’s Waldo with the danger.

Friction with intent

Friction is not the enemy. Random friction is.

Use more friction for higher-risk actions:

Use progressive disclosure:

People want to move fast. Let them. Just don’t let them bulldoze through something dangerous without noticing.

Guardrails on the human side

If your main button says Approve All, you built a rubber stamp with extra steps.

Guardrails that actually help:

Close the feedback loop

A real loop learns.

Require Reject with reason. Even a dropdown works:

Then track:

If you can't answer "how often do humans catch real problems?" you don't have a loop. You have theater with a legal disclaimer.

A simple example flow

  1. Model proposes refunds.
  2. UI shows: count, total dollars, top anomalies, and diffs per user.
  3. Reviewer approves low-risk cases quickly.
  4. Risky cases require a second approver and a typed confirmation phrase.
  5. Rejections require a reason.
  6. Reasons feed evaluation, prompts, and tooling changes.

That’s human-in-the-loop. Not human-as-liability-shield.

The same principles apply when AI generates code in CI/CD pipelines: you need real review gates that catch dangerous changes before they ship, not a checkbox that lets broken YAML slide through because everybody’s in a rush.

-Sethers

Share this post
Newsletter

One email, once a week.

Notes on databases, systems, and the occasional strong opinion about Python. No spam, unsubscribe anytime.

Seth Black
Written by

Seth Black

Engineer and founder based in Texas. Writes about databases, AI, and running things in production. Embeds in small teams as lead engineer.

More from AI

View all →
AI

How to be a Good Farrier: What the Car Teaches Us About AI and Your Job

Nov 10, 2026
AI

Principle of Least Privilege in the AI Age

Apr 14, 2026
AI

How to Actually Secure MCP (Model Context Protocol)

Apr 14, 2026