Requirements Smells: 10 Phrases That Belong in No Spec

You can learn a surprising amount of requirements engineering by banning a short list of words. Most bad requirements are bad for the same few reasons — a vague adjective, an open-ended "etc.", a softener where a commitment belongs.
Here are the ten smells, and the fix for each. If a sentence in your spec uses one of these, rewrite it before it becomes someone else’s problem.
The ten smells
- "fast" — meaningless. Fix: "renders the list in under 500 ms for 500 items."
- "user-friendly" / "intuitive" — untestable opinion. Fix: "a new user completes the core task in under 3 minutes without documentation."
- "as needed" / "as required" — hides the trigger. Fix: name it — "when the queue exceeds 1,000 messages."
- "should" where you mean "must" — a goal wearing a requirement’s clothes. Fix: say "shall" (or German "muss") and write the test.
- "reliable" / "robust" — a feeling, not a target. Fix: "99.9% availability, retry with exponential backoff."
- "secure" — everything is secure until it is not. Fix: "requires multi-factor authentication for all administrative logins."
- "scalable" — scalable to what? Fix: "supports 10,000 concurrent users at p95 latency under 200 ms."
- "etc." / "and so on" — the open-ended escape hatch. Fix: enumerate the list, or explicitly close it.
- "TBD" / "TBA" — a decision postponed until it is expensive. Fix: decide now, or mark it with an owner and a date.
- "if possible" / "best effort" — a requirement that is secretly an option. Fix: make it a "shall" or cut it.
Why these ten cover most of it
Notice the pattern. Four of the ten are vague adjectives that hide a missing number. Three are softeners that blur a commitment into a preference. Three are placeholders that defer a decision to the most expensive moment. That is most of what is wrong with most specifications.
The rule underneath all ten is the same one from the rest of this blog: a requirement is only finished when a test could fail it. If the sentence cannot be failed, it is not a requirement yet.