ManagementJunior

User Stories

A user story is a short description of a need from the user’s point of view, written to start a conversation rather than to replace one. The template is the least important part; the skill is slicing work so that every story gives a user something they can actually use, and agreeing before the work starts how everyone will know it is done. The page opens with sixteen stories as teams actually write them, what is wrong with each and the rewrite, then covers card, conversation and confirmation, acceptance criteria and example mapping, nine ways to split a story, story mapping, INVEST, spikes and points, five episodes from the format’s history, and where it degrades.

Origin
Extreme Programming, late 1990s
The 3 Cs
Card · Conversation · Confirmation
The skill
Slicing vertically

Sixteen stories as teams write them — what is wrong with each, and the rewrite

Nobody needs another explanation of “As a…, I want…, so that…”. What helps is seeing the stories that real backlogs are full of next to the version that works. Here are sixteen, each with what is wrong and a rewrite. Most backlogs contain several of them, and some contain all sixteen. Later sections cite them by number.

#As writtenWhat is wrongRewritten
1“As a user, I want to search products.”No “so that”, and “user” means everyone, so nobody can say what good enough looks like“As a returning customer, I want to find something I bought before by its name, so that I can reorder it in under a minute.”
2“As a developer, I want to upgrade the database to PostgreSQL 18.”A technical task in a story’s clothes: no user gains anything they can seeA task under the story it serves — or the effect a user notices: “order history opens in under two seconds for customers with 500 orders”
3“As the system, I want to send a confirmation email.”The system is not a user, and the reason the email exists has gone missing“As a customer who has just paid, I want an email with the order and the delivery date, so that I know the payment went through.”
4“As a customer, I want a dropdown of saved cards on the payment page.”The solution is written into the story, so there is nothing left to negotiate“As a returning customer, I want to pay with a card I have used before without typing it again, so that paying takes seconds.”
5“Search API” and “Search UI” as two storiesHorizontal slices: neither half works alone, and neither can be shown to anyone“Find a product by its exact name” — thin, but through every layer, and it can ship
6“As a customer, I want to manage my saved searches.”“Manage” hides four operations and at least a sprintCreate, then view, then rename, then delete — four stories, each usable on its own
7“As a customer, I want to check out.”An epic written as a story; it will be carried over twiceSplit by workflow step — address, delivery, payment, confirmation — with the simplest path through all four first
8“Support all payment methods.”Variations bundled into one item, so the most-used method waits for the least-used oneCards first; then each other method as its own story, in order of its share of orders
9A story with no acceptance criteria“Done” is negotiated at the review, under time pressureThree to seven criteria, agreed before the story enters a sprint
10“Search must be fast.”Untestable: fast for whom, measured how?“95% of searches return results in under 300 ms with 10,000 products in the catalogue.”
11Fifteen acceptance criteria on one cardA split nobody made: the criteria are really several storiesGroup the criteria by rule; each group becomes its own story
12“The Apply button is green and sits to the right of the field.”It describes the screen, not the behaviour, and breaks the day the design changes“Given an expired promo code, when the customer applies it, then it is rejected and the message names the expiry date.”
13“Investigate payment providers.”A spike with no question and no time box, which turns into a side project“Spike, two days: can provider X refund part of a payment through its API? Output: a written yes or no, with a test call.”
14“As a customer, I want the cart total to be correct.”A bug dressed as a feature; it inflates the count of value deliveredA defect report — steps, expected, actual — fixed without a story
15“As a user, I want the site to be secure.”A quality that applies to every story, written as if it were oneA constraint: in the Definition of Done if it applies everywhere, or a criterion on the stories it touches — “a session ends after 30 minutes idle”
16A flawless card, written by one analyst and handed to the teamThe conversation skipped by construction: the format survives, the mechanism does notThe same card discussed by product, development and testing before it enters a sprint

Card, conversation, confirmation — what a story actually is

Stories came out of , the method Kent Beck and his colleagues worked out in the late 1990s, largely on a payroll project at Chrysler. A need was written on an index card in a sentence or two, and the detail was settled by talking to a customer who sat with the team. The card was small on purpose: it could not hold a specification, so nobody could pretend it was one.

On 30 August 2001 Ron Jeffries named the three parts. The Card holds “just enough text to identify the requirement, and to remind everyone what the story is”. The Conversation is where the requirement actually passes from the customer to the programmers, over time — when the story is estimated and again when it is planned. The Confirmation is the acceptance test: how the customer will know the team has done what was needed. All three are required. A card with no conversation is a badly written specification; a conversation with no confirmation is a disagreement waiting for the review.

The familiar template — “As a [role], I want [capability], so that [benefit]” — was not part of the idea. It was a house style at Connextra, a London company, shared with the XP community in 2001, and Mike Cohn’s book of 2004 made it the default. It is a good default. It is also optional, and three alternatives are worth knowing.

FormatShapeCentres onFits when
ConnextraAs a …, I want …, so that …Who, and what they wantThe users are known and differ in what they need
GOV.UK user needAs a …, I need to …, so that …A task the person must completeThe service is an obligation rather than a choice: tax, benefits, permits
Job storyWhen …, I want to …, so I can …The situation that triggers the needYou know when the need arises better than who has it
Plain title“Reorder from order history”The capabilityThe team and the product owner talk daily, and the why is obvious to both

Detail arrives just in time

A story is deliberately under-specified when it is written, and it gains detail as it rises towards the top of the backlog. Items for the next sprint or two are small, have their acceptance criteria and have been talked through. Items for the next few months are features with a rough size. Everything further down is an in a single line. Roman Pichler’s name for a backlog in this shape is DEEP: detailed appropriately, estimated, emergent and prioritised.

A healthy backlog is detailed according to position. The items for the next sprint or two are small stories with acceptance criteria that the team has already talked through. The items for the next few months are features with a rough size and no criteria yet. Everything further down is an epic in a single line. Refinement moves items up and splits them as they rise. Detail written for the bottom of the list is wasted, because the plan will change before anyone builds it.

The shape is an economic decision rather than a style. Detail written for the bottom of the list is written for a plan that will change before anyone builds it, and it has to be rewritten or quietly ignored. Detail missing at the top means the sprint starts with questions nobody can answer. Some teams protect the top with a Definition of Ready — a checklist a story must pass before it may enter a sprint. Used as a reminder it helps. Used as a gate, as Mike Cohn has warned, it turns a conversation back into a hand-off and the team back into a stage of a waterfall.

Acceptance criteria — the third C

The third C is the one most often dropped (row 9). Acceptance criteria are not bureaucracy; they are the answer to “how will we know?”, agreed before the work starts rather than argued about at the review. They are also the cheapest bug prevention there is: most of what a tester finds in the first hour is a case nobody discussed.

Two formats cover almost everything. A checklist is a plain list of conditions that must hold: fast to write, easy to read, and the right default for simple stories. Given/When/Then states a starting state, an action and an expected result. Dan North and Chris Matts worked it out from late 2004, to give analysts, testers and developers one vocabulary, and North published it in March 2006. It forces you to name the precondition, and it turns directly into an automated test.

Three rules keep them useful. Keep them few: three to seven per story is normal, and fifteen means the story is really two or three (row 11). Make them about behaviour, not the screen: a criterion that names a button’s colour fails the day the design changes and still tells nobody what the button should do (row 12). And keep them measurable: “fast” is not a criterion, “95% under 300 ms” is (row 10).

Acceptance criteriaDefinition of Done
Applies toOne storyEvery story
SaysWhat this story must doWhat “finished” means for any work here
ExampleAn expired code is rejected and the message names its expiry dateCode reviewed, tests pass, deployed to staging, docs updated
Written byProduct owner with the team, per storyThe team, once, revised rarely
A quality like security goes here whenIt affects only some stories (row 15)It applies everywhere

Example mapping — the conversation made visible

The most useful technique for writing criteria is also the one that most directly restores the conversation (row 16). Matt Wynne, who leads the Cucumber project, described it on 8 December 2015. Three or four people — someone from product, development and testing — take one story and four colours of card. The story goes on a yellow card. Each rule it must follow goes on a blue card. Under each rule go green cards with concrete examples. Any question nobody in the room can answer goes on a red card, to be taken away.

Example mapping lays one story out in four colours. The story, Apply a promo code, is on a yellow card. Its three rules are on blue cards: one code per order, expired codes are rejected, and the basket must be at least 20 euros. Under each rule are green cards with concrete examples, such as a basket of 19.99 euros being refused. Two questions nobody in the room could answer, about partner codes and sale items, are on red cards. Many red cards mean the story is not ready; many blue cards mean it is too big and should be split. A well-understood story maps in about 25 minutes.

The table that results is the diagnosis. A well-understood, well-sized story maps in about 25 minutes, by Wynne’s estimate. A table covered in red cards means the story is not ready: there is more to learn before anyone should build it. A table covered in blue cards means the story is too big, and each rule is a candidate for its own story (row 11). A rule with a long column of green examples is probably several rules. And the blue and green cards, once the questions are answered, are the acceptance criteria — written by the people who will have to meet them.

Slicing — vertically, and nine ways to do it

This is the single skill that decides whether stories help at all. A vertical slice cuts through every layer — interface, logic, storage — and produces something a user can do. A horizontal slice cuts by technical layer and produces nothing anyone can use until the last layer lands (row 5).

Cut horizontally, each story is one technical layer — UI, API, domain, data — and nothing works until the final layer is done, so all feedback arrives at the end. Cut vertically, each story passes through every layer and delivers something a user can do, so each slice can ship and be learned from on its own.

Horizontal slicing is tempting because it matches how teams are often organised and because it feels efficient: the database specialist does the database part, once, properly. It fails for a reason that has nothing to do with efficiency. Nothing is releasable until every layer is finished, so all the feedback arrives at the end, no estimate can be checked until then, and a slip in the last layer wastes all the layers below it.

Nine patterns for splitting a story

On 28 October 2009 Richard Lawrence published nine patterns for splitting stories, and they are still the most complete set. Try them roughly in this order; the first one that produces two stories each worth having is usually the right one.

#Split byWorked example
1Workflow stepsCheckout: the simplest path from address to confirmation first; extra steps — gift wrapping, delivery slots — as later stories (row 7)
2Business rule variationsDiscounts: a flat percentage now; volume tiers, expiry dates and stacking rules as three more stories
3Major effortPayments: the first card type carries all the integration work; the others are then small. Split as “one card type”, then “the rest”
4Simple / complexSearch: exact name first; typos, synonyms and ranking as later stories
5Variations in dataImport: CSV first, then Excel, then the bank’s fixed-width format (row 8)
6Data entry methodsDate of birth: a plain text field now; the calendar picker later
7Defer performanceA report correct at 100 rows now; “100,000 rows in under two seconds” as its own measurable story
8Operations (e.g. CRUD)Saved searches: create, view, rename, delete (row 6)
9Break out a spikePartial refunds: a two-day spike on whether the provider’s API can do them, then the story (row 13)

When several patterns work, Lawrence’s later guide offers two tie-breakers. Prefer the split that lets you deprioritise or throw away one of the halves, because that is the split that reveals what the work was not worth. And prefer the split that gives stories of roughly equal, small size, because that is what makes counting them a forecast.

Story mapping — keeping the journey whole

A flat backlog of well-sliced stories has one structural flaw: it loses the shape of the user’s journey. Read fifty ordered cards and you cannot tell whether the top twenty add up to something a person can complete. Jeff Patton’s story map, which he described on 8 October 2008 and later in a book, fixes that by laying stories out in two dimensions instead of one.

Across the top runs the backbone: the things a user does, left to right, in the order they do them — browse, choose, pay, track. The backbone is not prioritised; it simply is. Beneath each step hangs a column of stories, ordered top to bottom by how necessary they are. The map is then sliced horizontally. The top row across every column is the thinnest version of the journey that works end to end — the walking skeleton, a term Patton borrows from Alistair Cockburn — and each row below it is a later release that makes the same journey better.

A story map lays the user's journey across the top: browse, choose, pay and track. Under each step hang its stories, and dashed lines slice the map into releases. Release 1, the walking skeleton, takes one card from every column — a category list, a product page, card payment and an order email — so a customer can complete the whole journey. Releases 2 and 3 improve the same journey with search, reviews, saved cards, filters and more. The top four items of a flat backlog could all sit under one step, leaving a release in which nobody can pay.

The value is in what the shape makes obvious. A gap in the backbone is a step nobody thought about. A column with fifteen cards next to columns with two is where the team has over-invested. And a first release chosen by taking the top row is guaranteed to be usable, whereas a first release made of the top twenty items of a flat list usually is not. Patton’s own image for the risk the map removes: building a car feature by feature, you can end up releasing one without brakes.

INVEST, spikes and what points are for

On 17 August 2003 Bill Wake gave the checklist that is still quoted: a good story is Independent, Negotiable, Valuable, Estimable, Small and Testable. His own wording is more useful than the acronym, so here it is beside the symptom of each letter failing.

LetterWhat Wake meantFails when
IndependentStories do not overlap and can be scheduled and built in any orderIt cannot start until three others finish
NegotiableNot an explicit contract for features; the details are worked out together during developmentThe card dictates the implementation (row 4)
ValuableValuable to the customer, not just to anybody“Set up the database schema” (row 2)
EstimableCan be estimated well enough for the customer to rank and schedule itToo much is unknown — it needs a spike first (row 13)
SmallAt most a few person-weeks of workIt has been carried over twice (row 7)
TestableWhoever writes the card understands it well enough to write a test for it“Make the app intuitive” (row 10)

INVEST is a smell test, not a gate. A story that fails one letter deserves a second look, not automatic rejection: dependent stories exist, and sometimes the honest answer is to build them in order. The letter to take seriously every time is Testable. Wake put it as a promise the card makes — “I understand what I want well enough that I could write a test for it” — and if nobody can say what would prove a story done, no amount of rewriting the other five will save it. Note also that Wake’s “small” is a few person-weeks; teams now aim much smaller, a few days, because a story that takes the whole sprint has nothing left to absorb a surprise.

When a story is not estimable: the spike

Sometimes a team cannot size a story because the unknown is technical: will this library handle our volume, can the provider’s API do partial refunds at all. The answer is a spike — a separate, time-boxed investigation whose deliverable is knowledge, not working software. Two rules keep spikes honest (row 13). The question and the time box are fixed in advance, and the box is not extended: if two days were not enough, that is itself the finding. And a spike ends in a decision written down somewhere, or the same question is investigated again next quarter by whoever inherits the code.

Points, and what they are not for

are a relative size, not a duration: this story is about twice that one. They began, by Ron Jeffries’ account, as “ideal days” — a pair’s uninterrupted day — and were renamed points when people kept confusing ideal days with calendar days. , points finished per sprint, is then a forecasting input for the team that produced it and for nothing else; it is not comparable between teams and it is not productivity, because any team measured on it can double it in two sprints without changing what it delivers. The Estimation page covers the units and their arithmetic.

Five episodes, and what each one changed

The format has a short, well-documented history, and most of what goes wrong with stories today was noticed by the people who shaped it.

EpisodeWhat happenedWhat it changed
C3 at Chrysler, 1996–2000Stories on index cards, with a customer beside the team; the payroll paid about 10,000 people from 1997 and was cancelled in February 2000The conversation depends on a person with time for it (row 16)
Connextra, 2001A London team’s house style — role, goal, benefit — shared with the XP communityThe template is a convention, not the definition (rows 1–4)
North and Matts, 2004–2006Given/When/Then, to give analysts, testers and developers one vocabularyConfirmation became something a machine could run (rows 9–12)
GOV.UK, 2012–2013“I need to” instead of “I want”, and needs kept in their own tool, linked to the pages that meet themA need outlives the stories that serve it (row 4)
Ron Jeffries, 2019“I may have invented story points, and if I did, I’m sorry now”Slice small enough and you may not need to estimate at all

C3 is the episode advocates tell least often, and the most instructive. The Chrysler Comprehensive Compensation project began in 1993 and had not paid anyone when Kent Beck arrived in 1996. Under the practices that became Extreme Programming — stories on cards, a customer in the room, short releases — it went live in 1997 and paid about 10,000 monthly-salaried staff. It was meant to pay 87,000. New development stopped in 1999, and DaimlerChrysler cancelled the project in February 2000. The detail worth keeping is about the conversation: the customer representative, the person the stories depended on, left burnt out and was not replaced. Stories put the requirement in a person’s head rather than in a document. That is their strength, and it means the method needs that person, with time, for as long as the work lasts.

Where it degrades

Stories rarely fail because the sentence was badly formed. They fail when the format survives and the mechanism behind it — the conversation, the confirmation, the thin slice — quietly stops. Almost every such failure is one of these:

  • The template applied to technical tasks, so “As a developer, I want a migration” fools nobody and hides the user effect (row 2).
  • The “so that” dropped, which removes the only reason a story is negotiable (row 1).
  • Cards written in full detail by one person, so the conversation never happens (row 16).
  • Horizontal slices — API, UI, database — called stories, so nothing ships until the sprint’s last day, or the next sprint’s (row 5).
  • No acceptance criteria, so “done” is negotiated at the review under time pressure (row 9).
  • Given/When/Then written as scripts of clicks, which break with every redesign and say nothing about behaviour (row 12).
  • A Definition of Ready used as a gate, which turns the conversation back into a hand-off.
  • The whole backlog detailed up front, so most of the detail is rewritten or ignored before anyone builds it.
  • Story points treated as a productivity target, which inflates estimates rather than output.
  • Bugs and quality constraints dressed as stories, which makes the backlog look like progress (rows 14–15).

The honest limit is that a story can only carry a need someone has actually understood. The format makes it easy to write down a guess in the voice of a user — “As a customer, I want…” — and the guess then looks like evidence. Nothing in the template checks whether any customer wants it. That check lives elsewhere, in discovery and in what users do after a release; a backlog of perfectly formed stories can describe, slice and confirm a product nobody needed.

The practical check takes fifteen minutes. Open the current sprint and read the titles: can each one ship on its own (row 5)? Count the stories without a reason (row 1) and without acceptance criteria (row 9). Find the three oldest items at the top of the backlog and ask who last talked about each one with somebody from product. And look at the bottom: if items there have detailed acceptance criteria, the team is writing detail for a plan that will change.

When to use it

Use it when

  • Work can be described by what a user will be able to do afterwards.
  • The team and the person who decides can actually talk — the conversation is the deliverable.
  • You can release small slices and learn from them.
  • Requirements will keep changing, so a negotiable format beats a fixed specification.

Avoid it when

  • The work has no user-visible outcome — a library upgrade is a task, not a story.
  • A regulator or a contract requires a formal, signed specification instead.
  • Nobody is available for the conversation, which leaves only the weakest third of the format.
  • The template is applied to pass a process check rather than to clarify a need.

Sources and method

What this page stands on

  • 17 sources
  • Checked October 13, 2026

Researched with Claude. Finding and cross-checking the primary sources was done with Claude (Anthropic). Selection, writing and fact-checking: the Anatomy of IT Product editors.

Found this useful?

Share it with someone who is working on the same problem.