User Story
beta · Family delivery-docs · Phase deliver · Sizes lean, full · ~1,000 tokens
Describes a unit of work from the user’s perspective (“as a [user], I want [goal], so that [benefit]”) so a team can build and verify the right thing.
Fast reference for the User Story bundle. For the full reasoning, history, and sources, read
user-stories_companion.md.
When to use
Section titled “When to use”- To express a unit of work from the user’s point of view, ready for a backlog.
- When you want the work to stay a conversation, with detail emerging in refinement.
- When a team estimates and pulls work iteratively.
When NOT to use
Section titled “When NOT to use”- You need the whole feature’s scope, metrics, and non-goals. Use a PRD; stories implement it.
- You need exhaustive actor-system flows. Use a use-case specification.
- The “done” conditions are detailed enough to deserve their own artifact. Use acceptance criteria.
Pick a variant
Section titled “Pick a variant”- Lean (default): a single story card (Story, Acceptance criteria, Notes). What you write most.
- Full: adds INVEST, estimate, and dependencies. For risky, cross-team, or must-size stories. Grow lean into full by adding sections; never reorder the shared ones.
Quality rubric (INVEST, self-grade before refinement)
Section titled “Quality rubric (INVEST, self-grade before refinement)”- Independent: not blocked by a sibling story.
- Negotiable: the how is open; only the need is fixed.
- Valuable: a user or customer would recognize the value.
- Estimable: the team can size it.
- Small: fits in one iteration.
- Testable: the acceptance criteria are verifiable.
- The “so that” clause states a real benefit, not a restatement of the goal.
- All guidance comments deleted; no placeholders remain.
Named anti-patterns (the usual wrecks)
Section titled “Named anti-patterns (the usual wrecks)”- The card is the spec. Treating the one-liner as complete and skipping the conversation.
- UI task disguised as a story. “As a user I want a dropdown” states a solution, not a goal.
- No “so that.” Dropping the benefit hides whether the work is worth doing.
- Too big. A story that cannot fit an iteration; split it.
- Hidden dependencies. Unlisted blockers that surface mid-sprint.
- Persona theater. “As a user” everywhere, when naming the real situation would change the design (consider a job story instead).
The artifacts
Section titled “The artifacts”user-stories_template-lean.md · ~1,000 tokens
---title: "{{title}}"doc_type: user-storiessize: leanowner: "{{owner}}"status: draftdoc_version: "{{doc_version}}"created: "{{date}}"updated: "{{date}}"related_links: []source_template: user-storiessource_template_version: 0.1.0---
<!--LEAN USER STORY. One story card: the statement, how you will confirm it, and any notes. The minimumthat is still genuinely useful. Use it for a single backlog item; for a set of stories, copy the cardper story. To grow a card into a fully scaffolded story, ADD sections (seeuser-stories_template-full.md); never rename or reorder the ones below (the full variant is a strictsuperset of this one). A story is a placeholder for a conversation, not a complete spec; keep it shortand talk.
HOW TO FILL THIS IN1. Read the comment under each heading: WHAT it wants, WHY it matters (with a pointer into user-stories_companion.md for the deep reasoning), guiding questions to ASK, a GOOD and a WEAK example, and the TRAP to avoid.2. Replace each {{placeholder}} with your content.3. If a section does not apply, write "N/A" and one line of why, rather than deleting it.4. Before you ship: self-grade against user-stories_guide.md, then DELETE every HTML comment. They are guidance, not content.-->
# {{title}}
## Story
<!-- WHAT The work as one user-centered sentence, Connextra format: "As a [type of user], I want [goal], so that [benefit]." Lead with who and why, not the UI. WHY It forces the user, the goal, and the benefit into one line and keeps the work anchored to value; the "so that" clause is the test of whether the work is worth doing at all. Deep dive: user-stories_companion.md section 3 (Anatomy > Story). ASK Whose goal is this? What outcome do they want? What real benefit does "so that" name? Is this an outcome, not a UI task? GOOD "As a recurring analyst, I want to save my current dashboard filters as a named view, so that I can return to exactly this slice tomorrow without rebuilding it." WEAK "As a user, I want a dropdown." (a solution in disguise; no real user, no benefit) TRAP A UI task disguised as a story - stating a solution instead of the goal behind it. -->
As a {{user}}, I want {{goal}}, so that {{benefit}}.
## Acceptance criteria
<!-- WHAT How you will know this story is done, from the user's point of view - the "Confirmation" of the story. Keep it short here; for richer criteria use the acceptance-criteria artifact. WHY It makes the story testable (the T in INVEST) and gives "done" an objective meaning both sides read the same way. Deep dive: user-stories_companion.md section 3 (Anatomy > Acceptance criteria). ASK What must be observably true for this to be done? Would a tester read it the same way you do? What does the unhappy path look like? GOOD "I can name and save the current filters, date range, and visible columns as a view." WEAK "It works well." (not observable; nothing a tester could verify) TRAP No criteria at all, which leaves "done" to interpretation. -->
- {{acceptance_criterion_1}}
## Notes and open questions
<!-- WHAT Context, links (designs, the parent epic), decisions, and anything still undecided - each open question with an owner and a needed-by. WHY Refinement runs on surfaced unknowns; a story that hides them only looks ready. Deep dive: user-stories_companion.md section 3 (Anatomy > Notes and open questions). ASK What is genuinely undecided? Who owns each answer, and by when? What links does a reader need to orient? GOOD "Open: should a Team Lead set a team default, or only personal defaults? Owner: Priya, needed before Phase 2." WEAK An empty notes block on a story that plainly has open questions (hides unknowns to look ready). TRAP Cramming a full spec here; if it needs that much, the work is probably an epic to split. -->
{{notes}}user-stories_template-full.md · ~2,100 tokens
---title: "{{title}}"doc_type: user-storiessize: fullowner: "{{owner}}"status: draftdoc_version: "{{doc_version}}"created: "{{date}}"updated: "{{date}}"related_links: []source_template: user-storiessource_template_version: 0.1.0---
<!--FULL USER STORY. A story with quality scaffolding around it, and a strict superset of the lean card:the same Story, Acceptance criteria, and Notes sections, with Description, INVEST, estimate, anddependencies added between them. Use it for a story that carries risk, crosses teams, or must be sizedand de-risked before commitment. For a set, repeat this block per story under a shared epic heading.Default to the lean card and scale up only when a section here earns its place.
HOW TO FILL THIS IN1. Read the comment under each heading: WHAT it wants, WHY it matters (with a pointer into user-stories_companion.md for the deep reasoning), guiding questions to ASK, a GOOD and a WEAK example, and the TRAP to avoid.2. Replace each {{placeholder}} with your content. For the INVEST check, tick each box or note the gap.3. Do not pre-fill a section out of diligence. Add a full-only section the moment a real question it answers comes up (a dependency appears, the story needs sizing, a sibling blocks it). If a section does not apply, write "N/A" and one line of why.4. Before you ship: self-grade against user-stories_guide.md, then DELETE every HTML comment.-->
# {{title}}
## Story
<!-- WHAT The work as one user-centered sentence, Connextra format: "As a [type of user], I want [goal], so that [benefit]." Lead with who and why, not the UI. WHY It keeps the work anchored to user value; the "so that" clause is the test of whether the work is worth doing at all. Where the user's situation matters more than their role, the job-story form ("When [situation], I want [motivation], so I can [outcome]") is often sharper. Deep dive: user-stories_companion.md section 3 (Anatomy > Story), and the user-story-vs-job-story debate in section 6. ASK Whose goal is this? What outcome do they want? What real benefit does "so that" name? Would a job story frame the situation more sharply? GOOD "As a recurring analyst, I want to set one of my saved views as the default for a dashboard, so that the dashboard opens the way I work instead of its generic default." WEAK "As a user, I want a dropdown." (a solution in disguise; no real user, no benefit) TRAP A UI task disguised as a story - stating a solution instead of the goal behind it. -->
As a {{user}}, I want {{goal}}, so that {{benefit}}.
## Description and context
<!-- WHAT Background the one-liner cannot carry: the parent epic, the problem it serves, links to designs or the PRD. WHY It orients the reader without bloating the card; kept thin, it points to where the detail lives instead of duplicating it. Deep dive: user-stories_companion.md section 3 (Anatomy > Description and context). ASK What epic is this split from? What problem does it serve? Where do the design and PRD live? GOOD "Follows from the Saved Views PRD. Depends on a view already existing (the save story). The default is per-user, not per-dashboard, per the Q1 storage decision." WEAK "This story is about saving views." (restates the story; adds nothing the card lacks) TRAP Piling in so much context the story becomes a mini-spec - a sign it is an epic to split. -->
{{description_and_context}}
## Acceptance criteria
<!-- WHAT The conditions that confirm the story is done, from the user's view. List the rules; for behavior add Given/When/Then scenarios (or keep them in a paired acceptance-criteria doc). Cover the unhappy paths, not just the happy one. WHY It makes the story testable (the T in INVEST); the unhappy paths are where the real work and real bugs live. Deep dive: user-stories_companion.md section 3 (Anatomy > Acceptance criteria). ASK What must be observably true to call this done? What does the error or missing-data case do? Could QA write a test from each line? GOOD "If my default view references a filter that no longer exists, the dashboard loads the valid parts and tells me which filter is missing." WEAK "The default-view feature is implemented." (describes implementation, not observable behavior a tester can check) TRAP Vague or absent criteria that leave "done" to interpretation (a failure of Testable). -->
- {{acceptance_criterion_1}}
## INVEST check
<!-- WHAT A quick self-test of story quality against Wake's INVEST (Independent, Negotiable, Valuable, Estimable, Small, Testable). Tick each box or note the gap. WHY It catches the two failures that most often wreck a sprint: a story that is not Independent and one that is not Small. Deep dive: user-stories_companion.md section 3 (Anatomy > INVEST check). ASK Does it stand alone? Is only the how negotiable, not the need? Can the team size it? Does it fit one iteration? GOOD "[x] Independent: depends only on the save-view story, a sequenced prerequisite, not a sibling." (ticks the box but names the real relationship) WEAK Every box ticked with no note on the one that is actually shaky. (theater, not a self-test) TRAP Skipping the check, then finding at sprint start that the story is not Independent or not Small. -->
- [ ] Independent: stands alone, not blocked by a sibling story- [ ] Negotiable: the how is open, only the need is fixed- [ ] Valuable: delivers value a user or customer would recognize- [ ] Estimable: the team can size it- [ ] Small: fits comfortably in one iteration- [ ] Testable: the acceptance criteria are verifiable
## Estimate and sizing
<!-- WHAT The team's relative estimate (story points, t-shirt size) and the confidence behind it. WHY It informs planning, but an estimate is the output of a conversation, not a commitment; a precise number with no shared basis is theater. Deep dive: user-stories_companion.md section 3 (Anatomy > Estimate and sizing). ASK What is the relative size? How confident is the team? What drives the uncertainty? GOOD "3 story points (illustrative), high confidence; the storage and load paths already exist." WEAK "42.5 hours." (false precision with no shared basis or confidence) TRAP A precise-looking number with no shared basis; estimates are a conversation, not a contract. -->
{{estimate}}
## Dependencies
<!-- WHAT What this story needs before it can be done: another story, a service, data, a design, an approval. WHY The unlisted dependency is the classic mid-sprint blocker; many hard dependencies also flag a failure of the "I" in INVEST. Deep dive: user-stories_companion.md section 3 (Anatomy > Dependencies). ASK What must exist or be approved first? Who owns it? Do the hard dependencies mean this story should be restructured? GOOD "Save-view story must ship first (provides the view to set as default)." WEAK "Depends on other things." (no specific blocker, nothing actionable) TRAP An unlisted dependency that surfaces mid-sprint and blocks the story. -->
- {{dependency_1}}
## Notes and open questions
<!-- WHAT Links, decisions, and anything still undecided - each open question with an owner and a needed-by. WHY Refinement runs on surfaced unknowns; a story that hides them only looks ready. Deep dive: user-stories_companion.md section 3 (Anatomy > Notes and open questions). ASK What is genuinely undecided? Who owns each answer, and by when? What links does a reader need to orient? GOOD "Open: should a Team Lead set a team default, or only personal defaults? Owner: Priya, needed before Phase 2." WEAK An empty notes block on a story that plainly has open questions (hides unknowns to look ready). TRAP Hiding unknowns to look ready; surfaced questions are what refinement is for. -->
{{notes}}---title: "Saved Views: story set"doc_type: user-storiessize: fullowner: "Priya Nair (PM, Reporting)"status: in-reviewdoc_version: "0.2.0"created: "2026-06-18"updated: "2026-06-30"related_links: - "PRD: Saved Views for Dashboards (prd_example.md)"source_template: user-storiessource_template_version: 0.1.0---
<!--Worked example for the User Story bundle. It shows three things for the same "Saved Views" feature usedin the PRD example: a lean card, a fully scaffolded story, and the same need as a job story forcontrast. Figures marked "illustrative" are made up for the example.-->
# Saved Views: story set
Epic: Saved Views (see the PRD example). Below: one lean card, one full story, and a job-story variant.
---
## Lean card
### Story
As a recurring analyst, I want to save my current dashboard filters as a named view, so that I canreturn to exactly this slice tomorrow without rebuilding it.
### Acceptance criteria
- I can name and save the current filters, date range, and visible columns as a view.- The saved view appears in my list of views for this dashboard.
### Notes and open questions
Parent epic: Saved Views. Prototype: figma.com/acme/saved-views (illustrative).
---
## Full story
### Story
As a recurring analyst, I want to set one of my saved views as the default for a dashboard, so that thedashboard opens the way I work instead of in its generic default state.
### Description and context
Follows from the Saved Views PRD. Depends on a view already existing (the save story above). The defaultis per-user, not per-dashboard, per the Q1 storage decision.
### Acceptance criteria
- I can mark exactly one of my views as the default for a given dashboard.- When I open that dashboard, my default view loads instead of the generic default.- If my default view references a filter that no longer exists, the dashboard loads the valid parts and tells me which filter is missing.
### INVEST check
- [x] Independent: depends only on the save-view story, which is a sequenced prerequisite, not a sibling.- [x] Negotiable: how "default" is surfaced in the UI is open.- [x] Valuable: removes the daily re-filtering tax for recurring analysts.- [x] Estimable: team sized it at 3 points (illustrative).- [x] Small: fits one iteration.- [x] Testable: criteria above are observable.
### Estimate and sizing
3 story points (illustrative), high confidence; the storage and load paths already exist.
### Dependencies
- Save-view story must ship first (provides the view to set as default).- Per-user preferences storage (shipped Q1).
### Notes and open questions
Open: should a Team Lead be able to set a team default, or only personal defaults? Owner: Priya, neededbefore Phase 2.
---
## Same need, as a job story (for contrast)
When I open a dashboard I check every morning, I want it to already show my usual region and date range,so I can start reading the numbers instead of rebuilding the filters first.
<!--Note how the job story drops the "recurring analyst" role and leads with the situation ("every morning")and motivation. Use this form when the situation is the crux; use the role-based story when the role iswhat varies. See the companion, section 6.-->Provenance
Section titled “Provenance”The reasoning, the history and every source, in the repository:
- Companion - the long-form argument: why these sections, where the sources disagree, and what the bundle refuses to claim
- History - what changed in this bundle, and when
- Research log - every source consulted, with what each one actually supports
- Catalog metadata - the machine-readable record this page is generated from
Catalog record: 7 sections across 1 format(s).