Skip to content
Bugwise
Menu
Tutorials

User Stories and Acceptance Criteria

Learn to read user stories like a tester, write acceptance criteria in Given/When/Then, ask the right questions in refinement, and turn fuzzy requirements into rules you can actually test.

beginner Mobile & web
Short on time? Switch to the quick version.

It’s Tuesday afternoon on a fitness app team. Your lead pings you: “Refinement for Pause a workout is tomorrow at 10. Can you read the story and bring your questions? Devs want to start on Thursday.”

You open the ticket. It says: “As a runner, I want to pause my workout. It should work well.” That’s it. Where do you even start?

This lesson shows you. You’ll learn how stories and their rules are written, what a tester looks for, which questions to ask, and how to rewrite a vague line like “it should work well” into something you can test.

Why testers care about stories

Most AgileAgileA way of building software in small, frequent increments with constant feedback.Open in glossary → teams don’t write long specification documents. They describe work as small user storiesUser storyA short description of a feature from the user's point of view.Open in glossary →, each with a short list of acceptance criteriaAcceptance criteriaConditions a user story must meet to be considered done and accepted.Open in glossary →: the rules that must be true for the story to count as done.

Those criteria are the closest thing you have to a contract. They become your test casesTest caseA written set of steps, data and an expected result used to check one specific behavior.Open in glossary →, your bug evidence (“AC3 says the timer stops”) and your argument when someone says “that’s not a bug, that’s a feature”.

The essentials

The user story format

A user story is one sentence about who wants what and why:

As a runner, I want to pause my workout so that a red traffic light doesn’t ruin my time and pace.

PartAnswersTester’s angle
As a…Who?Which users, permissions and devices?
I want…What?What exactly can they do?
so that…Why?What does “working” mean for them?

The story itself is only a conversation starter. The real detail lives in the acceptance criteria.

Acceptance criteria are testable rules

Good criteria can only pass or fail. A popular format is Given / When / Then (the style of the Gherkin language):

Given I am recording a run and the timer shows 12:30
When I tap "Pause"
Then the timer stops at 12:30
And the distance stops increasing
  • Given = the starting situation
  • When = the one action
  • Then = the result you can check

Questions a tester asks in refinement

Before anyone writes code, the team meets to discuss the story (the “three amigos”: product, development, testing). Bring questions about:

  • Empty states and errors: what if there’s no data, no GPS, a failed save?
  • Limits: how long can a workout stay paused? What’s the maximum?
  • Interruptions and offline: a phone call, the app closed by the system, no network?
  • Permissions, accessibility, other platforms, analytics: who can do it, does VoiceOver read it, does the watch app need it, what do we measure?

Spot untestable criteria

Measurable

Tapping Pause stops the timer within 1 second.

Fog words

Pausing should be fast and user-friendly.

Words like fast, easy, modern, gracefully and all are warning signs. Ask: “How would we know it passed?”

Switch to Detailed at the top of the page for INVEST, rule-based vs scenario-based criteria, Definition of Ready and Done, the full “Pause a workout” example and turning criteria into test cases.

Anatomy of a user story

A user storyUser storyA short description of a feature from the user's point of view.Open in glossary → describes a small piece of value from the user’s point of view. It deliberately leaves out how it’s built. Here’s a real-looking ticket from a fitness app called FitTrack:

FIT-482StoryPause a workout3 points

The story (the conversation starter)

As a… runner using the FitTrack app

WHO: a real type of user, not "the system" or "the developer".

I want… to pause my workout

WHAT: the goal in the user’s words. No buttons, screens or tech yet.

so that… a red traffic light doesn’t ruin my pace and time

WHY: the value. It tells you what “working” really means to the user.

Acceptance criteria (the rules)

  1. AC1Tapping Pause stops the timer and the distance within 1 second.
  2. AC2Paused time is not counted in moving time or average pace.
  3. AC3Resume continues from the exact time and distance where I paused.
  4. AC4A workout paused for 60 minutes is saved and ended automatically.

Each rule can only pass or fail. That is what makes it testable, and it is exactly what you turn into test cases.

Anatomy of a user story: who, what and why, followed by four testable acceptance criteria.

The format is a template, not a law. Some teams write “In order to … as a … I want …”, others drop “so that” for obvious stories. What matters is that everyone can answer who, what and why.

Is it a good story? INVEST in one minute

Teams often check stories against INVEST. You don’t need to memorize it, but each letter hints at a testing problem:

LetterMeansWhy a tester cares
IndependentCan be built and released on its ownYou can test it without waiting for three other stories
NegotiableDetails are agreed togetherYou’re allowed to ask questions and suggest rules
ValuableGives value to a userThe “so that” tells you what really matters
EstimableThe team can size itIf nobody can estimate it, nobody can test it either
SmallFits in one sprintSprintA short, fixed period (often two weeks) in which a team builds and tests a set of work.Open in glossary →Huge stories hide huge, untested corners
TestableYou can tell when it’s doneThis one is your letter

If a story fails T, it isn’t ready. That’s not you being difficult; it’s you saving the team from building the wrong thing.

Acceptance criteria: the rules of the story

Acceptance criteriaAcceptance criteriaConditions a user story must meet to be considered done and accepted.Open in glossary → (often shortened to AC) are the conditions a story must meet to be accepted by the product owner. Good criteria are:

  • Testable: each one can clearly pass or fail.
  • Specific: real numbers, real messages, real states. “Within 1 second”, not “fast”.
  • About behavior, not implementation: what the user sees, not which database table changes.
  • Complete enough: they cover the unhappy paths too, not only the happy path.
  • Agreed before development starts, so the developer and tester aim at the same target.

Rule-based vs scenario-based criteria

There are two common styles, and many teams mix them.

StyleLooks likeBest for
Rule-based (a checklist)“Paused time isn’t counted in average pace.”Simple rules, limits, UI details
Scenario-based (Given/When/Then)A short story with a start, an action and a resultFlows, state changes, anything with “if this, then that”

Rule-based criteria are quick to write and read. Scenario-based criteria take longer but force you to state the starting situation and the exact result, which is where most gaps hide.

Given / When / Then (Gherkin)

Gherkin is a simple, structured language for writing scenarios. It’s also what tools like Cucumber use to run automated tests, but you don’t need any tool to use it. It’s just a clear way to write criteria.

KeywordMeaningTip
ScenarioA short name for the exampleOne behavior per scenario
GivenThe starting state (the precondition)Make it concrete: real data, real screen
WhenThe action the user (or the system) takesUsually exactly one action
ThenThe observable resultSomething you can see or measure
And / ButAdd more of the step aboveKeep it short; many Ands = split the scenario

Example: resuming a workout

Scenario: Resume a paused run
  Given I paused my run at 12:30 and 2.10 km
  And the run has been paused for 2 minutes
  When I tap "Resume"
  Then the timer continues from 12:30
  And the distance continues from 2.10 km
  But the 2 paused minutes are not counted in my average pace

Example: one rule, many inputs

When the same scenario needs several values, use a Scenario Outline with an Examples table. This is boundary value analysisBoundary value analysisTesting values at and just around the edges of valid ranges, where bugs love to hide.Open in glossary → written straight into the criteria:

Scenario Outline: Auto-save a long pause
  Given my run has been paused for <minutes> minutes
  Then the workout is <result>

  Examples:
    | minutes | result                         |
    | 59      | still paused                   |
    | 60      | saved and ended automatically  |

Definition of Ready vs Definition of Done

Two team agreements decide when a story can start and when it can finish. Teams word them differently, but this is the tester’s view:

Definition of Ready (before work starts)Definition of Done (before it’s called finished)
PurposeThe story is clear enough to build and testThe story is truly finished, not “done except testing”
Tester checksAC exist and are testable; designs attached; open questions answered; test data knownAll AC pass; bugs fixed or agreed; regressionRegression testingRe-running tests to check that new changes didn't break things that used to work.Open in glossary → checked; tests written or updated
If missingRaise it in refinement, don’t startThe story stays open

The acceptance criteria are specific to one story. The Definition of Done is the same for every story (for example “code reviewed, tests pass, works on iOS and Android, analytics events added”). A story is finished only when it meets both. The Definition of Ready plays a similar role to entry and exit criteriaEntry and exit criteriaConditions that must be met before a test activity can start (entry) or before it counts as done (exit).Open in glossary → in more formal test processes.

The three amigos and refinement

Refinement (sometimes called backlog grooming) is the meeting where the team discusses upcoming stories. A small version of it is called the three amigos: one person each for business (the product owner), development and testing look at a story together, usually for 15 to 30 minutes.

Each amigo brings a different question:

  • Product: what problem are we solving?
  • Development: how could we build it, and what’s hard?
  • Testing: what could go wrong, and how will we know it works?
  1. Read the story before the meeting. Twice. Underline every rule, number and message, and every word that could mean two things.
  2. Walk through it as a user. Imagine using the feature on a bus, with a weak signal, with big fonts, as a brand-new user and as a power user.
  3. Write your questions down. Use the question list below. Prioritize: you’ll only get to ask a few.
  4. In the meeting, ask and listen. Turn every answer into a new or clearer criterion on the spot. Agree on concrete examples.
  5. Afterwards, check the ticket. Were the answers actually added to the AC? A decision that only lives in someone’s memory will be forgotten.

The tester’s question list

AreaExample questions
Empty statesWhat does the screen show with no workouts yet? No GPS signal? (See empty stateEmpty stateThe screen a user sees when there is no content yet, like an empty cart or no search results.Open in glossary →.)
ErrorsWhat if saving fails? What exact error messageError messageText that tells the user something went wrong and, ideally, how to fix it.Open in glossary → appears? Is the user’s data kept?
LimitsMinimum, maximum, how long, how many? What happens at exactly the limit?
PermissionsWho can do this? What if location permission is denied? Free vs premium users?
Offline and interruptionsNo network? A phone call? The app killed by the system? (See offline modeOffline modeHow an app behaves without a connection: showing cached content, queuing actions, or explaining what's unavailable.Open in glossary → and interruptionInterruptionAnything that takes the user away from the app mid-task: a call, an alarm, a notification, low battery.Open in glossary →.)
AccessibilityDoes a screen readerScreen readerSoftware that reads the screen aloud for blind and low-vision users, like VoiceOver or TalkBack.Open in glossary → announce it? Big enough touch targetsTouch targetThe area of the screen that responds to a tap, which should be large enough for a finger.Open in glossary →? Large text?
Other platformsiOS and Android? Tablet, web, smartwatch? Lock screen controls?
AnalyticsWhich events should fire, with which data? How will we know people use it?

Worked example: “Pause a workout”

Let’s refine the FitTrack story from the start of the lesson.

Every line here is fog. “Handled correctly” how? “Work well” means what? Here are the questions the tester brought, and the answers from the product owner:

QuestionAnswer
Is paused time counted in moving time and pace?No. Total time includes it, moving time and pace don’t.
How long can a run stay paused?60 minutes, then it’s saved and ended with a notification.
What if the system closes the app while paused?Reopening restores the paused workout exactly.
Can I pause from the lock screen or watch?Lock screen: yes (iOS Live Activity, Android notification). Watch: separate story.
Does GPS keep running while paused?No, to save battery. It restarts on Resume.
What does VoiceOver/TalkBack say?“Pause workout” / “Resume workout”; state change is announced.
Analytics?workout_paused and workout_resumed, with elapsed time.

The refined criteria

Rules

  • Total time includes paused time; moving time and average pace don’t.
  • GPS tracking stops while paused and restarts on Resume.
  • The Pause button has the accessible label “Pause workout” and is at least 44×44 pt on iOS and 48×48 dp on Android.
  • workout_paused and workout_resumed events are sent with the elapsed time.

Scenarios

Scenario: Pause a running workout
  Given I am recording a run and the timer shows 12:30
  When I tap "Pause"
  Then the timer stops at 12:30 within 1 second
  And the distance stops increasing
  And I see the buttons "Resume" and "End"

Scenario: Resume after a pause
  Given I paused my run at 12:30 and 2.10 km two minutes ago
  When I tap "Resume"
  Then the timer continues from 12:30
  And moving time and average pace do not include the 2 paused minutes

Scenario: Paused for too long
  Given my run has been paused for 60 minutes
  Then the workout is saved and ended automatically
  And I get the notification "Workout saved after 60 minutes paused"

Scenario: App closed by the system while paused
  Given my run is paused at 12:30 and 2.10 km
  When the system closes FitTrack in the background and I open it again
  Then I see my paused run at 12:30 and 2.10 km with "Resume" and "End"

Scenario: Pause from the lock screen
  Given I am recording a run and my phone is locked
  When I tap "Pause" on the lock screen controls
  Then the workout pauses
  And the app shows the paused state when I unlock the phone

Notice what happened: the watch question became a separate story, not a bigger one. Splitting is a perfectly good outcome of refinement.

From criteria to test cases

Each scenario becomes at least one test caseTest caseA written set of steps, data and an expected result used to check one specific behavior.Open in glossary → (see How to Write Test Cases); limits become two (one on each side). Rules often become extra checks or a checklistChecklistA simple list of things to check, lighter and faster to use than full test cases.Open in glossary →. Here are four of them:

TC-PAUSE-001Pause stops timer and distance

Preconditions

  • FitTrack installed, location permission granted
  • A run is being recorded outdoors

Steps

  1. Wait until the timer shows about 12:30
  2. Tap 'Pause'
  3. Walk for 30 seconds
  4. Look at the timer and distance

Expected result

The timer stops within 1 second of the tap and doesn't change. The distance doesn't increase while walking. 'Resume' and 'End' are shown.

TC-PAUSE-002Paused minutes are excluded from moving time and pace

Preconditions

  • A run has been recorded for 10:00 and 2.00 km

Steps

  1. Tap 'Pause'
  2. Wait 2 minutes
  3. Tap 'Resume'
  4. Tap 'End' immediately and open the summary

Expected result

Total time is about 12:00. Moving time is about 10:00. Average pace is calculated from 10:00 and 2.00 km (5:00 /km).

TC-PAUSE-003Run paused for 59 minutes stays paused

Preconditions

  • A run is paused
  • Device time can be advanced, or a test build with a short timer is available

Steps

  1. Keep the run paused for 59 minutes
  2. Open the app

Expected result

The run is still paused and can be resumed. No notification has been shown.

TC-PAUSE-004Paused run is restored after the system closes the app

Preconditions

  • A run is paused at a known time and distance

Steps

  1. Send FitTrack to the background
  2. Make the system close it, not a force stop (on Android, for example, run adb shell am kill with the app's package name)
  3. Open FitTrack again

Expected result

The paused run is shown with the same time and distance, and 'Resume' and 'End' work.

Tip: click a test case to expand it.

The fifth case, exactly 60 minutes, completes the boundary pair with TC-PAUSE-003. Linking each case back to FIT-482 and its AC is what builds a traceability matrixTraceability matrixA table linking each requirement to the test cases that cover it.Open in glossary →.

Spotting and fixing untestable criteria

Untestable criteria nearly always hide behind a few fog words. When you see one, ask “how would we know?” and replace it with a number, a message or a state.

Fog wordAskMeasurable rewrite
fast, quicklyHow fast, on what network?“Results appear within 2 s on 4G”
user-friendly, easyEasy for whom, compared to what?“Checkout has at most 3 screens; each field has a visible label”
gracefully, properlyWhat should the user see?“Shows ‘Upload failed. Try again.’ and keeps the photo”
all, every, anyWhich ones, exactly?“iOS 17+ and Android 10+”
modern, niceCompared to what?“Matches the approved design v3”
etc., and so onWhat else, exactly?List the remaining items

Testable

Given I’m on 4G, when I search “running shoes”, then results appear within 2 seconds and a skeleton loader shows while waiting.

Untestable

Search should be fast and user-friendly.

Some qualities really are hard to pin down, like “the onboarding feels welcoming”. That’s fine: test them with people (usability sessions) and say so, instead of pretending a checklist covers it.

Common mistakes

Templates you can copy

STORY
As a <type of user>
I want <goal>
so that <value>

RULES
- <rule with a number, message or state>

SCENARIOS
Scenario: <one behavior>
  Given <starting situation with real data>
  When <one action>
  Then <observable result>
  And <another observable result>

OPEN QUESTIONS
- <question> (owner, date)

Practice: run a refinement

Time to sit in the meeting yourself. The story below is from a shopping app. Pick your questions, hear the answers, then rewrite the weak criteria.

Refinement simulator

You’re the tester in a three amigos meeting. Make the story testable.

  1. Ask
  2. Listen
  3. Rewrite
  4. Result

SHOP-219 · Apply a promo code

As a shopper, I want to apply a promo code at checkout so that I pay less for my order.

Acceptance criteria (first draft)

  • The user can enter a promo code.
  • A valid code gives a discount.
  • Invalid codes show an error.
  • It should be fast.

Step 1: The meeting has 15 minutes. Pick the 4 questions you’d ask.

Good questions uncover missing rules: errors, limits, state changes, permissions, accessibility. Selected: 0/4

Quick sorter: testable or not?

Testable or not?

Could two testers check this and always agree on Pass or Fail?

Score 0 / 10

  • “The checkout page should be user-friendly.”

  • “Password must be 8 to 64 characters long.”

  • “The map should load quickly.”

  • “If a transfer fails, the app shows “Transfer failed. No money was taken.” and the balance is unchanged.”

  • “Errors should be handled gracefully.”

  • “A profile photo can be a JPG or PNG up to 5 MB.”

  • “The app should work on all devices.”

  • “Tapping Pause stops the workout timer within 1 second.”

  • “The new design should look modern.”

  • “Only the account owner can see the Delete account button; family members can’t.”

Before you approve a story

Story review checklist

0 of 10 checked

Check your understanding

Quick quiz

0/6 answered · 0 correct

  1. 1.Which part of a user story tells you what 'working' really means to the user?

  2. 2.Which acceptance criterion is testable?

  3. 3.In Given/When/Then, what belongs in the Given?

  4. 4.In refinement, which question is the most valuable for a tester to ask?

  5. 5.What's the difference between acceptance criteria and the Definition of Done?

  6. 6.The product owner can't say how fast search must be. What should the tester do?

Key takeaways

  • A user story says who wants what and why; acceptance criteria are the testable rules that confirm it’s done.
  • Good criteria can only pass or fail: concrete data, exact messages, real numbers, written from the user’s view.
  • Given/When/Then gives every scenario a starting state, one action and a checkable result. Each Then is a ready-made expected result.
  • In refinement, ask about empty states, errors, limits, permissions, offline and interruptions, accessibility, other platforms and analytics.
  • Replace fog words (fast, easy, gracefully, all) with agreed numbers, messages or states, and never invent the numbers yourself.
  • Definition of Ready decides when a story can start, Definition of Done when it’s truly finished.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.