13 KiB
name, description, version
| name | description | version |
|---|---|---|
| User Story Creation | This skill should be used when the user asks to "create user stories", "write user stories", "break down epic into stories", "define user stories", "what stories do I need", or when they have epics defined and need to decompose them into specific, valuable user stories following INVEST criteria. | 0.2.0 |
User Story Creation
Overview
User story creation transforms epics into specific, actionable requirements that describe functionality from a user's perspective. Well-written user stories follow the INVEST criteria and provide clear value while remaining small enough to be completed in a single iteration. This skill guides the process of breaking down epics into high-quality user stories.
Purpose
User stories serve as the detailed requirements layer:
- Above: Epics (major capabilities)
- Stories: Specific user-facing functionality
- Below: Tasks (implementation steps)
Well-written user stories:
- Describe functionality from user perspective
- Deliver independent, testable value
- Fit within a single iteration/sprint
- Enable detailed estimation and planning
- Facilitate conversation and refinement
When to Use This Skill
Use user story creation when:
- An epic exists and needs to be broken into stories
- User asks for detailed requirements for a capability
- Planning an iteration and need to define work
- Refining or adding stories to an existing epic
- Validating that stories cover the full epic scope
Prerequisite: Epic must exist before creating stories. If no epic exists, use epic-identification skill first.
User Story Format
Standard Template
As a [user type/persona],
I want [goal/desire],
So that [benefit/value].
Components:
- User type: WHO wants this (specific role or persona)
- Goal: WHAT they want to do (capability or action)
- Benefit: WHY it matters (value or outcome)
Example Stories
Good:
As a marketing manager,
I want to filter campaign data by date range,
So that I can analyze performance for specific time periods.
Poor:
As a user, (too vague—which user?)
I want to see data, (too vague—what data? how?)
So that I can use the app. (no specific benefit)
When to Deviate from Template
The template is a guideline, not a requirement:
- Use it when it clarifies value and perspective
- Deviate when it adds unnecessary words
- Alternative: Simple title + detailed description
Alternative format:
- Title: "Filter campaigns by date range"
- Description: Detailed explanation of functionality and value
INVEST Criteria
Every user story should meet INVEST criteria:
I - Independent
Stories should be completable without depending on other stories:
Why: Enables flexible prioritization and parallel work
How to achieve:
- Minimize dependencies between stories
- If dependencies exist, sequence stories appropriately
- Consider vertical slicing (full stack per story) vs. horizontal
Example of dependence issue:
- Story 1: "Build database schema"
- Story 2: "Create API endpoints"
- Story 3: "Build UI"
Better (independent slices):
- Story 1: "User can view their profile data"
- Story 2: "User can edit their profile name"
- Story 3: "User can upload profile photo"
N - Negotiable
Details are open for discussion, not fixed contracts:
Why: Encourages collaboration and emergence of best solution
How to achieve:
- Focus on WHAT and WHY, not HOW
- Leave implementation details for later
- Specify constraints, not solutions
Negotiable: "Display campaign performance metrics in an easy-to-scan format"
Too prescriptive: "Display campaign performance in a table with exactly 5 columns: Name, Clicks, Cost, ROI, Status, using blue headers and zebra-striped rows"
V - Valuable
Must deliver value to users or stakeholders:
Why: Every story should move toward vision/epic goals
How to achieve:
- Describe user-facing value
- Avoid purely technical stories without user impact
- If technical work is needed, frame it in terms of enabling user value
Valuable: "User can reset their password via email link"
Low value: "Refactor authentication module" (unless it enables something valuable)
E - Estimable
Team can estimate size/effort:
Why: Enables planning and prioritization
How to achieve:
- Provide enough detail to understand scope
- Clarify unknowns before committing to story
- If not estimable, spike or research story may be needed
Estimable: "User can filter campaigns by date range (start date, end date)"
Not estimable: "Improve campaign filtering" (too vague—how much improvement?)
S - Small
Fits within a single iteration:
Why: Enables frequent delivery and feedback
How to achieve:
- Aim for 1-5 days of work
- If larger, split into smaller stories
- Use vertical slicing to create small, valuable increments
Right size: "User can export campaign data to CSV format"
Too large: "User can export campaign data to any format with custom fields and scheduling"
Split into:
- "User can export campaign data to CSV"
- "User can select which fields to include in export"
- "User can schedule recurring exports"
T - Testable
Clear acceptance criteria enable verification:
Why: Know when story is complete and working correctly
How to achieve:
- Define specific, observable outcomes
- Include acceptance criteria in story description
- Focus on behavior, not implementation
Testable: "User can filter campaigns by date range"
- AC: Date pickers for start and end dates
- AC: Campaigns outside range are hidden
- AC: Validation prevents invalid date ranges
Not testable: "System should be performant" (what does performant mean?)
Story Creation Process
Step 1: Review the Epic
Understand the epic being broken down:
Key Actions:
- Read epic issue in GitHub Projects
- Understand scope, value, success criteria
- Identify user types and journeys covered
Step 2: Identify User Journeys
Map out the user flows within the epic:
Techniques:
Task Analysis:
- What tasks do users need to complete?
- What's the sequence of actions?
- Example: "View → Filter → Analyze → Export" for analytics epic
Scenario Mapping:
- What scenarios or use cases exist?
- What different paths might users take?
- Example: "First-time setup" vs. "Daily usage" vs. "Troubleshooting"
User Type Breakdown:
- Do different user types need different stories?
- Admin vs. end-user flows
- Power user vs. casual user needs
Step 3: Draft Initial Stories
Create draft stories covering the epic:
Start with happy paths:
- Core functionality for primary scenarios
- Most common user needs
- Essential capabilities
Then add edge cases and variations:
- Error handling
- Alternative flows
- Advanced features
Ensure coverage:
- All epic scope is covered by stories
- No gaps in user journeys
- All success criteria are addressable
Step 4: Apply INVEST Criteria
Review each story against INVEST:
Refine for Independence:
- Can this story be completed without others?
- If not, can it be reframed or split?
Check Value:
- Does this deliver something users care about?
- Can we articulate the "so that" benefit clearly?
Verify Size:
- Is this 1-5 days of work?
- If larger, how can it be split?
Add Testability:
- What are the acceptance criteria?
- How will we verify this works?
Step 5: Add Acceptance Criteria
For each story, define clear acceptance criteria:
Format:
Given [context], When [action], Then [expected outcome].
Or simple checklist:
- Criterion 1
- Criterion 2
- Criterion 3
Example:
Story: "User can filter campaigns by date range"
Acceptance Criteria:
- Date picker UI for start date and end date
- Only campaigns with activity in date range are shown
- Selecting invalid range (end before start) shows error message
- Clearing filters shows all campaigns again
Step 6: Prioritize Stories
Determine sequence and priority:
Sequencing:
- Which stories must come first (dependencies)?
- What's the logical build-up of functionality?
Prioritization:
- Which stories deliver most value?
- Which are riskiest (do early for learning)?
- Use MoSCoW framework (prioritization skill)
Step 7: Create Story Issues in GitHub Projects
For each story, create a GitHub issue in the relevant GitHub Project:
Issue Title: "[Story summary in user voice]"
Issue Description: Full story with acceptance criteria using template
Custom Fields:
- Type: Story
- Priority: [Must Have / Should Have / Could Have]
- Status: Not Started
Labels:
type:storypriority:[moscow-level]
Parent: Link to Epic issue as parent
All tasks for this story will be created as child issues.
Story Splitting Techniques
When stories are too large, use these techniques:
Workflow Steps
Split by steps in a workflow:
Large: "User can manage their subscription"
Split:
- "User can view subscription details"
- "User can upgrade subscription plan"
- "User can cancel subscription"
Operations (CRUD)
Split by different operations:
Large: "User can manage team members"
Split:
- "User can invite team members"
- "User can view team member list"
- "User can remove team members"
- "User can change team member roles"
Business Rules
Split by different rules or variations:
Large: "System applies discount codes"
Split:
- "System applies percentage discount codes"
- "System applies fixed-amount discount codes"
- "System applies buy-one-get-one promotions"
Happy Path vs. Variations
Start with simple case, add complexity:
Large: "User can upload files"
Split:
- "User can upload single image file (basic case)"
- "User can upload multiple files at once"
- "User can drag and drop files to upload"
- "System validates file types and shows errors"
Data Variations
Split by different data types or sources:
Large: "System imports contact data"
Split:
- "System imports contacts from CSV file"
- "System imports contacts from Google Contacts"
- "System imports contacts from Outlook"
Platforms/Interfaces
Split by different interfaces:
Large: "User receives notifications"
Split:
- "User receives in-app notifications"
- "User receives email notifications"
- "User receives SMS notifications"
Best Practices
Write from User Perspective
Focus on what users see and experience:
❌ "Implement database indexes for performance" ✅ "Campaign list loads in under 2 seconds"
Keep Stories Testable
Always include acceptance criteria:
Minimum:
- 2-5 acceptance criteria per story
- Specific, observable outcomes
- Testable without looking at code
Avoid Technical Tasks as Stories
Technical work should be tasks within user-facing stories:
❌ Story: "Set up CI/CD pipeline" ✅ Story: "User can see deployment status", Tasks include CI/CD setup
One Story, One Goal
Each story should have singular focus:
❌ "User can edit profile and change password and upload avatar" ✅ Three separate stories
Include Non-Functional Requirements
Don't forget quality attributes:
- Performance requirements
- Security constraints
- Accessibility standards
- Usability expectations
Common Pitfalls to Avoid
Stories Too Large
Watch for stories that take weeks, not days:
- Split using techniques above
- Aim for 1-5 days of work
- Smaller is better than larger
Stories Too Small
Avoid stories that are trivial or just tasks:
❌ "Add Submit button to form" (this is a task) ✅ "User can submit contact form with validation"
Missing Acceptance Criteria
Every story needs testability:
- How do we know when it's done?
- What are the specific behaviors?
- What should we test?
Pure Technical Stories
Frame technical work in terms of user value:
❌ "Refactor payment module" ✅ "Payment processing completes in under 3 seconds" (enables user value)
Quick Reference: Story Creation Flow
- Review Epic → Understand scope, value, success criteria
- Identify Journeys → Map user flows and scenarios
- Draft Stories → Cover happy paths, then edge cases
- Apply INVEST → Check and refine against criteria
- Add Acceptance Criteria → Define testability for each story
- Prioritize → Sequence and rank by value
- Create Issues → Add to GitHub Projects as children of epic
- Proceed → Move to task breakdown for each story
Additional Resources
Reference Files
For detailed story templates:
${CLAUDE_PLUGIN_ROOT}/skills/user-story-creation/references/story-template.md- Complete user story template with acceptance criteria formats
Next Steps
After creating user stories:
- Create story issues in GitHub Projects (as children of epic issue)
- Prioritize stories using the prioritization skill
- Select highest-priority story and proceed to task breakdown
- Iterate through all stories, creating tasks for each
User stories are the bridge between epics and executable work—invest time to make them clear, valuable, and testable.