From User Story to Acceptance Criterion: Given/When/Then Done Right
A user story without acceptance criteria is a wish. Here is how to write stories and Given/When/Then criteria that a team can actually build and test.

A user story is a requirement wearing casual clothes. It is deliberately small and deliberately informal — but it is still a requirement, and it has the same one job: to remove ambiguity between what is wanted and what is built.
The trick is that a story alone does not do the job. A story without acceptance criteria is a wish. This post shows you how to write both — the story that starts the conversation and the criteria that end it.
A user story is a promise, not a spec#
The classic form: "As a <role>, I want <capability>, so that <benefit>."
Example: "As a project owner, I want to export my requirements to PDF, so that I can share them with a customer who does not use the tool."
Notice what the story does NOT say: it does not say how to build the export, what library to use, or what the PDF looks like. It states the need and leaves the how to the team. A story is a promise of value, not an implementation.
Acceptance criteria make it testable#
The acceptance criteria are where the story becomes concrete. They are the conditions that must be true for the story to count as done. If a story is a promise, the criteria are the definition of "kept".
The cleanest format is Given/When/Then (from Gherkin): given a starting state, when something happens, then the system must respond in a specific, observable way.
Given/When/Then, done right#
A complete example:
Given a document with 120 requirements — When the owner clicks "Export PDF" — Then the system generates a PDF containing all 120 requirements, and the PDF includes section numbering.
Three rules keep it honest: one verifiable outcome per Then; concrete values instead of vague words; and no implementation detail (the criteria say WHAT, never HOW).
- Given — the preconditions: the state, the data, the logged-in user.
- When — the single action or event that triggers the behaviour.
- Then — the observable, testable outcome.
INVEST: six tests for a good story#
- Independent — it can be built and delivered on its own.
- Negotiable — it captures the goal, not the design.
- Valuable — it delivers something the user actually cares about.
- Estimable — the team can size it.
- Small — it fits comfortably in a sprint.
- Testable — you can point to the acceptance criteria that prove it.
Common mistakes#
- Writing the HOW into the criteria (e.g. "use the PDF library X") — that is design, not acceptance.
- Packing several outcomes into one scenario — split them, or you cannot tell which one failed.
- Vague Then ("the system should be fast") — replace with a number.
- Stories so large they cannot be estimated — split them along the value, not the work.
A full worked example#
Bad: "As a user, I want to export, so I can save things. Acceptance: the export should work and be fast."
Good: "As a project owner, I want to export my requirements to PDF, so I can share them with a customer." — Given a document with 120 requirements, When the owner clicks "Export PDF", Then the system generates a PDF containing all 120 requirements. And the PDF includes section numbering and the traceability matrix. And the export completes within 2 seconds.
The first version is a wish and will start an argument. The second is a promise a tester can keep or break — which is exactly what makes it useful.
Cite this article
Requify Team. (2026-09-02). From User Story to Acceptance Criterion: Given/When/Then Done Right. Requify. https://www.requify.tech/en/blog/user-stories-acceptance-criteria