🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.🚧 Under construction β€” I'm migrating this site from Framer to Next.js and publishing it early for testing, so a lot of the content is still in flux.
Open menu
Switch to Darkhello@product.inc
AIUX patterns

Undo over confirm

Tags: agents, destructive, recovery

For an action that is genuinely reversible and happens often, don't interrupt with a confirmation. Apply it immediately and offer Undo for a few seconds. In products where a model acts on your behalf this stops being a preference and becomes the only workable option.

The ordinary version of the rule

Two questions decide it. Can the action be cleanly reversed? And does it happen often?

Rendering diagram…

The cost of getting this wrong is not symmetrical. A confirm dialog on a frequent reversible action doesn't just annoy people, it trains them to dismiss dialogs without reading β€” which erodes the guard for the actions that genuinely needed one, usually elsewhere in the same product.

The mechanism that makes undo cheap

This is the part usually left out, and it's why undo has a reputation for being expensive.

Undo doesn't have to reverse anything. Apply the change in the interface immediately, and defer the irreversible commit until the undo window closes. The item leaves the list at once, the toast appears, and the real write happens a few seconds later if nobody objects. Undo is then a cancel rather than a rollback β€” you are not unpicking a completed operation, you are declining to start one.

Rendering diagram…

Reversing a committed delete is a data problem; not committing yet is a scheduling problem, and scheduling problems are much easier.

Two details decide whether it feels right. Restore to the exact prior state β€” same position in the list, same selection and scroll β€” because undo that re-adds the row at the bottom breaks the promise of putting it back. And keep one window at a time: if a second action fires, commit the first rather than stacking pending undos into ambiguity.

Why AI products need it more

The harder problem with agents

The classic rule takes reversibility as a given. For an agent that touches the outside world, reversibility is not a property you discover β€” it's something you design for, and mostly you get it by choosing where the commit boundary sits.

An agent that sends an email, charges a card or calls a third-party API has crossed a line you cannot pull back across. So the work is arranging for the undo window to sit before that boundary: stage the outbound action, hold it briefly, and let the window elapse before anything leaves. If you want a product that can act on someone's behalf without asking permission constantly, the thing to build is a staging point, not a better dialog.

Grounded in

The two questions above, and the deferred-commit mechanism, come from the interaction patterns behind this site's own design system β€” where the same rule is documented for ordinary destructive actions. What changes in an AI product is not the rule but the volume and the authorship: far more actions, most of them not initiated by the person who has to live with them.

Anti-patterns

Where confirm still wins

Permanent deletion. Anything that spends money. Anything that leaves the building β€” a message to a customer, a filing, a publication. Actions that are rare and consequential, where friction is the point and nobody is doing it forty times an hour.

The full argument: Undo over confirm, and why AI products need it more.