← Back to articles
Technology

5 Patterns of Vague Acceptance Criteria

5 Patterns of Vague Acceptance Criteria

Most Bugs Aren't Implementation Mistakes — They're Misread Specs

Break down the bugs found in production and surprisingly few are cases where "the code was simply wrong." Far more common is a mismatch between what the PM intended and what the engineer inferred from the acceptance criteria. Testing doesn't catch this, because tests assume the criteria are already correct — and inherit whatever ambiguity they contain.

Acceptance criteria are a spec's last line of defense. Get the wording wrong here, and no amount of care downstream erases the misinterpretation.

5 Patterns of Vague Criteria

1. No subject

Bad: "Users can delete it." Who — the owner, an admin? Good: "The report's author can delete their own report; the delete button is hidden for everyone else."

2. No boundary values

Bad: "Title is required." Max length and whitespace handling are left open. Good: "Title must be 1–100 characters; whitespace-only input is rejected."

3. No defined error behavior

Bad: "Users can upload an image." Failure handling is undefined, so every implementer guesses differently. Good: "On upload failure, show an error and preserve the form's input so the user can retry."

4. Missing non-functional requirements

Scale conditions — counts, speed, concurrency — are often left out. Good: "The list shows up to 50 items per page; beyond that, results paginate" — a concrete number, not a vague promise.

5. No definition of "done"

Bad: "Users can update the status." Which transitions are allowed, and where is that confirmed? Good: "Status moves Open → In Progress → Done only, never backward, shown as the card's column on the kanban board."

Fix It on the Spot with Given/When/Then

These patterns are hard to catch while writing. So once a criterion is drafted, try breaking it into Given/When/Then. If it won't decompose cleanly, it's almost always missing a subject or a boundary value.

  • Given: the precondition (who, in what state)
  • When: the action or trigger
  • Then: the expected outcome — down to numbers, copy, and the destination screen

Try decomposing "Users can delete it" and you'll notice there's no Given to write — that gap is your signal. Simply asking in review, "Can this be broken into Given/When/Then?" catches many spec misreads before a single line of code is written.

Putting This Into Practice with Bugoon

Even with solid acceptance criteria upfront, bug reports after launch never drop to zero. What matters is spotting quickly whether an issue is "implemented against spec incorrectly" or "the spec itself was ambiguous." Bugoon lets reporters submit bugs via an embedded widget with a screenshot, annotations, and the exact steps taken, then link straight to a GitHub Issue — making it easy to compare the report against what actually happened.

Linking a report to its related acceptance criterion could make that triage even faster — a direction worth noting, though not something the product does today.

Streamline bug reporting for your team.

Bugoon is free to get started. Add one line of code to your site and transform how your team handles bugs.

Get Started