The regenerate affordance
Asking for another take, without losing the first one.
The regenerate button is the most misunderstood control in AI products. Users press it when something is wrong, but the product rarely asks what, so it just rolls the dice again. You get a random walk through the model's answer space, most of it worse than the last one.
"Regenerate should never be a slot machine. It should be a steering wheel."
Regenerate asks: different how?
Clicking regenerate doesn't immediately reroll. It opens a small dial: shorter, more formal, warmer, with numbers, simpler, contrarian. Each is a directional nudge the model understands. The user picks one. Now the reroll is purposeful, not random.
The old variants don't disappear. They become breadcrumbs at the bottom of the answer — "Recent variants" — clickable to switch back. The user is never punished for exploring.
Retention ticked up this quarter, driven mostly by onboarding changes.
Regenerate should never be a slot machine. It should be a steering wheel.
Users rarely want a different answer. They want the same answer, better.
When a user presses regenerate, the dissatisfaction is almost always specific: too long, too stiff, too salesy, missing numbers. A naked reroll treats every complaint the same. A steering regen treats the user as an adult with a preference, and produces a result they can actually use on the first click.
Directions that carry most cases.
- Length dials. "Shorter" and "Longer" land most of the actual regenerate intent. Ship these first.
- Register dials. "Warmer," "More formal," "Plainer." Every doc has a tone target; the model can usually hit it if told.
- Content dials. "With numbers," "Without examples," "Just the conclusion." Structural nudges, not just stylistic ones.
Regenerate that forgets the past.
Products that discard the previous answer on regen force the user to hold their own history. That's a memory tax, and it makes users hesitant to ever press the button. Regen becomes a last resort rather than a first tool. The feature fails by existing.
What this pattern gets wrong when it gets wrong.
- Silent truncate
- The response ran out of room or tokens and the product didn't tell the user where it stopped.
- Ambiguous state
- Running, done, errored, paused all look the same. The user has to infer from context.
Three shipping variants worth copying.
- Arrows above the response to cycle previous takes
- A compare-two-takes view on a single click
- An 'undo regenerate' affordance for 30s after clicking