Pattern 04 · Before
Appropriate Friction
Before a high-stakes action, the interface asks the operator to slow down. A drone operator overriding a no-fly boundary has to hold the button for two seconds and confirm the zone, so a stray tap can’t send it there.
The mechanism
intent → execute + log
- 01IntentOperator starts an action
- 02Weigh stakesReversible? Who’s affected?
- 03 · Key momentAdd frictionConfirm, delay or second trigger
- 04CommitRe-affirm with the consequence shown
- 05Execute + logAction runs, provenance kept
At 02: Friction scales with consequence. Low-stakes, reversible actions stay fast.
At 04: Restate the consequence — “Release payload over zone B” — never just “Are you sure?”
Without / with the pattern
A working demo of the control, not a screenshot. Nothing here flies anything.
Anti-pattern: One-Tap Catastrophe
Payload
- Zone
- B
- Altitude
- 120 m
- Payload
- Armed
One tap. No second chance.
Smooth UX makes catastrophic actions as easy as trivial ones. One slip is all it takes.
With the pattern
Payload
- Zone
- B
- Altitude
- 120 m
- Payload
- Armed
Hold for two seconds. Let go early and nothing happens.
A pause that restates the consequence catches slips before they become incidents.
Related patterns
- Complements · 06Intent PreviewPreview answers what the machine is about to do; friction answers how hard it should be to say go. Boeing's EXEC loop does both at once.
- Complements · 08Provenance LogFriction makes a consequential action deliberate. The log is what makes it accountable once it has happened.