Skip to content
Back to the workshop

An Edit That Can Create Is Not an Edit

When the wrong affordance sits where the right one should be

E
EugeneBuilding Cleo
4 min read

For a while, editing something in this product could quietly create a second one. A user would open an email, change a colour or a line of copy, and end up with a fresh draft sitting beside the original, plus a reusable template they had never asked for. Ask for the same change ten times across a week and you have ten near-identical drafts and ten stray templates. The library fills with noise, and the user cannot tell which one is the real one.

For a while I treated this as a behaviour to be discouraged. Clearer copy. A better confirmation. A gentle nudge toward the right path. None of it held, because none of it addressed the actual cause. The cause was not that the user kept choosing wrong. It was that the product was offering a create where the user meant an update, and the two doors looked the same.

The affordance was the bug

When a small edit can route to a path that mints a new object, the duplication is not misbehaviour. It is the architecture working exactly as built. The edit and the redraft were both reachable from the same gesture, and the redraft was doing its job well, which is the worst kind of bug, because nothing fails. The output is a perfectly valid new draft. It is simply not what the person wanted.

You cannot reliably talk someone out of a path that is sitting right in front of them doing something plausible. No amount of copy fixes a layout that hands you the wrong tool at the moment you reach. If the convenient action is the wrong one, people will keep taking it, and they will be right to, because the product told them it was available.

Two structural fixes, no persuasion

So I stopped trying to discourage the behaviour and changed the structure underneath it.

The first fix: every edit routes to the in-place updater. The stored thing is the source of truth, and editing it changes it, in place, full stop. The path that creates a new draft is no longer reachable from an edit. Changing the colour of an email changes that email. It does not produce a second email that happens to be the same except for the colour.

The second fix: stop the act of drafting from minting a reusable template behind the user's back. A template is a real concept in this product, a thing you deliberately save so you can reuse it later. When every draft silently created a template beside it, the deliberate concept drowned. "Templates" came to mean "every email I have ever touched", which is the same as meaning nothing. Now a template is made on purpose, by an explicit action, or not at all.

Together those two changes did what a season of better wording could not. The duplication stopped, because the path that produced it is no longer where an edit can land.

Make the create deliberate, make the edit edit

The principle I took from this is short. An action that edits must not be able to create. The two are different intentions, and a surface that blurs them will generate the more destructive of the two by accident, because creating is additive and feels safe right up until the library is full of debris.

When you see the same unwanted outcome happen over and over on one surface, it is tempting to read it as a discipline problem, the user's or the system's. Check first whether the surface is handing out the wrong tool. Often the repeated mistake is not a mistake at all. It is the honest result of an affordance that should not have been there.

The honest edge

I did not do all of it. There is a less-travelled path, an older fallback for a particular kind of email, where the relationship between the content and the template is more tangled, and the same auto-minting still happens there. I scoped my fix to the common path, the one the overwhelming majority of users hit, and left the rare one for a later pass rather than risk a regression on an entanglement I had not fully mapped.

That is a deliberate choice, not an oversight, and I would rather say so plainly than imply the whole class is closed. The principle holds everywhere a draft tool and an update tool both exist for the same object. I have applied it where it mattered most, and I know where the remaining half is.

E

Written by Eugene

Building Cleo, an AI marketing operating system. These posts cover the architecture decisions, technical challenges, and lessons learned along the way.

More from the workshop

An Edit That Can Create Is Not an Edit - The Workshop