Generated things need generated names
Tags: naming, history, findability
Naming used to cost a proportionate amount of attention. You made a document β an hour of work β and spending four seconds on a filename was obviously worth it. Generative products invert that: creating takes a sentence, and naming takes more deliberate thought than the creation did. So nothing gets named.
The cost is not untidiness
A column of Untitled (47) looks like a housekeeping problem. It is not.
It means the history has stopped being an asset. People cannot find what they made, so they make it again β which spends the money a second time, and throws away whatever editing they had done to the first one. The most valuable artifacts in the product are the ones somebody improved, and those are precisely the ones that get lost, because improvement does not change the name.
So the product develops a strange shape: enormous generation volume, near-zero retrieval, and users who believe the history is useless because in practice it is.
A handle, not a summary
The instinct is to title it accurately, which produces twenty-word descriptions that are correct and useless. A name is for picking one thing out of a list of similar things, which makes distinctiveness the requirement, not fidelity.
Three properties:
- Short enough to scan. If the list cannot be read down the left edge in one pass, the names are too long.
- Distinctive against its neighbours. Four threads called "Lesson plan" is the same failure as four called "Untitled". This is the one that gets missed β the names are individually accurate and collectively worthless.
- Stable. A name that drifts as the artifact grows destroys recognition, which is the entire function. The user learned where the thing was; moving it is worse than never naming it.
Name from the request, not the answer
A small point that turns out to matter a lot.
The user remembers what they asked for. They do not remember what the model said, because they had not read it yet when they formed the memory. So a title generated from the output is a title describing something the user never committed to memory, and it reads as a stranger's label on their own work.
Naming from the first message is a bet that the opening request characterises the thread. Usually true. Occasionally wrong β a conversation that started as one thing and became another β and the remedy for that is an editable name, not a cleverer generator. Regenerating titles as threads evolve breaks stability, which costs more than the occasional bad name.
And never overwrite a name a person chose. A human name is a statement that this one matters.
When to use something other than prose
The natural-key branch is worth checking before reaching for a model. "Invoice 4471" and "Q3 board deck β draft" are better handles than anything generated, and they are free.
Grounded in
Poppy titles threads from the first message and persists them, with a sidebar that adapts to where you are β so a teacher returning to last week's parent email takes one glance rather than running a search.
The use case is what makes the requirement sharp. These are people with a few minutes between classes, generating several things a day, every day, across a term. At that volume an unnamed history is not mildly inconvenient; it is a product that silently stops having a second session. The auto-title is what turns a streamed answer into a durable, findable artifact, and it is a much smaller piece of work than the streaming it makes worthwhile.
Anti-patterns
- Untitled (47). The baseline, and the symptom of treating naming as the user's job.
- Naming from the output. Describes something the user had not read when they formed the memory.
- Names that drift. Recognition is the function; moving the label destroys it.
- Summaries instead of handles. Twenty accurate words that cannot be scanned.
- Collectively undistinctive names. Four correct titles that are identical to each other.
- Overwriting a user's name. They told you this one mattered.
- Titles generated by a second model call on every render. Expensive, non-deterministic, and it makes the name unstable by construction.
The smallest version worth building
Generate a title from the first request, at creation, in under six words. Store it. Make it editable. Never regenerate it.
That is one call and one field, and it converts a write-only history into something people come back to.
Related patterns
- Runs need a shelf β a shelf of identically-named attempts is still unscannable, so the two patterns depend on each other.
- Streaming is a commitment β the same argument about what happens after the stream ends: an answer nobody can find again is a demonstration of latency.
- Regeneration is an edit, not a retry β regenerating should not silently rename, because the name is how the user holds their place.