luvv to helpDiscover the Best Free Online Tools
Topic 2 of 12

Writing Clear User Stories

Learn Writing Clear User Stories for free with explanations, exercises, and a quick test (for Business Analyst).

Published: December 20, 2025 | Updated: December 20, 2025

Why this matters

Clear user stories align stakeholders, guide developers, and define when work is done. As a Business Analyst, you will use user stories to: capture requirements during discovery, prioritize backlog items, facilitate refinement with dev/design/QA, and agree on acceptance criteria that make testing objective.

  • Reduce rework by stating value and boundaries upfront.
  • Enable test planning through concrete acceptance criteria.
  • Support incremental delivery with right-sized stories.

Concept explained simply

A user story is a short statement of a user’s need and the value it delivers. The classic format is:

As a [user/role], I want [capability], so that [benefit/value].

Acceptance criteria (AC) define how we’ll verify the story is done. They describe rules and scenarios, often using Given–When–Then.

Mental model: Story = Who + What + Why; AC = Proof

  • Who: the role getting value (not a system component).
  • What: the capability, not the implementation.
  • Why: the outcome or business value.
  • Proof: AC make value verifiable and set scope boundaries.
INVEST checklist (open to review)
  • Independent: can be delivered without major dependencies.
  • Negotiable: not a contract for features; details can evolve.
  • Valuable: delivers value to the user or business.
  • Estimable: team can size it reasonably.
  • Small: can be done within a sprint/iteration.
  • Testable: clear AC allow objective verification.

Patterns you’ll use

Story templates

  • Standard: As a [role], I want [capability], so that [benefit].
  • Job story (optional): When [situation], I want to [motivation], so I can [outcome].

Acceptance criteria styles

  • Rules: bullet points for business rules and constraints.
  • Scenarios (Given–When–Then): concrete flows that cover happy paths and edge cases.
  • Non-functional: performance, security, accessibility stated in measurable terms.
When to add non-functional criteria
  • Performance matters (e.g., response time, data size, concurrency).
  • Security/compliance is required (e.g., MFA, audit trail).
  • Accessibility targets (e.g., WCAG criteria) affect acceptance.

Worked examples

1) Export filtered report to CSV

Story: As a data analyst, I want to export the currently filtered report to CSV, so that I can analyze it in a spreadsheet.

Acceptance criteria (scenarios)

  • Given a report with active filters, When I click Export CSV, Then the file contains only the filtered rows and selected columns.
  • Given data with commas and quotes, When exported, Then values are properly escaped per CSV standard.
  • Given a large dataset (up to 200k rows), When exported, Then the export completes within 60 seconds.
  • Given I have no export permission, When I open the report, Then the Export CSV action is hidden.
Notes

Non-functional performance is explicit; permissions define scope.

2) Save item to wishlist

Story: As a shopper, I want to save items to a wishlist, so that I can buy them later.

Acceptance criteria

  • Given I am logged in, When I click Save to wishlist, Then the item appears in my wishlist.
  • Given the item is already in my wishlist, When I click Save to wishlist, Then I see a message that it’s already saved (no duplicates).
  • Given I remove an item, When I view my wishlist, Then it no longer appears.
  • Given I log in from another device, When I open wishlist, Then my saved items are present (server-side persistence).

3) Reset password

Story: As an account holder, I want to reset my password via email, so that I can regain access if I forget it.

Acceptance criteria

  • Given I enter a registered email, When I request reset, Then I receive a reset link that expires in 30 minutes.
  • Given the link is expired or used, When I click it, Then I see an error and can request a new link.
  • Given I set a new password meeting policy (12+ chars, 1 number, 1 symbol), When I submit, Then I can sign in with the new password and not with the old one.

4) Save dashboard filter preset

Story: As a marketing analyst, I want to save dashboard filter presets, so that I can quickly reuse common views.

Acceptance criteria

  • Given current filters, When I save as a preset with a unique name, Then it appears in my presets list.
  • Given I select a preset, When applied, Then filters update to exactly the saved values.
  • Given I attempt to save a duplicate name, When I confirm, Then I’m prompted to choose a different name.
  • Given up to 20 presets limit, When I try to save the 21st, Then I see a clear message about the limit.

How to write a clear user story (step-by-step)

  1. Identify the real user (role, not a system). Who benefits?
  2. State the capability without dictating UI or technical solution.
  3. Write the value (so that …) as a concrete outcome.
  4. Draft acceptance criteria: rules and Given–When–Then scenarios (happy + edge cases).
  5. Add non-functional criteria if they affect acceptance (performance, security, accessibility).
  6. Apply INVEST and slice if too big (separate roles, workflows, or benefits).
  7. Review with the team to confirm feasibility and testability.
Mini template pack
  • Primary: As a [role], I want [capability], so that [benefit].
  • Constraint: Must [rule/limit] (e.g., up to N items; only for role X).
  • Non-functional: [Metric] under [conditions] (e.g., <2s at 100 users).
  • AC (GWT): Given [context], When [action], Then [observable outcome].

Exercises

Try these, then compare with the sample solutions.

Exercise 1 — Rewrite a vague request

Vague request: “Add export.”

Write a clear user story and 4–6 acceptance criteria that cover filtering, formatting, permissions, and large datasets.

Hints
  • Pick a real role (e.g., data analyst, report viewer).
  • State the value (why they need it).
  • Include CSV formatting and permission rules.
  • Add one non-functional criterion (time/size limits).
See the Exercises section below for the official submission format.

Exercise 2 — Add acceptance criteria

Given the story: “As a shopper, I want to save items to a wishlist, so that I can buy them later.” Write 6–8 AC covering: duplicates, removal, login requirement, device sync, limit, and empty states.

Hints
  • Cover both happy path and edge cases.
  • Spell out what happens when the user is not logged in.
  • Consider a limit (e.g., 100 items) and messages.

Common mistakes

  • Solution-first stories: “Add a blue button on the right.” Fix: focus on capability and value.
  • Vague benefits: “so that it’s better.” Fix: name a measurable or observable outcome.
  • No edge cases: Only happy path AC. Fix: add negative and boundary scenarios.
  • Mixing tasks with AC: AC should be outcomes, not implementation steps.
  • Oversized stories: Multiple roles/goals. Fix: split by role, workflow, or benefit.
  • Missing non-functional needs: Performance/security omitted. Fix: add measurable criteria when relevant.

Self-check checklist

Who this is for

  • Aspiring and practicing Business Analysts
  • Product Owners and UX researchers writing requirements
  • QA and Developers aligning on “done” criteria

Prerequisites

  • Basic understanding of Agile/Scrum ceremonies
  • Familiarity with product backlogs and sprint flow

Learning path

  1. Learn the story formula and INVEST.
  2. Practice writing AC with Given–When–Then.
  3. Add non-functional criteria when relevant.
  4. Split oversized stories; refine with the team.
  5. Validate with users/stakeholders and iterate.

Practical projects

  • Draft a 10-item backlog for a simple e-commerce wishlist feature (stories + AC).
  • Take an existing feature request from your workplace and convert it into 2–3 small user stories with measurable AC.
  • Create a “story review” checklist and apply it to three of your stories.

Take the quick test

This quick test is available to everyone. Only logged-in users get saved progress.

How to use the results

Score 70% or higher to move on. If you don’t pass, revisit the exercises and common mistakes, then retry.

Next steps

  • Practice splitting complex requests into smaller, value-focused stories.
  • Deepen your acceptance criteria skills with more scenario coverage.
  • Bring your stories to a refinement session and gather feedback from dev and QA.

Mini challenge

Pick any bug report or support ticket. Rewrite it as a user story with 5 acceptance criteria: 2 happy path, 2 edge cases, 1 non-functional. Use the self-check checklist to validate your result.

Practice Exercises

2 exercises to complete

Instructions

Transform this vague request into a clear, testable user story with 4–6 acceptance criteria:

Add export
  • Choose a realistic role.
  • State the capability and the value.
  • Cover filtering, formatting, permissions, and large datasets.
  • Add one measurable non-functional criterion.
Expected Output
A single user story in the 'As a..., I want..., so that...' format, followed by 4–6 acceptance criteria using rules or Given–When–Then. Include at least one performance or size limit.

Writing Clear User Stories — Quick Test

Test your knowledge with 8 questions. Pass with 70% or higher.

8 questions70% to pass

Have questions about Writing Clear User Stories?

AI Assistant

Ask questions about this tool