Product & DesignFree tool
User Story Acceptance Criteria Template
User stories from your spec, each with acceptance criteria a tester can check, plus the open questions to settle before anyone estimates.
Free to start · Opens in your River workspace, ready to edit and share
How to write user stories and acceptance criteria
A user story describes one change from the point of view of the person who wants it, such as a customer or an admin. Its acceptance criteria are the conditions that story must meet before the team accepts it as finished. To write both, split the agreed spec into stories small enough to finish in one sprint. Then give each story criteria anyone can check: a starting situation, an action and a visible result, edge cases included.
The habit that matters most: never let a criterion guess. If nobody can say what should happen in a case, write it down as a question. Name who will answer it, and settle it before the team estimates the story.
Write each story in one sentence
Start from the agreed spec, not a blank backlog: stories work best when they divide up scope people have already agreed. If there isn't a spec yet, write a PRD first. Then turn each requirement into one or more stories, each a change a user would notice.
Use the familiar template: "As a [type of user], I want [an action] so that [a benefit]." Mountain Goat Software, Mike Cohn's agile training firm, calls "As a user, I want reports so that I can see information" vague in all three parts1. Name a real role, one action and the reason it matters.
Take the reason from evidence, such as support tickets or themes from your user interviews, not from the feature request. If nobody can say why a story matters, ask whether it belongs in this release.
Split stories until each fits in a sprint
The Scrum Guide says backlog items that can be done within one sprint are ready for selection2 at sprint planning. Humanizing Work, a firm that trains agile teams, uses a tighter rule. By the time a story reaches the top of the backlog, 6 to 10 like it should fit in one sprint3.
Bill Wake's 2003 INVEST checklist says a good story is independent, negotiable, valuable, estimable, small and testable. He compares a story to a layered cake and advises slicing vertically through the layers4. A finished database layer is worth little to a customer with no screen to use it.
Humanizing Work's guide names nine ways to split a story. Here are five, applied to a feature for inviting teammates:
- Workflow steps: invite by email now, and add admin approval as its own story
- Operations: "manage invites" hides send, resend and revoke
- Business rules: invite any address first, then limit invites to your domain
- Data entry: type one address now, and upload a list of addresses later
- A spike, as a last resort: when nobody knows how to build it, time-box the research
Write acceptance criteria as concrete examples
The Given, When, Then format comes from Dan North, who came up with behavior-driven development, and business analyst Chris Matts. North described their template in 2006: Given some initial context, When an event occurs, Then ensure some outcomes5. Each criterion sets the scene, does one thing and checks the result.
Write every criterion so it can fail. Use real values, not placeholders, because "3 of 5 seats in use" exposes disagreements that "some seats" hides. Cucumber, an open-source testing tool, recommends 3 to 5 steps per example6 in its Gherkin reference. It also says the Then should check something you can observe, like a screen or a message, not a record buried in a database.
Vague criteria, rewritten
| Problem | Vague | Checkable |
|---|---|---|
| No real values | "Admins can invite teammates." | "Given 3 of 5 seats are used, when an admin invites sam@example.com, then Sam gets an invite email." |
| Nothing to observe | "The invite is stored correctly." | "Then the members page lists Sam as Pending." |
| A vague verb | "Invalid addresses are handled." | "When an admin enters sam@example, the page says 'Check the email address' and sends nothing." |
| Hides a decision | "Seat limits are enforced." | A question for the pricing lead: when all 5 seats are used, block the invite or add a paid seat? |
Given, When, Then is optional. A checklist works too, as long as each line can fail.
Look for the cases the spec skipped
Surprises tend to hide in states the spec never mentions. For each story, check these and write down what should happen:
- It already exists: the invited address already has an account
- It ran out: the link expired, or every seat is taken
- It was withdrawn: the invite was revoked, or the admin lost their rights
- Two people at once: two admins invite the same address
- It failed halfway: the invite email bounced
North's article applies the same thinking to a cash withdrawal at an ATM. Beyond an account in credit, he lists an account overdrawn past its limit and a dispenser with insufficient cash5, each a scenario of its own. If the flow has many branches, draw a user flow and journey map first.
Turn unknowns into questions with owners
Some cases have no agreed answer yet. Cucumber project lead Matt Wynne puts it plainly: when the outcome is unclear, you don't have an example, you have a question7. Write the question down and move on.
His Example Mapping session puts a developer, a tester and a product person around one story for about 25 minutes. They write its rules, examples and questions on cards of different colors. Lots of question cards mean there is still much to learn. Lots of rule cards mean the story is big and may need slicing.
Give each question an owner and the date you need an answer, and hold the estimate for every story it affects. As Wake puts it, it's hard to estimate a story we don't understand4.
Story: As a workspace admin, I want to invite a colleague by email so that they can join our projects without a separate sign-up.
Given 3 of the workspace's 5 seats are in use, when the admin invites sam@example.com, then Sam gets an invite email and the members page lists him as Pending.
Given Sam's invite was sent 8 days ago, when he opens the link, then he sees "This invite has expired" and a button to ask for a new one.
Question 1: When all 5 seats are in use, is the invite blocked, or sent and billed as a sixth seat? Owner: pricing lead. Needed by: Thursday's refinement.
- Real values. Five seats, 8 days and a named address mean each line clearly passes or fails.
- Traced to the spec. The spec set a 7-day expiry, so that case is a criterion.
- A question, not a guess. The spec says nothing about full seats, so that case waits for its owner.
Keep the definition of done separate
Standards that apply to every story, such as code review, tests, accessibility checks and updated help pages, belong in the team's definition of done, written once. The Scrum Guide describes it as the state finished work must reach to meet the product's quality measures. Work that misses it can't be released2.
Acceptance criteria are the other half: what makes this one story correct. Copying team standards onto every story only buries the criteria that matter.
Before you bring a story to refinement
- One real user, one action and a reason, in a single sentence
- Small enough for one sprint, and sliced by what users see
- Every criterion uses real values and checks a visible result
- Edge cases are written down, as criteria or as questions
- Each open question has an owner and a date
- Team-wide standards sit in the definition of done, not the story
Working from a long spec? Paste it into the box at the top of this page, and River drafts the stories, the criteria and the list of open questions for you to review.
How it works
Paste your spec or PRD, and add what engineering has said if you have it. River reads every requirement, splits the work into stories a user would notice, and writes criteria with real values. Where the spec doesn't say what should happen, River doesn't guess. It lists the question, who should answer it and by when, and marks the story as not ready to estimate.
You get a story sheet with one row per story. Alongside it, a short document holds the definition of done, the open questions in priority order and the build order the dependencies force. Edit either one, share it, or ask River to draft options for the decision that unblocks the most stories.
Paste your spec
Paste or attach the PRD, design notes or feature description, plus anything engineering has already said.
River splits the work
It turns each requirement into stories a user would notice, each small enough for one sprint.
Get stories and questions
A story sheet with checkable criteria, plus every open question with an owner and a date.
Edit and share
Change anything, ask River to split a large story or draft options, then share it with your team.
What you get
- One row per story, with the user, the action, the reason and the requirement it came from
- Acceptance criteria with real values and visible results, in Given, When, Then or your chosen format
- Edge cases the spec never mentioned, like a limit reached or a missing permission, as criteria or questions
- A numbered list of open questions, each with an owner, a deadline and the stories it holds up
- A ready-to-estimate flag on every story, plus the dependencies that decide what ships first
- A short document with the definition of done, yours word for word or a proposal marked as one
Common questions
What are acceptance criteria in a user story?
Acceptance criteria are the conditions a user story must meet before the team calls it done. Each one describes a situation, an action and a result someone can check, such as which message appears when an invite link has expired. Agreed before work starts, they set the story's scope and become the basis for its tests.
What's the difference between acceptance criteria and the definition of done?
Acceptance criteria belong to one story and say what that feature must do to be correct. The definition of done covers every story the team finishes, with standards like peer review, passing tests and updated documentation. A story is complete only when it meets both, so keep the shared standards in one place instead of copying them onto every story.
How many acceptance criteria should a user story have?
There's no set number. Write enough examples to cover each rule the story depends on, including its edge cases, and stop when new ones add nothing. If the list keeps growing, the story is probably too big for one sprint. Split it along its rules, which Matt Wynne, who created Example Mapping, calls natural fault lines for slicing.
Who writes acceptance criteria?
Usually the product owner or product manager drafts them, though anyone on the team can. They only work once the people who build and test the story agree on them. Some teams hold a "three amigos" session with a product person, a developer and a tester. Each spots different gaps: the product person knows the rules, the developer knows the system, and the tester knows what breaks.
How do I write user stories and acceptance criteria with River?
Paste your spec or PRD into the box at the top of this page, and add what engineering has said if you have it. Choose a format for the criteria, or let River use Given, When, Then. It writes a story sheet and a short document into your free River workspace, with every open question and who should answer it. Estimates stay with your team.
Can I import the stories into Jira?
Yes. The story sheet has one row per story, with the summary, the story, its criteria and its dependencies in separate columns. Download it as a CSV file and map the columns in Jira's CSV import, which needs a Summary column. Open questions stay in the short document, since they need answers before they become tickets.
Is the user story acceptance criteria template free?
Yes, it is free to start. Your story sheet opens in a River workspace, where you can edit it, share it with your team or ask River to change it. Paid plans add more AI use and access to the most advanced models.
Sources
Mountain Goat Software. “User Stories: What They Are, How to Write Them, and Examples.” mountaingoatsoftware.com (opens in a new tab)
Scrum Guides. “Scrum Guide.” scrumguides.org (opens in a new tab)
Humanizing Work. “The Humanizing Work Guide to Splitting User Stories.” humanizingwork.com (opens in a new tab)
XP123. “INVEST in Good Stories, and SMART Tasks.” xp123.com (opens in a new tab)
Dan North & Associates Limited. “Introducing BDD.” dannorth.net (opens in a new tab)
Cucumber. “Reference.” cucumber.io (opens in a new tab)
Cucumber. “Introducing Example Mapping.” cucumber.io (opens in a new tab)
Built by
Chandler Supple
Co-founder & CEO, River
Chandler has spent the last six years working in AI, building tools for millions of users and Fortune 100 companies. In 2025, he co-founded River to build a new kind of operating system for AI agents.