Why do AI features convert at 90 percent in a demo and die at 20 percent in daily use? We watched a copywriting feature hit 92 percent acceptance in a sales deck, then settle at 19 percent by week three, with no change to the model. The delta was entirely control surface. A demo is a controlled path; daily use is messy inputs, real stakes, and a user who was burned once. The gap between a demo and a product people open every Tuesday is the loop, not the model. Design it well, and a mediocre model feels dependable.
Why demos convert at 90% and daily use dies at 20%
A demo is a controlled environment. The presenter knows the golden path, the input is clean, and nobody pays for a wrong answer. Daily use is the opposite: messy inputs, real stakes, and a user who was burned once and now hovers over every suggestion. When teams report that engagement cratered after launch, the cause is rarely that the model got worse. It is that the interaction gave users no safe way to stay in control, so they stopped trusting it and reverted to doing the task by hand. We have watched a copywriting feature demo at a 92% acceptance rate in a sales deck, then settle at 19% acceptance in week three of production, with no change to the underlying model. The delta was entirely control surface.
Human-in-the-loop UX is the set of patterns that keep a person authoritative while letting the model do the heavy lifting. It answers three questions on every action: does the system ask or just do, can I see and reverse what it did, and does the product learn from my correction. Get these right and a mediocre model feels dependable. Get them wrong and a great model feels like a liability you have to babysit. The order matters too. Trust is asymmetric: a single unrecoverable bad action costs roughly ten good ones, so the loop has to be designed for the failure case first and the happy path second.
Five interaction modes, matched to blast radius
Pick the mode by how expensive a wrong action is and how reversible it is. A draft email is cheap and reversible, so let the model act and offer undo. A production database write is expensive and irreversible, so require explicit confirmation with a diff. The mistake teams make is applying one mode everywhere: gating everything behind a confirm dialog trains users to click through blindly, while auto-acting on high-stakes work destroys trust the first time it is wrong. Score each action on two axes, cost of a wrong call and reversibility, then read the mode off the grid.
| Pattern | When to use | User control | Telemetry to log |
|---|---|---|---|
| Suggest and stage | High stakes, irreversible (deploys, payments, deletes) | Explicit confirm on a rendered diff before commit | Accept rate, edit-before-accept rate, time-to-decide |
| Act with undo | Reversible medium stakes (draft, reformat, tag) | One-click revert visible for the full session | Undo rate, undo latency, redo-after-undo |
| Inline autocomplete | Low stakes, high frequency (code, text) | Tab to accept, keep typing to ignore | Acceptance %, partial-accept length, dismissal |
| Ask on ambiguity | Underspecified intent, multiple valid paths | Clarifying question with 2 to 3 concrete options | Which option chosen, abandonment at the question |
| Background with digest | Batch or async work (monitoring, triage) | Summary review with bulk approve or reject | Bulk-accept %, items pulled out for manual review |
Prompt surfaces matter as much as the modes. The most-used AI features do not have a chat box; the prompt is embedded where the work already lives. A rewrite action on a selection, a slash command in the editor, a suggested reply under a message. When you force users to context-switch to a separate assistant panel, adoption drops because the tool is not where the intent is formed. Treat the confidence signal as part of the surface too: route anything below a set threshold, say a judge score under 0.7, into the ask-on-ambiguity mode rather than presenting it with the same certainty as a high-confidence answer.
Work a concrete case. An inbox assistant drafts replies. Tag the draft action as reversible and medium stakes, so it acts and shows a one-click revert. Tag the send action as irreversible and high stakes, so it stages the message with a rendered diff and waits. In a two-week pilot with 40 users, this split produced a 61% draft-accept rate, a 4% undo rate on drafts, and zero unintended sends, while an earlier build that auto-sent "obvious" replies had generated three angry customer escalations in its first day. Same model, same prompt, different loop, and the difference was a product that people kept using versus one they switched off.
Instrument the loop before you polish the model
- Classify every AI action by reversibility and cost, then assign it one of the five modes above. Write the mapping down in a table the whole team can see; it is a product decision, not an engineering detail, and it is the artifact you argue over.
- Put the prompt on the object being acted on. Selection-level actions and inline slash commands beat a global chat panel for anything with a clear target, and they typically lift adoption because the tool sits where intent forms rather than one context-switch away.
- Log micro-telemetry per interaction: shown, accepted, edited-then-accepted, rejected, undone. These five signals are your real eval set and your training data for later, and the edited and rejected rows are worth more than the accepts.
- Make undo a first-class element, not a toast that vanishes in three seconds. Persist it for the full session so a user can act fast and correct later; a revert window measured in seconds is not a safety net, it is a trap.
- Render a diff for anything staged. Users approve confidently when they can see exactly what changes; a vague "apply suggestions?" gets reflexive rejection, and a clear before-and-after view routinely turns hesitation into a fast, confident yes.
The trust-killers that survive code review
- Confirm-dialog fatigue: gating trivial actions trains blind clicking, so the one confirm that matters gets waved through too. Fix: reserve confirms for irreversible work; use undo everywhere else.
- Silent failure: the model returns nothing or a wrong answer with full confidence. Fix: show an honest error state that names the limit ("I could not read that table") and offers a manual path, because a named failure keeps trust while a confident wrong answer destroys it.
- Confidence theater: presenting every output identically regardless of certainty. Fix: surface a coarse confidence cue and route low-confidence results into the ask-on-ambiguity pattern instead of shipping them as facts.
- Undo that does not fully undo: partial reverts leave residue and destroy trust faster than the original error. Fix: snapshot state before the action and restore it whole, then test the restore path as carefully as the forward path.
- Logging only the happy path: capturing accepts but not edits and rejections. Fix: the rejections and edits are where the model is failing, so they are the most valuable rows and the ones your later golden set is built from.
Ship this before the next model upgrade
- Every AI action tagged with a mode based on blast radius, written down in a shared table.
- Session-persistent undo on all reversible actions, not a three-second toast.
- Diff view on all staged, irreversible actions before commit.
- Five-state telemetry (shown, accepted, edited, rejected, undone) flowing to a table.
- At least one honest error state that names the failure and offers a manual fallback.
Related advisory guides
Go deeper on this theme with the detailed guides in this collection.
Designing confirm/override steps that speed up rather than slow down.
Patterns: inline, panels, slash-commands, and background agents.
Edits, reverts, abandonments → the real quality signals.
Graceful fallbacks and “show your work.”
Change the paper cuts first; delight second.