Synonyms and fuzzy match have to carry it
Aliases: fuzzy command search · vocabulary problem
What it is
Even when people know the kind of action they want, the word they bring is often not the word on the product’s menu. Synonym and fuzzy matching is what makes Delete / Remove / Trash / del land on the same command. A palette is indexed by names; if the name is narrow, the recall channel breaks at “the words did not meet” — not because people do not know what they are looking for, but because they do not know what you call it.
Why it happens
This is the classic vocabulary problem: designers pick one label, users search with another. Exact substring matching only covers the cases that happen to share a stem. Find misses Search; Archive misses Hide from inbox; one letter off is a zero result. People reformulate once or twice and then conclude the function does not exist. A synonym list, common abbreviations, and names of reverse operations (“unpin” must find “Unpin from sidebar”) map several spoken forms onto one record. Fuzzy matching (edit distance, tokenisation, romanisation) covers spelling and word order; it does not replace synonyms. Two words with no letters in common will not be saved by fuzz.
Ranking matters as much. Fuzz that is too loose fills the list with near-misses and shoves the real target off the first screen: a mathematical match and a choice failure. Context weights (commands for the current editor first) can lift the right row.
Studying it
Collect real queries (zero-result rows and reformulation chains in the logs) into a set of “what the user said → target command”. Independent variables: exact match, plus synonyms, plus fuzz. Dependent variables: first-screen hit rate, reformulation count, zero-result rate.
Do not test with names the designers themselves would search; that systematically underestimates the vocabulary problem. Run a pass with multilingual users querying in their language.
Where it stops holding
Too many synonyms pull in unrelated commands (open matches too much). Legal or destructive commands need a tighter match so del does not prefer Deploy. Internal code names should not be primary matches unless that is already what the user community says. With no corpus, run a small open naming: show the action, ask what people would type, and write the frequent forms into synonyms rather than inventing them in a closed room.
Applying it
- Keep a searchable-name list per command: official label, spoken synonyms, reverse-operation names, common abbreviations.
- On zero results, say there was no match and offer spelling suggestions; do not silently return a long unrelated list.
- Patch synonyms from real zero-result logs. When the first screen is often crowded by the wrong command, tighten fuzz and strengthen context weights.
- How to check: run queries in the users’ wording, not the official labels; the target should sit on the first screen. Every zero-result query later shown to have a living function is a missing word. Then misspell by a letter or two: it should still be recognised, without lifting a totally different destructive command to the front.