User Stories
A user story is a placeholder for a conversation about user value, not a specification. Write it small, talk it through, confirm it with acceptance criteria, and slice it vertically so every story ships usable value end to end.
Essentials
- Check every story against INVEST - Independent, Negotiable, Valuable, Estimable, Small, Testable, see references/invest-and-smart.md
- Treat the story as the 3 Cs - a Card invites a Conversation, confirmed by a Confirmation test, see references/three-cs.md
- Write who / what / why, then acceptance criteria - "As a / I want / so that" plus acceptance criteria, see references/template-and-acceptance-criteria.md
- Split a too-big story vertically - SPIDR for a quick set, the splitting flowchart for the full decision tree, see references/splitting-spidr.md and references/splitting-flowchart.md
- Refine the backlog continuously - break items down until each is doable within one sprint and ready, see references/backlog-refinement.md
Gotchas
- A walking skeleton is production code with tests linking the main components end to end, not a throwaway prototype or a research spike.
- Never split horizontally ("build the DB", "build the API", "build the UI"); those are tasks/components. Every story is a thin vertical slice.
- A Spike yields knowledge, not shippable value, so it is a last-resort move, not itself a vertically-sliced story.
- The template is a conversation starter, not a mandatory format, no method prescribes a fixed story format.
- Acceptance criteria can later be written as Given-When-Then for automation. That notation is owned by bdd-guide.
- Backlog refinement is an ongoing activity, not a fixed weekly "grooming meeting"; sizing is the Developers' responsibility.
Example
As a rider, I want to pay for my completed trip
so that I can leave the cab without handling cash.
INVEST: Valuable (rider), Negotiable (method TBD), Testable. Too big → split.
Split (SPIDR): Rules (auto-charge saved card; defer split-fare/surge)
Data (one currency first) · Path (card, then wallet, then cash-tip)
Interface (plain "paid" screen first; animated receipt later)
First thin vertical slice (walking skeleton):
request trip → match driver → charge saved card → show "paid"
(touches dispatch + payment + UI end to end)
Acceptance criteria (the Confirmation):
happy valid card charged, receipt shown
boundary zero-distance trip = minimum fare
error declined card blocks trip end, prompts retry
Progressive Disclosure
- Read references/invest-and-smart.md - Load when evaluating a story against INVEST or breaking it into SMART tasks
- Read references/three-cs.md - Load when explaining the Card / Conversation / Confirmation model of a story
- Read references/template-and-acceptance-criteria.md - Load when writing the story sentence or its acceptance criteria
- Read references/splitting-spidr.md - Load when splitting a story with the five SPIDR techniques
- Read references/splitting-flowchart.md - Load when splitting with the full pattern flowchart or slicing vertically
- Read references/backlog-refinement.md - Load when refining the backlog and deciding when an item is ready
1---2name: user-stories-guide3description: Use when writing, evaluating, splitting, or refining user stories: applying INVEST, the 3 Cs (Card / Conversation / Confirmation), the 'As a / I want / so that' template, writing acceptance criteria, slicing vertically into a walking skeleton, splitting with SPIDR or the splitting-pattern flowchart, and refining the backlog into ready items. Triggers on user story, INVEST, story splitting, SPIDR, vertical slice, walking skeleton, acceptance criteria, 'As a... I want... so that...', 3 Cs, backlog refinement / grooming, SMART tasks, even when the user doesn't say 'user story'.4---56# User Stories78A user story is a placeholder for a conversation about user value, not a specification. Write it small, talk it through, confirm it with acceptance criteria, and slice it vertically so every story ships usable value end to end.910## Essentials1112- **Check every story against INVEST** - Independent, Negotiable, Valuable, Estimable, Small, Testable, see [references/invest-and-smart.md](references/invest-and-smart.md)13- **Treat the story as the 3 Cs** - a Card invites a Conversation, confirmed by a Confirmation test, see [references/three-cs.md](references/three-cs.md)14- **Write who / what / why, then acceptance criteria** - "As a / I want / so that" plus acceptance criteria, see [references/template-and-acceptance-criteria.md](references/template-and-acceptance-criteria.md)15- **Split a too-big story vertically** - SPIDR for a quick set, the splitting flowchart for the full decision tree, see [references/splitting-spidr.md](references/splitting-spidr.md) and [references/splitting-flowchart.md](references/splitting-flowchart.md)16- **Refine the backlog continuously** - break items down until each is doable within one sprint and ready, see [references/backlog-refinement.md](references/backlog-refinement.md)1718## Gotchas1920- A walking skeleton is **production code with tests** linking the main components end to end, not a throwaway prototype or a research spike.21- Never split horizontally ("build the DB", "build the API", "build the UI"); those are tasks/components. Every story is a thin **vertical** slice.22- A Spike yields **knowledge, not shippable value**, so it is a last-resort move, not itself a vertically-sliced story.23- The template is a conversation starter, not a mandatory format, no method prescribes a fixed story format.24- Acceptance criteria can later be written as Given-When-Then for automation. That notation is owned by **bdd-guide**.25- Backlog refinement is an **ongoing** activity, not a fixed weekly "grooming meeting"; sizing is the Developers' responsibility.2627## Example2829```text30As a rider, I want to pay for my completed trip31 so that I can leave the cab without handling cash.3233INVEST: Valuable (rider), Negotiable (method TBD), Testable. Too big → split.34Split (SPIDR): Rules (auto-charge saved card; defer split-fare/surge)35 Data (one currency first) · Path (card, then wallet, then cash-tip)36 Interface (plain "paid" screen first; animated receipt later)3738First thin vertical slice (walking skeleton):39 request trip → match driver → charge saved card → show "paid"40 (touches dispatch + payment + UI end to end)4142Acceptance criteria (the Confirmation):43 happy valid card charged, receipt shown44 boundary zero-distance trip = minimum fare45 error declined card blocks trip end, prompts retry46```4748## Progressive Disclosure4950- Read [references/invest-and-smart.md](references/invest-and-smart.md) - Load when evaluating a story against INVEST or breaking it into SMART tasks51- Read [references/three-cs.md](references/three-cs.md) - Load when explaining the Card / Conversation / Confirmation model of a story52- Read [references/template-and-acceptance-criteria.md](references/template-and-acceptance-criteria.md) - Load when writing the story sentence or its acceptance criteria53- Read [references/splitting-spidr.md](references/splitting-spidr.md) - Load when splitting a story with the five SPIDR techniques54- Read [references/splitting-flowchart.md](references/splitting-flowchart.md) - Load when splitting with the full pattern flowchart or slicing vertically55- Read [references/backlog-refinement.md](references/backlog-refinement.md) - Load when refining the backlog and deciding when an item is ready