GitScrum / Docs
All Best Practices

Actionable User Stories | INVEST Criteria Guide

Write user stories developers can immediately implement using INVEST criteria and acceptance criteria templates. GitScrum bridges requirements and working software.

16 min read

A well-written user story is the difference between a developer asking clarifying questions for days and immediately starting productive work. This guide covers the complete framework for creating user stories that are truly actionableβ€”clear enough to code from, small enough to complete in a sprint, and valuable enough to matter to users.

The Anatomy of Actionable Stories

What makes a story actionable:

ElementPurposeExample
User roleWho benefits"As a project manager..."
ActionWhat they want to do"...I want to export reports..."
BenefitWhy it matters"...so I can share progress with stakeholders"
Acceptance criteriaDefinition of doneGiven/When/Then statements
SizeSprint-completable1-8 story points typically

The User Story Format

Standard Template

USER STORY STRUCTURE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ TITLE: [Verb] + [Object] + [Context]                        β”‚
β”‚ Example: "Export Sprint Report to PDF"                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ USER STORY:                                                 β”‚
β”‚ As a [type of user],                                        β”‚
β”‚ I want to [perform action],                                 β”‚
β”‚ So that [achieve benefit].                                  β”‚
β”‚                                                             β”‚
β”‚ EXAMPLE:                                                    β”‚
β”‚ As a project manager,                                       β”‚
β”‚ I want to export my sprint report as a PDF,                 β”‚
β”‚ So that I can share progress with stakeholders              β”‚
β”‚ who don't have GitScrum access.                             β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ACCEPTANCE CRITERIA:                                        β”‚
β”‚                                                             β”‚
β”‚ βœ“ Given I am on the Sprint Report page                      β”‚
β”‚   When I click "Export to PDF"                              β”‚
β”‚   Then a PDF downloads with all visible report data         β”‚
β”‚                                                             β”‚
β”‚ βœ“ Given the report has charts                               β”‚
β”‚   When I export to PDF                                      β”‚
β”‚   Then charts render correctly in the PDF                   β”‚
β”‚                                                             β”‚
β”‚ βœ“ Given the sprint has 100+ tasks                           β”‚
β”‚   When I export to PDF                                      β”‚
β”‚   Then export completes within 30 seconds                   β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ TECHNICAL NOTES (optional):                                 β”‚
β”‚ - Use existing report data endpoint                         β”‚
β”‚ - PDF library: jsPDF or similar                             β”‚
β”‚ - Include company logo from settings                        β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ DEPENDENCIES:                                               β”‚
β”‚ - Requires: Sprint Report UI (completed)                    β”‚
β”‚ - Blocked by: None                                          β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ESTIMATE: 5 story points                                    β”‚
β”‚ PRIORITY: Medium                                            β”‚
β”‚ LABELS: Feature, Reports, Sprint-24                         β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The INVEST Criteria

Evaluating Story Quality

INVEST CHECKLIST:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ I - INDEPENDENT                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Can be developed without depending on other stories         β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "As a user, I want the login button to work"        β”‚
β”‚   (depends on auth system, session management, etc.)        β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "As a user, I want to log in with email/password"  β”‚
β”‚   (complete feature, self-contained)                        β”‚
β”‚                                                             β”‚
β”‚ TEST: Can this story be developed and deployed alone?       β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ N - NEGOTIABLE                                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Details can be discussed and refined with the team          β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "Implement login exactly as shown in wireframe v2.3"β”‚
β”‚   (too prescriptive, no room for improvement)               β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "Users need secure, quick access to their account" β”‚
β”‚   (outcome-focused, implementation negotiable)              β”‚
β”‚                                                             β”‚
β”‚ TEST: Could a developer suggest a better approach?          β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ V - VALUABLE                                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Delivers value to user or business (not just technical)     β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "Refactor database connection pool"                 β”‚
β”‚   (technical task, no user value stated)                    β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "Improve page load time from 3s to under 1s"       β”‚
β”‚   (user experiences faster loading)                         β”‚
β”‚                                                             β”‚
β”‚ TEST: Would a user/stakeholder care about this?             β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ E - ESTIMABLE                                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Team can estimate effort with reasonable confidence         β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "Integrate with third-party analytics"              β”‚
β”‚   (too vague - which provider? what data?)                  β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "Send page view events to Google Analytics 4"      β”‚
β”‚   (specific, known scope)                                   β”‚
β”‚                                                             β”‚
β”‚ TEST: Can the team agree on story points within 5 min?      β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ S - SMALL                                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Completable within a single sprint (ideally 1-3 days work)  β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "As a user, I want a complete dashboard"            β”‚
β”‚   (too large - weeks of work)                               β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "As a user, I want to see my task count widget"    β”‚
β”‚   (one component, few days)                                 β”‚
β”‚                                                             β”‚
β”‚ TEST: Can one developer complete this in 3 days or less?    β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ T - TESTABLE                                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Clear criteria for determining when story is done           β”‚
β”‚                                                             β”‚
β”‚ ❌ BAD: "Make the UI more intuitive"                        β”‚
β”‚   (subjective, no clear pass/fail)                          β”‚
β”‚                                                             β”‚
β”‚ βœ… GOOD: "User can complete checkout in 3 clicks or less"   β”‚
β”‚   (measurable, verifiable)                                  β”‚
β”‚                                                             β”‚
β”‚ TEST: Can you write an acceptance test for this?            β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Writing Acceptance Criteria

Given-When-Then Format

ACCEPTANCE CRITERIA TEMPLATE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ STRUCTURE:                                                  β”‚
β”‚                                                             β”‚
β”‚ Given [precondition/context]                                β”‚
β”‚ When [action is performed]                                  β”‚
β”‚ Then [expected result]                                      β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ EXAMPLE STORY: Password Reset                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ HAPPY PATH:                                                 β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ Given I am on the login page                            β”‚β”‚
β”‚ β”‚ When I click "Forgot password"                          β”‚β”‚
β”‚ β”‚ Then I see a form to enter my email                     β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Given I have entered my registered email                β”‚β”‚
β”‚ β”‚ When I click "Send reset link"                          β”‚β”‚
β”‚ β”‚ Then I see confirmation message                         β”‚β”‚
β”‚ β”‚ And I receive email with reset link within 2 minutes    β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Given I clicked the reset link in email                 β”‚β”‚
β”‚ β”‚ When I enter new password meeting requirements          β”‚β”‚
β”‚ β”‚ Then my password is updated                             β”‚β”‚
β”‚ β”‚ And I can log in with new password                      β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ ERROR CASES:                                                β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ Given I enter an unregistered email                     β”‚β”‚
β”‚ β”‚ When I click "Send reset link"                          β”‚β”‚
β”‚ β”‚ Then I see same confirmation (security - no email leak) β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Given I have a reset link older than 24 hours           β”‚β”‚
β”‚ β”‚ When I click the link                                   β”‚β”‚
β”‚ β”‚ Then I see "Link expired" message                       β”‚β”‚
β”‚ β”‚ And I can request a new link                            β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Given I enter password not meeting requirements         β”‚β”‚
β”‚ β”‚ When I try to submit                                    β”‚β”‚
β”‚ β”‚ Then I see specific requirement that failed             β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ EDGE CASES:                                                 β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ Given I request password reset twice                    β”‚β”‚
β”‚ β”‚ When I use the first link                               β”‚β”‚
β”‚ β”‚ Then only the second (latest) link works                β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Given I am already logged in                            β”‚β”‚
β”‚ β”‚ When I access reset password page                       β”‚β”‚
β”‚ β”‚ Then I am redirected to change password (not reset)     β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Criteria Completeness Checklist

ACCEPTANCE CRITERIA COVERAGE:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ VERIFY ALL SCENARIOS ARE COVERED:                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ ☐ HAPPY PATH                                                β”‚
β”‚   Main use case works as expected                           β”‚
β”‚                                                             β”‚
β”‚ ☐ ERROR HANDLING                                            β”‚
β”‚   What happens when things go wrong                         β”‚
β”‚   - Invalid input                                           β”‚
β”‚   - Network failure                                         β”‚
β”‚   - Server error                                            β”‚
β”‚                                                             β”‚
β”‚ ☐ EDGE CASES                                                β”‚
β”‚   Boundary conditions                                       β”‚
β”‚   - Empty states                                            β”‚
β”‚   - Maximum limits                                          β”‚
β”‚   - Concurrent actions                                      β”‚
β”‚                                                             β”‚
β”‚ ☐ PERMISSIONS                                               β”‚
β”‚   Who can/cannot do this                                    β”‚
β”‚   - Admin vs. regular user                                  β”‚
β”‚   - Owner vs. team member                                   β”‚
β”‚   - Logged in vs. anonymous                                 β”‚
β”‚                                                             β”‚
β”‚ ☐ PERFORMANCE                                               β”‚
β”‚   Response time expectations                                β”‚
β”‚   - Page load time                                          β”‚
β”‚   - API response time                                       β”‚
β”‚   - Batch operation limits                                  β”‚
β”‚                                                             β”‚
β”‚ ☐ ACCESSIBILITY                                             β”‚
β”‚   Inclusive design requirements                             β”‚
β”‚   - Keyboard navigation                                     β”‚
β”‚   - Screen reader support                                   β”‚
β”‚   - Color contrast                                          β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Story Splitting Techniques

Vertical Slicing

SPLITTING LARGE STORIES:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ BEFORE: Epic-sized story (too big)                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ "As a user, I want to manage my profile settings"           β”‚
β”‚ Estimate: 40 points (way too big!)                          β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ AFTER: Vertical slices (right-sized)                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ Story 1: View Profile (3 pts)                               β”‚
β”‚ "As a user, I want to view my current profile info"         β”‚
β”‚                                                             β”‚
β”‚ Story 2: Edit Name (2 pts)                                  β”‚
β”‚ "As a user, I want to change my display name"               β”‚
β”‚                                                             β”‚
β”‚ Story 3: Upload Avatar (5 pts)                              β”‚
β”‚ "As a user, I want to upload a profile picture"             β”‚
β”‚                                                             β”‚
β”‚ Story 4: Change Email (5 pts)                               β”‚
β”‚ "As a user, I want to change my email with verification"    β”‚
β”‚                                                             β”‚
β”‚ Story 5: Change Password (3 pts)                            β”‚
β”‚ "As a user, I want to change my password"                   β”‚
β”‚                                                             β”‚
β”‚ Story 6: Notification Preferences (3 pts)                   β”‚
β”‚ "As a user, I want to control email notifications"          β”‚
β”‚                                                             β”‚
β”‚ Story 7: Delete Account (5 pts)                             β”‚
β”‚ "As a user, I want to delete my account permanently"        β”‚
β”‚                                                             β”‚
β”‚ TOTAL: 26 points across 7 stories                           β”‚
β”‚ Each story: Independently deployable, testable, valuable    β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Splitting Strategies

STORY SPLITTING PATTERNS:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. BY WORKFLOW STEPS                                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "User checkout process"                           β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ Add items to cart                                      β”‚
β”‚ β”œβ”€β”€ Enter shipping address                                 β”‚
β”‚ β”œβ”€β”€ Select shipping method                                 β”‚
β”‚ β”œβ”€β”€ Enter payment info                                     β”‚
β”‚ β”œβ”€β”€ Review and confirm                                     β”‚
β”‚ └── Order confirmation email                               β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2. BY OPERATIONS (CRUD)                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "Manage projects"                                 β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ View list of projects                                  β”‚
β”‚ β”œβ”€β”€ Create new project                                     β”‚
β”‚ β”œβ”€β”€ Edit project details                                   β”‚
β”‚ β”œβ”€β”€ Archive project                                        β”‚
β”‚ └── Delete project                                         β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 3. BY DATA TYPES                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "Import data from file"                           β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ Import CSV format                                      β”‚
β”‚ β”œβ”€β”€ Import Excel format                                    β”‚
β”‚ β”œβ”€β”€ Import JSON format                                     β”‚
β”‚ └── Import from Google Sheets                              β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 4. BY USER TYPES                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "Dashboard for all users"                         β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ Admin dashboard (all data)                             β”‚
β”‚ β”œβ”€β”€ Manager dashboard (team data)                          β”‚
β”‚ β”œβ”€β”€ Developer dashboard (my work)                          β”‚
β”‚ └── Guest dashboard (public data)                          β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 5. BY HAPPY PATH vs. EDGE CASES                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "Upload file with validation"                     β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ Upload valid file (happy path)                         β”‚
β”‚ β”œβ”€β”€ Handle file too large                                  β”‚
β”‚ β”œβ”€β”€ Handle invalid file type                               β”‚
β”‚ └── Handle upload interruption/retry                       β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 6. BY PLATFORM/DEVICE                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Original: "Responsive photo gallery"                        β”‚
β”‚ Split:                                                      β”‚
β”‚ β”œβ”€β”€ Desktop layout                                         β”‚
β”‚ β”œβ”€β”€ Tablet layout                                          β”‚
β”‚ └── Mobile layout                                          β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

User Personas in Stories

Defining User Types

USER PERSONA EXAMPLES:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ GITSCRUM USER TYPES                                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ AGENCY OWNER (Admin)                                        β”‚
β”‚ β”œβ”€β”€ Full access to all projects                            β”‚
β”‚ β”œβ”€β”€ Billing and subscription management                    β”‚
β”‚ β”œβ”€β”€ User management                                        β”‚
β”‚ └── Company-wide reports                                   β”‚
β”‚                                                             β”‚
β”‚ PROJECT MANAGER                                             β”‚
β”‚ β”œβ”€β”€ Create and manage projects                             β”‚
β”‚ β”œβ”€β”€ Sprint planning and tracking                           β”‚
β”‚ β”œβ”€β”€ Team assignment                                        β”‚
β”‚ └── Client communication                                   β”‚
β”‚                                                             β”‚
β”‚ DEVELOPER                                                   β”‚
β”‚ β”œβ”€β”€ View assigned tasks                                    β”‚
β”‚ β”œβ”€β”€ Update task status                                     β”‚
β”‚ β”œβ”€β”€ Track time                                             β”‚
β”‚ └── Participate in discussions                             β”‚
β”‚                                                             β”‚
β”‚ CLIENT (External)                                           β”‚
β”‚ β”œβ”€β”€ View project progress                                  β”‚
β”‚ β”œβ”€β”€ Submit feedback via Form2Task                          β”‚
β”‚ β”œβ”€β”€ Approve deliverables                                   β”‚
β”‚ └── Limited visibility (ClientFlow)                        β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ USING PERSONAS IN STORIES:                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ ❌ VAGUE: "As a user, I want to see reports"               β”‚
β”‚                                                             β”‚
β”‚ βœ… SPECIFIC:                                                β”‚
β”‚ "As an agency owner, I want to see revenue by project..."   β”‚
β”‚ "As a project manager, I want to see sprint burndown..."    β”‚
β”‚ "As a developer, I want to see my time logged this week..." β”‚
β”‚ "As a client, I want to see my project's progress..."       β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Common Anti-Patterns

Stories to Avoid

USER STORY ANTI-PATTERNS:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ❌ TECHNICAL TASK DISGUISED AS STORY                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ BAD: "As a developer, I want to refactor the auth module"   β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Developer isn't the end user, no user value        β”‚
β”‚                                                             β”‚
β”‚ BETTER: Break into valuable stories OR make it a task:      β”‚
β”‚ - Story: "As a user, I want login to be faster (<2s)"       β”‚
β”‚ - Task: "Refactor auth module (enables login speed story)"  β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ❌ SOLUTION-FOCUSED (Not problem-focused)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ BAD: "As a user, I want a dropdown menu for categories"     β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Prescribes specific implementation                 β”‚
β”‚                                                             β”‚
β”‚ BETTER: "As a user, I want to quickly filter by category    β”‚
β”‚ so I can find relevant items faster"                        β”‚
β”‚ (Team can propose dropdown, tags, search, etc.)             β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ❌ EPIC DISGUISED AS STORY                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ BAD: "As a user, I want a complete project management tool" β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Months of work, impossible to estimate             β”‚
β”‚                                                             β”‚
β”‚ BETTER: Break into specific, valuable features              β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ❌ MISSING "SO THAT" (No value statement)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ BAD: "As a user, I want to export data"                     β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Why? What problem does this solve?                 β”‚
β”‚                                                             β”‚
β”‚ BETTER: "As a project manager, I want to export data        β”‚
β”‚ so that I can create custom reports in Excel"               β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ❌ VAGUE ACCEPTANCE CRITERIA                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ BAD: "Works correctly", "Fast", "User-friendly"             β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Not testable, subjective                           β”‚
β”‚                                                             β”‚
β”‚ BETTER: Specific, measurable criteria                       β”‚
β”‚ - "Returns results in < 500ms"                              β”‚
β”‚ - "Form submits without page reload"                        β”‚
β”‚ - "Accessible with keyboard only"                           β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

GitScrum Task Creation

Story to Task Mapping

CREATING STORIES IN GITSCRUM:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ TASK FIELDS MAPPING                                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ TITLE:                                                      β”‚
β”‚ Format: [Action] [Object] [Context]                         β”‚
β”‚ Example: "Export Sprint Report to PDF"                      β”‚
β”‚                                                             β”‚
β”‚ DESCRIPTION:                                                β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ ## User Story                                           β”‚β”‚
β”‚ β”‚ As a **project manager**, I want to **export sprint     β”‚β”‚
β”‚ β”‚ reports as PDF** so that I can **share progress with    β”‚β”‚
β”‚ β”‚ stakeholders who don't have GitScrum access**.          β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ ## Acceptance Criteria                                  β”‚β”‚
β”‚ β”‚ - [ ] Export button visible on Sprint Report page       β”‚β”‚
β”‚ β”‚ - [ ] PDF includes all visible charts and tables        β”‚β”‚
β”‚ β”‚ - [ ] Export completes within 30 seconds for 100+ tasks β”‚β”‚
β”‚ β”‚ - [ ] PDF is downloadable and shareable                 β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ ## Technical Notes                                      β”‚β”‚
β”‚ β”‚ - Use existing report data endpoint                     β”‚β”‚
β”‚ β”‚ - Consider jsPDF library                                β”‚β”‚
β”‚ β”‚ - Include company logo from project settings            β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ STORY POINTS: 5                                             β”‚
β”‚ PRIORITY: Medium                                            β”‚
β”‚ LABELS: Feature, Reports, Sprint-24                         β”‚
β”‚ ASSIGNEE: Set during sprint planning                        β”‚
β”‚ DUE DATE: End of sprint                                     β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Story Refinement Process

Pre-Planning Checklist

DEFINITION OF READY:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ BEFORE A STORY ENTERS SPRINT PLANNING:                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚ ☐ USER STORY COMPLETE                                       β”‚
β”‚   - Clear user role identified                              β”‚
β”‚   - Action described (what user wants to do)                β”‚
β”‚   - Value stated (why it matters)                           β”‚
β”‚                                                             β”‚
β”‚ ☐ ACCEPTANCE CRITERIA DEFINED                               β”‚
β”‚   - Happy path covered                                      β”‚
β”‚   - Error cases identified                                  β”‚
β”‚   - Edge cases considered                                   β”‚
β”‚                                                             β”‚
β”‚ ☐ SIZED APPROPRIATELY                                       β”‚
β”‚   - Team has estimated (story points)                       β”‚
β”‚   - Fits within single sprint                               β”‚
β”‚   - No unknown dependencies                                 β”‚
β”‚                                                             β”‚
β”‚ ☐ DEPENDENCIES CLEARED                                      β”‚
β”‚   - No blocking work from other teams                       β”‚
β”‚   - Required APIs/services available                        β”‚
β”‚   - Design/UX assets ready                                  β”‚
β”‚                                                             β”‚
β”‚ ☐ QUESTIONS ANSWERED                                        β”‚
β”‚   - Product owner clarified requirements                    β”‚
β”‚   - Technical spikes completed if needed                    β”‚
β”‚   - No open questions blocking start                        β”‚
β”‚                                                             β”‚
β”‚ IF ANY ☐ IS UNCHECKED:                                      β”‚
β”‚ β†’ Story goes to backlog refinement, not sprint              β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related Solutions