User Stories with Acceptance Criteria | Clear Scope
Write user stories that communicate value with precise acceptance criteria. GitScrum templates help developers understand and testers verify requirements.
10 min read
User stories should communicate what users need and why, enabling development teams to implement solutions while testers verify the right thing was built. Poorly written stories create confusion, rework, and delivered features that miss the mark. Clear stories with precise acceptance criteria eliminate ambiguity and accelerate delivery.
User Story Fundamentals
The Standard Format
USER STORY STRUCTURE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ANATOMY OF A GOOD USER STORY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β CLASSIC FORMAT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β As a [type of user] ββ
β β I want [some capability] ββ
β β So that [business value/benefit] ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WHY EACH PART MATTERS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β "As a [user]": ββ
β β β’ Clarifies perspective (admin β customer) ββ
β β β’ Enables empathy during implementation ββ
β β β’ Helps identify edge cases for different users ββ
β β ββ
β β "I want [capability]": ββ
β β β’ Describes need, not solution ββ
β β β’ Allows creative implementation ββ
β β β’ Focuses on outcome, not mechanism ββ
β β ββ
β β "So that [benefit]": ββ
β β β’ Explains WHY (often forgotten) ββ
β β β’ Enables better solutions ββ
β β β’ Helps prioritization discussions ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β GOOD vs BAD EXAMPLES: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Bad: "Add export button to reports page" ββ
β β (Specifies solution, no user, no why) ββ
β β ββ
β β β
Good: "As a marketing manager, I want to export ββ
β β campaign reports to CSV so that I can analyze ββ
β β performance in our BI tool without manual copying" ββ
β β ββ
β β β Bad: "User login improvements" ββ
β β (Vague, no specific need or benefit) ββ
β β ββ
β β β
Good: "As a returning customer, I want to stay ββ
β β logged in for 30 days so that I don't have to ββ
β β re-enter credentials every session" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Writing Acceptance Criteria
Defining "Done" Precisely
ACCEPTANCE CRITERIA PATTERNS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GIVEN-WHEN-THEN FORMAT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β STRUCTURE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Given [precondition/context] ββ
β β When [action/trigger] ββ
β β Then [expected outcome] ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β EXAMPLE FOR EXPORT STORY: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Criterion 1: Basic export ββ
β β Given I am viewing a campaign report ββ
β β When I click "Export to CSV" ββ
β β Then a CSV file downloads with all visible data ββ
β β ββ
β β Criterion 2: Date range handling ββ
β β Given I have filtered the report by date range ββ
β β When I export to CSV ββ
β β Then only the filtered data is included ββ
β β ββ
β β Criterion 3: Large data handling ββ
β β Given the report has more than 10,000 rows ββ
β β When I export to CSV ββ
β β Then I receive email link instead of direct download ββ
β β ββ
β β Criterion 4: Permission check ββ
β β Given I do not have "export" permission ββ
β β When I view the report ββ
β β Then the export button is not visible ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Alternative Criteria Formats
OTHER FORMATS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHECKLIST FORMAT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Works well for straightforward features: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Export button appears on all report pages ββ
β β β CSV includes all visible columns ββ
β β β Filename includes report name and date ββ
β β β Works in Chrome, Firefox, Safari ββ
β β β Exports complete within 10 seconds for < 1000 rows ββ
β β β Error message shown if export fails ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β RULE FORMAT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Works well for business rules: ββ
β β ββ
β β Rule: Free shipping threshold ββ
β β β’ Orders β₯ $50 qualify for free shipping ββ
β β β’ Orders < $50 show shipping cost before checkout ββ
β β β’ Threshold is configurable by admin ββ
β β β’ Promotional free shipping overrides threshold ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
GitScrum Task Templates
Standardizing Story Structure
TASK TEMPLATE SETUP:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CREATING REUSABLE STORY TEMPLATES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β USER STORY TEMPLATE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Title: [Feature] - [Brief description] ββ
β β ββ
β β Description: ββ
β β ## User Story ββ
β β As a [user type] ββ
β β I want [capability] ββ
β β So that [benefit] ββ
β β ββ
β β ## Background ββ
β β [Any context that helps understanding] ββ
β β ββ
β β ## Acceptance Criteria ββ
β β ### Criterion 1: [Name] ββ
β β Given [context] ββ
β β When [action] ββ
β β Then [result] ββ
β β ββ
β β ### Criterion 2: [Name] ββ
β β Given [context] ββ
β β When [action] ββ
β β Then [result] ββ
β β ββ
β β ## Out of Scope ββ
β β [Explicitly what this story does NOT include] ββ
β β ββ
β β ## Design References ββ
β β [Links to mockups, wireframes] ββ
β β ββ
β β ## Technical Notes ββ
β β [Any implementation hints or constraints] ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β CHECKLIST ITEMS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Definition of Done: ββ
β β β All acceptance criteria met ββ
β β β Code reviewed and approved ββ
β β β Unit tests written and passing ββ
β β β Integration tests updated if needed ββ
β β β Documentation updated ββ
β β β QA sign-off received ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Story Sizing
Making Stories Workable
STORY SPLITTING:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RIGHT-SIZING USER STORIES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SIZE GUIDELINES: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Too big (Epic): ββ
β β β’ Takes more than one sprint ββ
β β β’ Has multiple distinct user outcomes ββ
β β β’ Contains "and" in the I want clause ββ
β β ββ
β β Right size (Story): ββ
β β β’ Completable in 1-3 days ββ
β β β’ Single user outcome ββ
β β β’ Testable independently ββ
β β ββ
β β Too small (Task): ββ
β β β’ No user value on its own ββ
β β β’ Pure implementation detail ββ
β β β’ "Create database table" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SPLITTING TECHNIQUES: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β By workflow step: ββ
β β Epic: "User can manage profile" ββ
β β β Story 1: View profile ββ
β β β Story 2: Edit basic info ββ
β β β Story 3: Change password ββ
β β β Story 4: Upload avatar ββ
β β ββ
β β By operation (CRUD): ββ
β β Epic: "Admin manages users" ββ
β β β Story 1: Create user ββ
β β β Story 2: View user list ββ
β β β Story 3: Edit user ββ
β β β Story 4: Deactivate user ββ
β β ββ
β β By business rule variation: ββ
β β Epic: "Apply discount codes" ββ
β β β Story 1: Percentage discount ββ
β β β Story 2: Fixed amount discount ββ
β β β Story 3: Free shipping discount ββ
β β β Story 4: Stacking rules ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Common Mistakes
What to Avoid
ANTIPATTERNS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER STORY MISTAKES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WRITING SOLUTIONS, NOT NEEDS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β "As a user, I want a dropdown menu with sorting ββ
β β options so that I can sort the table" ββ
β β ββ
β β β
"As a user, I want to sort products by price so ββ
β β that I can find items within my budget quickly" ββ
β β ββ
β β Why: First specifies implementation, second allows ββ
β β team to find best solution ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β MISSING ACCEPTANCE CRITERIA: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Story without criteria: ββ
β β "As a user, I want to search products" ββ
β β β How do we know when it's done? ββ
β β β What constitutes a valid search? ββ
β β β What happens with no results? ββ
β β ββ
β β Same story with criteria: ββ
β β Given: Products exist in catalog ββ
β β When: User enters search term and submits ββ
β β Then: Matching products display within 2 seconds ββ
β β ββ
β β Given: No products match search ββ
β β When: User submits search ββ
β β Then: "No results" message with suggestions appears ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β VAGUE CRITERIA: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β "Page should load quickly" ββ
β β β
"Page loads in under 3 seconds on 3G connection" ββ
β β ββ
β β β "Export should handle large files" ββ
β β β
"Export handles up to 100,000 rows without timeout" ββ
β β ββ
β β β "Form validates input" ββ
β β β
"Email field rejects invalid format with error ββ
β β message 'Please enter a valid email address'" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Quality Checklist
Story Readiness
INVEST CRITERIA:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EVALUATING STORY QUALITY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β I - INDEPENDENT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Can be developed without other stories ββ
β β β No circular dependencies ββ
β β β Can be prioritized freely ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β N - NEGOTIABLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Details can be discussed ββ
β β β Not a contract, a conversation ββ
β β β Implementation flexible ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β V - VALUABLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Delivers value to user or business ββ
β β β "So that" explains clear benefit ββ
β β β Stakeholder understands value ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β E - ESTIMABLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Team can estimate effort ββ
β β β Scope is understood ββ
β β β Technical approach is clear enough ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β S - SMALL: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Completable in days, not weeks ββ
β β β Single sprint maximum ββ
β β β Can be split if too large ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β T - TESTABLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β Acceptance criteria are verifiable ββ
β β β QA can write test cases from criteria ββ
β β β Success/failure is objective, not subjective ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ