User Stories

A user story is a short description of a feature from the point of view of the person who wants it. The usual form has three parts: As a [role], I want [goal], so that [benefit]. For example: "As a customer waiting for a delivery, I want an SMS when my order is out for delivery, so that I can be there to receive it." Many agile teams write most of their backlog items as stories, and for a tester they are a main part of the test basis.

The sentence alone is not the whole requirement. A story becomes complete through conversation between business, development and testing, and through its acceptance criteria, which say how the team will know the story is done. This lesson covers the format, the 3 Cs and the INVEST qualities, how to split a story that is too big, and what a tester does with a story in refinement.

Why it matters

A story is short on purpose, so what it leaves out is decided in conversations. When the tester is not part of them, the gaps show up late: during testing, as defects or as arguments about what the story meant. A story that is too big has another cost: it is finished in the last days of the iteration, and its testing is squeezed or moved to the next one.

For a tester, stories are the earliest point of influence. Asking "how will we know this works?" while the story is still a card is static testing at its cheapest: a vague benefit or a missing rule costs one question now, and a reopened story and a reworked feature later. Small, testable stories also make test design easier: each one has clear acceptance criteria, known test data and a clear moment when it is done.

The story format and the 3 Cs

The ISTQB Foundation syllabus describes the most common format: As a [role], I want [goal], so that [benefit], followed by acceptance criteria. It also uses Ron Jeffries’ 3 Cs, three aspects that together make a story: the Card, the Conversation and the Confirmation. The Card is the medium that holds the story, a paper index card or an entry on an electronic board or tracker, and it carries the one sentence with its role, goal and benefit. Each part gives a tester something to work with:

  • Card, role: who uses the feature. It tells you which user, and which permissions, to test with.
  • Card, goal: what the user wants to achieve, not how the screen should look. It becomes the main path you test.
  • Card, benefit: why the user wants it, so that you can judge whether the feature meets the need. In the example below: is an SMS sent at the moment the order leaves the depot early enough for the customer to get home?
  • Conversation: the discussion in which the details are agreed, spoken or written. The card is short on purpose, and decisions that are not written back onto it are lost by the time the story reaches testing.
  • Confirmation: the acceptance criteria that say when the story is done. They are the starting point of your test cases; the next lesson covers how to write them.
STORY-214  Delivery SMS
As a customer waiting for a delivery,
I want an SMS when my order is out for delivery,
so that I can be there to receive it.

Conversation (decisions written back after refinement)
- Send the SMS to the phone number on the order, not the one on the account.
- Send it in the language the order was placed in (Arabic or English).
- If the status is set twice, send one SMS only.

Confirmation (acceptance criteria)
AC1  When the order status changes to "Out for delivery", one SMS is sent
     to the phone number on the order within 2 minutes.
AC2  The SMS contains the order number and the delivery time window.
AC3  Orders collected from a store get no delivery SMS.
Anatomy of the delivery-SMS story: the card gives the role, goal and benefit, the conversation adds the decisions, and the confirmation is the acceptance criteria.
Part of the storyIn the delivery-SMS storyWhat it gives the tester
RoleCard · “As a …”A customer waiting for a deliveryWhich user and which permissions to test with
GoalCard · “I want …”An SMS when the order is out for deliveryThe main path to test, not a screen design
BenefitCard · “so that …”Be there to receive the orderWhether the feature meets the need: is the SMS early enough to get home?
ConversationThe second CPhone number on the order, language of the order, one SMS onlyDecisions to write back onto the story before testing
ConfirmationThe third CAcceptance criteria AC1 to AC3When the story is done: the starting point of the test cases

Try it: User Story → Test Scenarios

INVEST: six questions for a good story

INVEST is an acronym from Bill Wake, also used in the ISTQB syllabus, for six qualities of a good story. Use the letters as questions in refinement, not as a form to fill in. Each of them matters for testing.

Testable is the quality a tester is best placed to judge. The syllabus notes that when stakeholders do not know how to test a story, the story may be unclear, may not reflect something valuable to them, or they may simply need help with testing. Each of these is worth finding out before the story is built.

  • Independent: can it be built, tested and released without waiting for another story? Dependencies decide the order of testing and the test data you need.
  • Negotiable: it states a need, not a fixed design. The details are agreed in conversation, so ask before you assume.
  • Valuable: a user or customer gets something from it. A "story" that delivers nothing on its own, such as a database table, cannot be tested from the user’s side.
  • Estimable: the team can size it, testing included. If nobody can say how it will be tested, it usually cannot be estimated either.
  • Small: it fits comfortably into one iteration together with its testing. Big stories push testing into the last days.
  • Testable: there is a way to decide that it is done. Words such as "fast", "easy" or "better" need a measurable meaning before work starts.

Try it: AI Requirement Ambiguity Detector

Splitting a story that is too big

A story too big to finish in one iteration is often called an epic. Split it so that each smaller story is still a vertical slice: it passes through every layer the feature needs, from the screen through the API to the database, and gives a user something they can try.

Take the epic "As a customer, I want to return items online, so that I get my money back without calling support." Split by layer, it becomes a returns table, a returns API and a returns screen: no user can try any of them, nothing can be tested end to end until all three are done, and integration defects appear at the end. Split into slices, the first story is "return a whole delivered order and refund the original payment method": small but complete, so it can be tested as soon as it is done, and the layers meet in the first story. Useful ways to split:

The online-returns epic split by layer gives three stories nobody can try or test end to end until all are done; split into vertical slices, each story can be tested as soon as it is done.

Split by layerAvoid

Database, API and screen as separate stories

Can a user try the first story?:
No
Testable end to end:
Only after all three stories are done
Integration defects appear:
At the end, when the layers meet
  • Returns table in the database
  • Returns API
  • Returns screen

Split into vertical slicesPrefer

Each story runs from the screen to the database

Can a user try the first story?:
Yes: a whole order can be returned
Testable end to end:
Each story, as soon as it is done
Integration defects appear:
In the first story
  • Return a whole delivered order, refund the original payment method
  • Return selected items from an order
  • Refuse late and gift-card returns, with the reason
  • By workflow step: deliver the simplest end-to-end path first and add the other steps later, for example request a return now and book a courier pickup in a later story.
  • By business rule: one rule, or one variation of a rule, per story, for example a whole order first, then selected items, then the refusals for late returns and gift cards.
  • By path: the main success path first, then each error or exception path as its own story with its own acceptance criteria, planned rather than left for "later, if there is time".
  • By data or channel: one payment method, file type or platform first, and the others in follow-up stories.
  • By operation: create, view, change and delete as separate stories when each one is useful on its own.
  • Spike: when the team cannot estimate because something is unknown, such as an external API, a short time-boxed investigation finds the answer, and the real story is written afterwards. A spike produces knowledge, not a feature to test.

Worked example: the tester in refinement

The product owner brings the returns epic to refinement. Beforehand, the tester has read it together with the returns rule BR-03 from the lesson on business rules (returns within 14 days of delivery, never for gift cards) and the courier company’s API notes. In the meeting the tester checks the epic against INVEST and raises the points listed below.

The team then agrees the split shown after the list. The tester checks that each new story can be tested on its own, that RET-3 keeps the "otherwise" outcome of BR-03, and that the test data is known: orders delivered 14 and 15 days ago, and an order that contains a gift card. The answers are written into the stories, and each story gets acceptance criteria before it counts as ready.

  • Not Small, not Estimable: the epic hides item selection, partial refunds, two refund methods, courier pickup and refusals.
  • Not Testable as written: "get my money back" says neither how much nor by when. Is the delivery fee refunded?
  • Not Independent: pickup depends on a courier API that nobody on the team has used.
  • Open questions: from which moment do the 14 days start, and in which time zone? Can a customer cancel a return? What does the customer see while the refund is pending?
Epic: Online returns
RET-1  Return a whole delivered order; refund to the original payment method
RET-2  Return selected items from an order; refund only those items
RET-3  Refuse returns after 14 days or for gift cards, and show the reason
RET-4  Spike, 2 days: can the courier API book pickups? Write RET-5 from the answer
RET-5  Book a courier pickup for a return
RET-6  Refund to the in-app wallet instead of the card

Decisions recorded in the stories:
- The delivery fee is refunded only when the whole order is returned.
- The 14 days start at the delivery scan, in Saudi Arabia time (UTC+3).

Try it: Acceptance Criteria Generator Try it: User Story → Test Cases

Common mistakes

  • Treating the one-sentence card as the whole requirement, or leaving refinement decisions in people’s heads and chat threads, so that they are missing when the story reaches testing.
  • Accepting a vague or missing benefit ("so that it works better"): without it nobody can judge whether the delivered feature meets the need.
  • Calling technical tasks user stories ("As a developer, I want a returns table"): they deliver nothing a user can try and cannot be tested from the user’s side.
  • Splitting by layer or by activity, such as a "build" story and a "test" story, instead of into vertical slices that can each be tested end to end.
  • Letting "happy path first" become "happy path only": error paths, refusals and non-functional needs are split into later stories that are never planned.
  • Waiting until a story arrives in testing to say that it is not testable, instead of raising it in refinement while it is still cheap to change.

The QA perspective

On most agile teams the product owner owns the stories, but the ISTQB Foundation syllabus describes writing them collaboratively, with the business, development and testing perspectives together; as the lesson on agile for testers showed, many teams call this the three amigos. The tester’s contribution is specific: read the story and its linked rules, designs and contracts before refinement; bring questions and concrete examples; check the INVEST qualities aloud, especially Testable and Small; and propose splits along lines that can be tested on their own.

After refinement, make sure every decision is written into the story, not left in a chat thread, and that the story meets the team’s Definition of Ready before it enters an iteration. Note the test data and environments the story needs, link it to its business rules and later to its test cases, and draft test conditions from the acceptance criteria. When a story still reaches testing with gaps, record them on the story itself, so that the next refinement improves.

Practice exercise

Review and split a story before refinement

Your task

You test a supermarket delivery app, and refinement is tomorrow. The product owner has written the story below. Check it against INVEST, rewrite the card, split it into vertical slices and prepare the questions you will ask in the meeting.

Material
As a user, I want to create shopping lists, share them with my family
and get suggestions from my past orders, so that shopping is better.
Steps
  1. Name the role, the goal and the benefit, and say what is weak about each.
  2. Go through the six INVEST letters and note every problem you find.
  3. Split the story into vertical slices that can each be tested on their own.
  4. Write at least four questions for the product owner.
Show the model answer
Model answer

Role, goal and benefit: "user" is too general; the role is the person who plans the household’s shopping, and sharing adds a second role, the family member who receives a list. The goal joins three features with "and". The benefit "shopping is better" cannot be checked; a usable version is "so that I can order everything I need in one go".

INVEST: not Small (three features); not Estimable (nobody knows yet whether past orders are enough data for useful suggestions); not Testable ("better" has no meaning to check, and there are no acceptance criteria); only partly Independent (sharing needs lists, and suggestions need order history). Valuable and Negotiable are acceptable once the benefit is rewritten.

A possible split: (1) As a household shopper, I want to create a list and add products from the catalogue, so that I can plan my next order. (2) As a household shopper, I want to turn a list into a cart in one step, so that I can order faster. (3) As a household shopper, I want to share a list with a family member who has an account, so that they can add what they need. (4) A time-boxed spike: can past orders produce useful suggestions? The suggestions story is written from its answer. Story 1 comes first, because the other two need a list; after it, stories 2 and 3 do not depend on each other, and each can be built, tested and released on its own.

Questions: Is there a maximum number of lists, or of products in a list? What happens to a listed product that goes out of stock or changes price? Can a family member delete the list, or only add to it? What happens to a shared list when its owner closes the account? Are product names shown in both Arabic and English?

Frequently asked questions

Who writes user stories: the product owner or the tester?

Usually the product owner owns and orders them, though anyone on the team can draft one. The ISTQB Foundation syllabus describes collaborative writing with business, development and testing perspectives. The tester rarely writes the card, but often shapes the conversation and the acceptance criteria.

Is a user story a requirement?

Yes, a short form of a user or stakeholder requirement. The sentence alone is not enough to test from: the test basis is the story together with its acceptance criteria, the decisions recorded from the conversation, and any linked business rules, designs and API contracts.

Must every story use the "As a / I want / so that" template?

No. It is the most common format, not a rule, and the Scrum Guide does not require user stories at all. What matters is that the item says who it is for, what they need and why, and how the team will confirm that it is done.

How small should a story be?

Small enough that the team can build and test it to its Definition of Done within one iteration, and preferably well within it, so that testing does not pile up at the end. A practical sign: if you cannot list its acceptance criteria and test data in a few minutes, it is probably still too big.

References

Practise with Mutqan tools

Convert a user story (As a / I want / So that) into structured test cases using templates and heuristics.

Test Design

Detect ambiguous, vague or contradictory statements in requirements and get clarifying questions from Mutqan AI.

Requirement Analysis AI

Go deeper

Your progress on this topic

Part of the QA Roadmap