
Agile Product Owner
- 885 installs
- 23.5k repo stars
- Updated July 17, 2026
- alirezarezvani/claude-skills
agile-product-owner is a Claude skill that generates complete, structured sprint planning documents turning high-level goals into prioritized, capacity-aware task lists for development agents or teams.
About
agile-product-owner is a skill from alirezarezvani/claude-skills that produces structured sprint planning documents from high-level objectives. It outputs sprint info tables with dates and goals, team capacity breakdowns by member availability, and prioritized task lists sized to person-day capacity. Developers and engineering leads reach for it when they need to convert vague roadmap items into agent-executable or team-executable sprint backlogs. The template includes sprint goal expansion, done criteria, and capacity notes for PTO or on-call constraints.
- Generates full sprint planning documents with goals, capacity, velocity, and prioritized stories
- Includes structured tables for team capacity, selected stories, dependencies, and risks
- Enforces Scrum-style definitions of done and clear sprint outcomes
- Produces ready-to-use artifacts that serve as hard-gate before implementation sprints
- Works for both solo indie builders and small coordinated teams
Agile Product Owner by the numbers
- 885 all-time installs (skills.sh)
- +7 installs in the week ending Jul 29, 2026 (Skillselion tracking)
- Ranked #535 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/alirezarezvani/claude-skills --skill agile-product-ownerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 885 |
|---|---|
| repo stars | ★ 23.5k |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 17, 2026 |
| Repository | alirezarezvani/claude-skills ↗ |
How do you turn goals into sprint tasks?
Generate complete, structured sprint planning documents that turn high-level goals into prioritized, capacity-aware task lists for agents or small teams.
Who is it for?
Tech leads and product owners who need structured sprint planning documents that agents or engineers can execute against immediately.
Skip if: Teams practicing kanban without sprints who only need continuous backlog grooming without sprint boundaries or capacity tables.
When should I use this skill?
User asks for sprint planning, sprint backlog creation, capacity-aware task breakdown, or agile product owner documentation.
What you get
A complete sprint planning document with sprint goal, team capacity table, and prioritized capacity-aware task list.
- Sprint planning document
- Prioritized capacity-aware task list
By the numbers
- Outputs sprint document sections for sprint info, sprint goal, team capacity, and prioritized tasks
Files
Agile Product Owner
Backlog management and sprint execution toolkit for product owners, including user story generation, acceptance criteria patterns, sprint planning, and velocity tracking.
---
Table of Contents
- What Makes This Skill Different
- User Story Generation Workflow
- Acceptance Criteria Patterns
- Epic Breakdown Workflow
- Sprint Planning Workflow
- Backlog Prioritization
- Reference Documentation
- Tools
---
What Makes This Skill Different
- Capacity math that aligns with reality: sprint capacity is based on velocity × availability factor, not hope.
- Acceptance criteria scaled by story size: minimum AC counts map to story points to avoid under-spec'ing large items.
- Weighted prioritization that stays consistent: value 40%, impact 30%, risk 15%, effort 15% keeps tradeoffs explicit.
- Systematic epic splitting techniques: five concrete split patterns prevent oversized stories.
- INVEST validation baked into workflows: every story includes a validation step, not just guidance.
User Story Generation Workflow
Create INVEST-compliant user stories from requirements:
1. Identify the persona (who benefits from this feature) 2. Define the action or capability needed 3. Articulate the benefit or value delivered 4. Write acceptance criteria using Given-When-Then 5. Estimate story points using Fibonacci scale 6. Validate against INVEST criteria 7. Add to backlog with priority 8. Validation: Story passes all INVEST criteria; acceptance criteria are testable
User Story Template
As a [persona],
I want to [action/capability],
So that [benefit/value].Example:
As a marketing manager,
I want to export campaign reports to PDF,
So that I can share results with stakeholders who don't have system access.Story Types
| Type | Template | Example |
|---|---|---|
| Feature | As a [persona], I want to [action] so that [benefit] | As a user, I want to filter search results so that I find items faster |
| Improvement | As a [persona], I need [capability] to [goal] | As a user, I need faster page loads to complete tasks without frustration |
| Bug Fix | As a [persona], I expect [behavior] when [condition] | As a user, I expect my cart to persist when I refresh the page |
| Enabler | As a developer, I need to [technical task] to enable [capability] | As a developer, I need to implement caching to enable instant search |
Persona Reference
| Persona | Typical Needs | Context |
|---|---|---|
| End User | Efficiency, simplicity, reliability | Daily feature usage |
| Administrator | Control, visibility, security | System management |
| Power User | Automation, customization, shortcuts | Expert workflows |
| New User | Guidance, learning, safety | Onboarding |
---
Acceptance Criteria Patterns
Write testable acceptance criteria using Given-When-Then format.
Given-When-Then Template
Given [precondition/context],
When [action/trigger],
Then [expected outcome].Examples:
Given the user is logged in with valid credentials,
When they click the "Export" button,
Then a PDF download starts within 2 seconds.
Given the user has entered an invalid email format,
When they submit the registration form,
Then an inline error message displays "Please enter a valid email address."
Given the shopping cart contains items,
When the user refreshes the browser,
Then the cart contents remain unchanged.Acceptance Criteria Checklist
Each story should include criteria for:
| Category | Example |
|---|---|
| Happy Path | Given valid input, When submitted, Then success message displayed |
| Validation | Should reject input when required field is empty |
| Error Handling | Must show user-friendly message when API fails |
| Performance | Should complete operation within 2 seconds |
| Accessibility | Must be navigable via keyboard only |
Minimum Criteria by Story Size
| Story Points | Minimum AC Count |
|---|---|
| 1-2 | 3-4 criteria |
| 3-5 | 4-6 criteria |
| 8 | 5-8 criteria |
| 13+ | Split the story |
See references/user-story-templates.md for complete template library.
---
Epic Breakdown Workflow
Break epics into deliverable sprint-sized stories:
1. Define epic scope and success criteria 2. Identify all personas affected by the epic 3. List all capabilities needed for each persona 4. Group capabilities into logical stories 5. Validate each story is ≤8 points 6. Identify dependencies between stories 7. Sequence stories for incremental delivery 8. Validation: Each story delivers standalone value; total stories cover epic scope
Splitting Techniques
| Technique | When to Use | Example |
|---|---|---|
| By workflow step | Linear process | "Checkout" → "Add to cart" + "Enter payment" + "Confirm order" |
| By persona | Multiple user types | "Dashboard" → "Admin dashboard" + "User dashboard" |
| By data type | Multiple inputs | "Import" → "Import CSV" + "Import Excel" |
| By operation | CRUD functionality | "Manage users" → "Create" + "Edit" + "Delete" |
| Happy path first | Risk reduction | "Feature" → "Basic flow" + "Error handling" + "Edge cases" |
Epic Example
Epic: User Dashboard
Breakdown:
Epic: User Dashboard (34 points total)
├── US-001: View key metrics (5 pts) - End User
├── US-002: Customize layout (5 pts) - Power User
├── US-003: Export data to CSV (3 pts) - End User
├── US-004: Share with team (5 pts) - End User
├── US-005: Set up alerts (5 pts) - Power User
├── US-006: Filter by date range (3 pts) - End User
├── US-007: Admin overview (5 pts) - Admin
└── US-008: Enable caching (3 pts) - Enabler---
Sprint Planning Workflow
Plan sprint capacity and select stories:
1. Calculate team capacity (velocity × availability) 2. Review sprint goal with stakeholders 3. Select stories from prioritized backlog 4. Fill to 80-85% of capacity (committed) 5. Add stretch goals (10-15% additional) 6. Identify dependencies and risks 7. Break complex stories into tasks 8. Validation: Committed points ≤85% capacity; all stories have acceptance criteria
Capacity Calculation
Sprint Capacity = Average Velocity × Availability Factor
Example:
Average Velocity: 30 points
Team availability: 90% (one member partially out)
Adjusted Capacity: 27 points
Committed: 23 points (85% of 27)
Stretch: 4 points (15% of 27)Availability Factors
| Scenario | Factor |
|---|---|
| Full sprint, no PTO | 1.0 |
| One team member out 50% | 0.9 |
| Holiday during sprint | 0.8 |
| Multiple members out | 0.7 |
Sprint Loading Template
Sprint Capacity: 27 points
Sprint Goal: [Clear, measurable objective]
COMMITTED (23 points):
[H] US-001: User dashboard (5 pts)
[H] US-002: Export feature (3 pts)
[H] US-003: Search filter (5 pts)
[M] US-004: Settings page (5 pts)
[M] US-005: Help tooltips (3 pts)
[L] US-006: Theme options (2 pts)
STRETCH (4 points):
[L] US-007: Sort options (2 pts)
[L] US-008: Print view (2 pts)See references/sprint-planning-guide.md for complete planning procedures.
---
Backlog Prioritization
Prioritize backlog using value and effort assessment.
Priority Levels
| Priority | Definition | Sprint Target |
|---|---|---|
| Critical | Blocking users, security, data loss | Immediate |
| High | Core functionality, key user needs | This sprint |
| Medium | Improvements, enhancements | Next 2-3 sprints |
| Low | Nice-to-have, minor improvements | Backlog |
Prioritization Factors
| Factor | Weight | Questions |
|---|---|---|
| Business Value | 40% | Revenue impact? User demand? Strategic alignment? |
| User Impact | 30% | How many users? How frequently used? |
| Risk/Dependencies | 15% | Technical risk? External dependencies? |
| Effort | 15% | Size? Complexity? Uncertainty? |
INVEST Criteria Validation
Before adding to sprint, validate each story:
| Criterion | Question | Pass If... |
|---|---|---|
| Independent | Can this be developed without other uncommitted stories? | No blocking dependencies |
| Negotiable | Is the implementation flexible? | Multiple approaches possible |
| Valuable | Does this deliver user or business value? | Clear benefit in "so that" |
| Estimable | Can the team estimate this? | Understood well enough to size |
| Small | Can this complete in one sprint? | ≤8 story points |
| Testable | Can we verify this is done? | Clear acceptance criteria |
---
Reference Documentation
User Story Templates
references/user-story-templates.md contains:
- Standard story formats by type (feature, improvement, bug fix, enabler)
- Acceptance criteria patterns (Given-When-Then, Should/Must/Can)
- INVEST criteria validation checklist
- Story point estimation guide (Fibonacci scale)
- Common story antipatterns and fixes
- Story splitting techniques
Sprint Planning Guide
references/sprint-planning-guide.md contains:
- Sprint planning meeting agenda
- Capacity calculation formulas
- Backlog prioritization framework (WSJF)
- Sprint ceremony guides (standup, review, retro)
- Velocity tracking and burndown patterns
- Definition of Done checklist
- Sprint metrics and targets
---
Tools
User Story Generator
# Generate stories from sample epic
python scripts/user_story_generator.py
# Plan sprint with capacity
python scripts/user_story_generator.py sprint 30Generates:
- INVEST-compliant user stories
- Given-When-Then acceptance criteria
- Story point estimates (Fibonacci scale)
- Priority assignments
- Sprint loading with committed and stretch items
Sample Output
USER STORY: USR-001
========================================
Title: View Key Metrics
Type: story
Priority: HIGH
Points: 5
Story:
As a End User, I want to view key metrics and KPIs
so that I can save time and work more efficiently
Acceptance Criteria:
1. Given user has access, When they view key metrics, Then the result is displayed
2. Should validate input before processing
3. Must show clear error message when action fails
4. Should complete within 2 seconds
5. Must be accessible via keyboard navigation
INVEST Checklist:
✓ Independent
✓ Negotiable
✓ Valuable
✓ Estimable
✓ Small
✓ Testable---
Sprint Metrics
Track sprint health and team performance.
Key Metrics
| Metric | Formula | Target |
|---|---|---|
| Velocity | Points completed / sprint | Stable ±10% |
| Commitment Reliability | Completed / Committed | >85% |
| Scope Change | Points added or removed mid-sprint | <10% |
| Carryover | Points not completed | <15% |
Velocity Tracking
Sprint 1: 25 points
Sprint 2: 28 points
Sprint 3: 30 points
Sprint 4: 32 points
Sprint 5: 29 points
------------------------
Average Velocity: 28.8 points
Trend: Stable
Planning: Commit to 24-26 pointsDefinition of Done
Story is complete when:
- [ ] Code complete and peer reviewed
- [ ] Unit tests written and passing
- [ ] Acceptance criteria verified
- [ ] Documentation updated
- [ ] Deployed to staging environment
- [ ] Product Owner accepted
- [ ] No critical bugs remaining
Related Skills
- Scrum Master (
project-management/scrum-master/) — Velocity data and sprint ceremonies complement backlog management - Product Manager Toolkit (
product-team/product-manager-toolkit/) — RICE prioritization feeds backlog ordering
Sprint Planning Document
Sprint Info
| Field | Value |
|---|---|
| Sprint | Sprint [Number] |
| Dates | [Start Date] - [End Date] |
| Sprint Goal | [One sentence describing what this sprint achieves] |
| Scrum Master | [Name] |
| Product Owner | [Name] |
---
Sprint Goal
[Expand on the sprint goal. What is the single most important outcome? What does "done" look like for this sprint? 2-3 sentences.]
---
Team Capacity
| Team Member | Available Days | Notes |
|---|---|---|
| [Name] | [X] / [Total] | [PTO, training, on-call, etc.] |
| [Name] | [X] / [Total] | |
| [Name] | [X] / [Total] |
Total Capacity: [X] person-days Historical Velocity: [X] story points (avg of last 3 sprints) Planned Velocity: [X] story points (adjusted for capacity)
---
Selected Stories
| # | Story | Points | Assignee | Priority | Status |
|---|---|---|---|---|---|
| 1 | [Story title with ticket link] | [SP] | [Name] | Must Have | To Do |
| 2 | [Story title with ticket link] | [SP] | [Name] | Must Have | To Do |
| 3 | [Story title with ticket link] | [SP] | [Name] | Should Have | To Do |
| 4 | [Story title with ticket link] | [SP] | [Name] | Nice to Have | To Do |
Total Planned: [X] story points
---
Dependencies
| Dependency | Blocking Story | Owner | Status | Due Date |
|---|---|---|---|---|
| [External API ready] | [Story #] | [Name/Team] | [Status] | [Date] |
| [Design review complete] | [Story #] | [Name] | [Status] | [Date] |
---
Risks
| Risk | Impact | Likelihood | Mitigation |
|---|---|---|---|
| [Risk description] | High/Med/Low | High/Med/Low | [Plan] |
| [Risk description] | High/Med/Low | High/Med/Low | [Plan] |
---
Definition of Done
- [ ] Code complete and peer reviewed
- [ ] Unit tests written and passing
- [ ] Acceptance criteria verified
- [ ] Documentation updated (if applicable)
- [ ] Deployed to staging environment
- [ ] QA sign-off received
- [ ] Product Owner acceptance
---
Sprint Ceremonies
| Ceremony | Day/Time | Duration |
|---|---|---|
| Daily Standup | [Day] [Time] | 15 min |
| Sprint Review | [Date] [Time] | 60 min |
| Sprint Retrospective | [Date] [Time] | 60 min |
User Story
Story Info
| Field | Value |
|---|---|
| Title | [Short descriptive title] |
| Epic | [Parent epic name/link] |
| Story Points | [Estimate] |
| Priority | Must Have / Should Have / Nice to Have |
| Assignee | [Name] |
| Sprint | [Sprint number] |
---
User Story
As a [type of user/role],
I want [capability or feature],
So that [benefit or value I receive].
---
Acceptance Criteria
Scenario 1: [Happy Path]
- Given [precondition or context]
- When [action the user takes]
- Then [expected outcome]
Scenario 2: [Alternative Path]
- Given [precondition or context]
- When [action the user takes]
- Then [expected outcome]
Scenario 3: [Edge Case / Error]
- Given [precondition or context]
- When [action the user takes]
- Then [expected error handling or outcome]
---
Notes
- [Technical notes, design references, API details]
- [Dependencies on other stories or external systems]
- [Out of scope items for this story]
- [Links to mockups, prototypes, or design files]
---
Definition of Done
- [ ] Acceptance criteria met
- [ ] Code reviewed and approved
- [ ] Tests written and passing
- [ ] Documentation updated
- [ ] Product Owner accepted
Sprint Planning Guide
Sprint planning workflows, capacity calculation, and backlog management.
---
Table of Contents
- Sprint Planning Workflow
- Capacity Planning
- Backlog Prioritization
- Sprint Ceremonies
- Metrics and Tracking
---
Sprint Planning Workflow
Pre-Planning (1-2 Days Before)
1. Review and refine backlog items for upcoming sprint 2. Ensure top items have acceptance criteria 3. Validate story point estimates with team 4. Identify dependencies between stories 5. Confirm team availability for sprint 6. Validation: Top 1.5x capacity of stories are refined and estimated
Sprint Planning Meeting
Duration: 2 hours for 2-week sprint
Agenda:
| Time | Activity | Participants |
|---|---|---|
| 0:00-0:15 | Review sprint goal and priorities | PO presents |
| 0:15-0:45 | Discuss top backlog items | Team asks questions |
| 0:45-1:15 | Team selects stories for sprint | Team decides |
| 1:15-1:45 | Break down stories into tasks | Team collaborates |
| 1:45-2:00 | Confirm commitment and identify risks | All |
Planning Checklist
Before Planning:
- [ ] Backlog groomed with top items refined
- [ ] Previous sprint retrospective actions reviewed
- [ ] Team capacity calculated
- [ ] Dependencies identified
- [ ] Sprint goal drafted
During Planning:
- [ ] Sprint goal agreed
- [ ] Stories selected fit within capacity
- [ ] Acceptance criteria reviewed for each story
- [ ] Tasks identified for complex stories
- [ ] Risks and blockers discussed
After Planning:
- [ ] Sprint backlog visible to all
- [ ] Sprint goal communicated
- [ ] Calendar blocked for ceremonies
- [ ] Dependencies communicated to other teams
---
Capacity Planning
Team Capacity Calculation
Sprint Capacity = (Team Members × Sprint Days × Hours/Day × Focus Factor)
÷ Hours per Story Point
Simplified Version:
Sprint Capacity = Average Velocity × Availability FactorAvailability Factors
| Scenario | Factor | Example |
|---|---|---|
| Full sprint, no PTO | 1.0 | 30 points if velocity = 30 |
| 1 team member out 50% | 0.9 | 27 points |
| Holiday during sprint | 0.8 | 24 points |
| Multiple team members out | 0.7 | 21 points |
| Major release/on-call | 0.75 | 22-23 points |
Capacity Buffer Rules
| Commitment Level | % of Velocity | Purpose |
|---|---|---|
| Committed | 80-85% | High confidence delivery |
| Stretch | 10-15% | Optional if things go well |
| Buffer | 5-10% | Unplanned work, bugs |
Sprint Loading Example
Team Velocity: 30 points/sprint
Availability: 90% (one team member partially out)
Adjusted Velocity: 27 points
Sprint Loading:
- Committed work: 23 points (85% of 27)
- Stretch goals: 4 points (15% of 27)
- Buffer: Remaining capacity for bugs/support
Story Selection:
[H] US-001: User dashboard (5 pts) ← Committed
[H] US-002: Export feature (3 pts) ← Committed
[H] US-003: Search filter (5 pts) ← Committed
[M] US-004: Settings page (5 pts) ← Committed
[M] US-005: Help tooltips (3 pts) ← Committed
[L] US-006: Theme options (2 pts) ← Committed
------------------------
Committed Total: 23 points
[L] US-007: Sort options (2 pts) ← Stretch
[L] US-008: Print view (2 pts) ← Stretch
------------------------
Stretch Total: 4 points---
Backlog Prioritization
Priority Framework
| Priority | Definition | SLA |
|---|---|---|
| Critical | Blocking users, security, data loss | Immediate |
| High | Core functionality, key user needs | This sprint |
| Medium | Improvements, enhancements | Next 2-3 sprints |
| Low | Nice-to-have, minor improvements | Backlog |
Prioritization Factors
| Factor | Weight | Questions |
|---|---|---|
| Business Value | 40% | Revenue impact? User demand? Strategic? |
| User Impact | 30% | How many users? How often used? |
| Risk/Dependencies | 15% | Technical risk? External dependencies? |
| Effort | 15% | Size? Complexity? Uncertainty? |
WSJF (Weighted Shortest Job First)
For larger items, use SAFe's WSJF:
WSJF = Cost of Delay / Job Duration
Cost of Delay = User Value + Time Criticality + Risk Reduction
Scale: 1, 2, 3, 5, 8, 13, 20
Example:
Feature A: CoD = 13, Duration = 5 → WSJF = 2.6
Feature B: CoD = 8, Duration = 2 → WSJF = 4.0 ← Higher priorityBacklog Organization
| Section | Content | Review Frequency |
|---|---|---|
| Sprint Backlog | Committed for current sprint | Daily |
| Ready | Refined, estimated, prioritized | Each planning |
| Grooming | Needs refinement | Weekly |
| Icebox | Future consideration | Monthly |
| Archive | Completed or obsolete | Quarterly |
---
Sprint Ceremonies
Daily Standup
Duration: 15 minutes max Format: Each team member answers:
1. What did I complete yesterday? 2. What will I work on today? 3. What blockers do I have?
Product Owner Role:
- Listen for blockers needing PO action
- Answer clarifying questions
- Note scope concerns for offline discussion
- Update stakeholders on progress
Backlog Refinement (Grooming)
Duration: 1-2 hours per week Timing: Mid-sprint
Agenda:
| Time | Activity |
|---|---|
| 0:00-0:15 | Review upcoming priorities |
| 0:15-0:45 | Detail acceptance criteria for top items |
| 0:45-1:15 | Estimate new stories |
| 1:15-1:30 | Split large stories |
Readiness Criteria:
- [ ] Clear user story format (As a... I want... So that...)
- [ ] Acceptance criteria defined (Given-When-Then)
- [ ] Story point estimate agreed
- [ ] Dependencies identified
- [ ] Fits in one sprint (≤8 points)
Sprint Review (Demo)
Duration: 1 hour for 2-week sprint
Agenda:
| Time | Activity | Lead |
|---|---|---|
| 0:00-0:05 | Sprint goal recap | PO |
| 0:05-0:40 | Demo completed work | Team |
| 0:40-0:50 | Stakeholder feedback | Stakeholders |
| 0:50-1:00 | Roadmap update | PO |
Demo Checklist:
- [ ] Only demo completed (done-done) stories
- [ ] Use production or production-like environment
- [ ] Show user perspective, not technical details
- [ ] Collect feedback for backlog items
- [ ] Thank team for accomplishments
Sprint Retrospective
Duration: 1.5 hours for 2-week sprint
Format Options:
| Format | Structure |
|---|---|
| Start-Stop-Continue | What to begin, end, keep doing |
| 4Ls | Liked, Learned, Lacked, Longed for |
| Sailboat | Wind (helpers), Anchors (blockers), Rocks (risks) |
| Mad-Sad-Glad | Emotional state about sprint events |
Action Items:
- Maximum 2-3 improvement actions per retro
- Assign owner and due date
- Review previous actions at start of next retro
---
Metrics and Tracking
Sprint Metrics
| Metric | Formula | Target |
|---|---|---|
| Velocity | Points completed / sprint | Stable ±10% |
| Commitment Reliability | Completed / Committed | >85% |
| Scope Change | Points added or removed | <10% |
| Carryover | Points not completed | <15% |
| Bug Ratio | Bug points / Total points | <20% |
Velocity Tracking
Sprint Velocity Trend:
Sprint 1: 25 points
Sprint 2: 28 points
Sprint 3: 30 points
Sprint 4: 32 points
Sprint 5: 29 points
------------------------
Average: 28.8 points
Trend: Stable (±10%)
Planning Recommendation: Plan for 26-29 points committedBurndown Chart
Track progress within sprint:
Day Ideal Actual Status
--- ----- ------ ------
0 30 30 On track
2 24 26 Slightly behind
4 18 20 Behind
6 12 14 Recovering
8 6 6 On track
10 0 2 Minor carryoverBurndown Patterns:
| Pattern | Meaning | Action |
|---|---|---|
| Flat start | No progress early | Check blockers |
| Late drop | Last-minute completion | Improve WIP limits |
| Scope increase | Line moves up | Address scope creep |
| Early completion | Done before sprint end | Pull stretch items |
Definition of Done
Story is complete when:
- [ ] Code complete and reviewed
- [ ] Unit tests written and passing
- [ ] Integration tests passing
- [ ] Acceptance criteria verified
- [ ] Documentation updated
- [ ] Deployed to staging
- [ ] PO accepted
- [ ] No critical bugs
Release Metrics
| Metric | Definition | Target |
|---|---|---|
| Lead Time | Idea to production | <2 sprints |
| Cycle Time | Development start to done | <1 sprint |
| Throughput | Stories completed/sprint | Increasing |
| Defect Escape | Bugs found in production | Decreasing |
User Story Templates
Standard templates, acceptance criteria patterns, and INVEST validation for user stories.
---
Table of Contents
---
Story Templates
Standard User Story Format
As a [persona],
I want to [action/capability],
So that [benefit/value].Template by Story Type
Feature Story:
As a [persona],
I want to [perform action]
So that [I achieve benefit].
Example:
As a marketing manager,
I want to export campaign reports to PDF
So that I can share results with stakeholders who don't have system access.Improvement Story:
As a [persona],
I need [capability/improvement]
To [achieve goal more effectively].
Example:
As a sales rep,
I need faster search results
To find customer records without interrupting calls.Bug Fix Story:
As a [persona],
I expect [correct behavior]
When [specific condition].
Example:
As a user,
I expect my session to remain active
When navigating between dashboard tabs.Integration Story:
As a [persona],
I want to [integrate/connect with system]
So that [workflow improvement].
Example:
As an admin,
I want to sync user data with our LDAP server
So that employees are automatically provisioned.Enabler Story (Technical):
As a developer,
I need to [technical requirement]
To enable [user-facing capability].
Example:
As a developer,
I need to implement caching layer
To enable sub-second dashboard load times.Persona Library
| Persona | Typical Needs | Context |
|---|---|---|
| End User | Efficiency, simplicity, reliability | Daily core feature usage |
| Administrator | Control, visibility, security | System management |
| Power User | Automation, customization, shortcuts | Expert workflows |
| New User | Guidance, learning, safety | Onboarding experience |
| Manager | Reporting, oversight, delegation | Team coordination |
| External User | Access, security, documentation | Customer/partner usage |
---
Acceptance Criteria Patterns
Given-When-Then (Gherkin)
Preferred format for testable acceptance criteria:
Given [precondition/context],
When [action/trigger],
Then [expected outcome].Examples:
Given the user is logged in with valid credentials,
When they click the "Export" button,
Then a PDF download starts within 2 seconds.
Given the user has entered invalid email format,
When they submit the registration form,
Then an inline error message displays "Please enter a valid email address."
Given the daily sync job has not run in 24 hours,
When the scheduler triggers at midnight,
Then all pending records are synchronized and logged.Should/Must/Can Patterns
Should (Expected Behavior):
Should [behavior] when [condition].
Example:
Should display loading spinner when API call exceeds 500ms.Must (Hard Requirement):
Must [requirement] to [achieve outcome].
Example:
Must encrypt all data at rest to meet compliance requirements.Can (Capability):
Can [capability] without [negative outcome].
Example:
Can undo last action without losing other changes.Acceptance Criteria Checklist
Each story should have acceptance criteria covering:
| Category | Example Criterion |
|---|---|
| Happy Path | Given valid input, When submitted, Then success message displayed |
| Validation | Should reject input when required field is empty |
| Error Handling | Must show user-friendly message when API fails |
| Performance | Should complete operation within 2 seconds |
| Accessibility | Must be navigable via keyboard only |
| Security | Should not expose sensitive data in URL parameters |
Minimum Acceptance Criteria Count
| Story Size (Points) | Minimum AC Count |
|---|---|
| 1-2 | 3-4 |
| 3-5 | 4-6 |
| 8 | 5-8 |
| 13+ | Split the story |
---
INVEST Criteria
INVEST Validation Checklist
| Criterion | Question | Pass If... |
|---|---|---|
| Independent | Can this story be developed without depending on another story? | No blocking dependencies on uncommitted work |
| Negotiable | Is the implementation approach flexible? | Multiple ways to deliver the value |
| Valuable | Does this deliver value to users or business? | Clear benefit statement in "so that" |
| Estimable | Can the team estimate this story? | Understood well enough to size |
| Small | Can this be completed in one sprint? | ≤8 story points typically |
| Testable | Can we verify this story is done? | Clear, measurable acceptance criteria |
INVEST Failure Patterns
| Criterion | Red Flag | Fix |
|---|---|---|
| Independent | "After story X is done..." | Combine stories or resequence |
| Negotiable | Specific implementation in story | Focus on outcome, not solution |
| Valuable | No "so that" clause | Add benefit statement |
| Estimable | Team says "no idea" | Spike first, then story |
| Small | >8 points | Split into smaller stories |
| Testable | "System should be better" | Add measurable criteria |
Story Splitting Techniques
When stories are too large (>8 points), split using:
| Technique | Example |
|---|---|
| By workflow step | "Create order" → "Add items" + "Apply discount" + "Submit order" |
| By persona | "User dashboard" → "Admin dashboard" + "Member dashboard" |
| By data type | "Import data" → "Import CSV" + "Import Excel" |
| By operation | "Manage users" → "Add user" + "Edit user" + "Delete user" |
| By platform | "Mobile support" → "iOS support" + "Android support" |
| Happy path first | "Full feature" → "Basic feature" + "Error handling" + "Edge cases" |
---
Story Point Estimation
Fibonacci Scale Reference
| Points | Complexity | Example |
|---|---|---|
| 1 | Trivial | Fix typo, change label |
| 2 | Simple | Add field, simple validation |
| 3 | Small | New form, basic CRUD operation |
| 5 | Medium | Feature with multiple components |
| 8 | Large | Complex feature, multiple integrations |
| 13 | Very Large | Consider splitting |
| 21+ | Epic | Must split |
Estimation Factors
| Factor | Low Complexity | High Complexity |
|---|---|---|
| Unknowns | Well understood | Many unknowns |
| Dependencies | None | Multiple systems |
| Testing | Simple unit tests | Complex integration tests |
| Data | Simple structure | Complex transformations |
| UI | Minor changes | New components |
Velocity Calculation
Velocity = Total points completed / Number of sprints
Example:
Sprint 1: 28 points
Sprint 2: 32 points
Sprint 3: 30 points
Average Velocity: (28 + 32 + 30) / 3 = 30 points/sprint
Sprint Capacity Planning:
- Committed: 80-90% of velocity (24-27 points)
- Stretch goals: 10-20% additional (3-6 points)---
Common Antipatterns
Story Antipatterns
| Antipattern | Example | Fix |
|---|---|---|
| Solution story | "Implement React component" | "Display user profile information" |
| Compound story | "Create, edit, and delete users" | Split into three stories |
| Missing persona | "The system will..." | "As an admin, I want to..." |
| No benefit | "I want to see a button" | Add "so that [benefit]" |
| Too vague | "Improve performance" | "Reduce page load to <2 seconds" |
| Technical jargon | "Implement Redis caching" | "Enable instant search results" |
Acceptance Criteria Antipatterns
| Antipattern | Example | Fix |
|---|---|---|
| Too vague | "Works correctly" | Specific Given-When-Then |
| Implementation details | "Use PostgreSQL query" | Focus on outcome |
| Missing unhappy path | Only success scenario | Add error cases |
| Untestable | "User is happy" | Measurable behavior |
| Too many | 15+ criteria | Split the story |
Sprint Planning Antipatterns
| Antipattern | Impact | Fix |
|---|---|---|
| 100% capacity | No buffer for unknowns | Plan 80-85% |
| All large stories | Risk of incomplete sprint | Mix sizes |
| No dependencies mapped | Blocked work | Identify dependencies upfront |
| Stretch = overflow | Hiding overcommitment | Stretch should be optional |
#!/usr/bin/env python3
"""
User Story Generator with INVEST Criteria
Creates well-formed user stories with acceptance criteria
"""
import json
from typing import Dict, List, Tuple
class UserStoryGenerator:
"""Generate INVEST-compliant user stories"""
def __init__(self):
self.personas = {
'end_user': {
'name': 'End User',
'needs': ['efficiency', 'simplicity', 'reliability', 'speed'],
'context': 'daily usage of core features'
},
'admin': {
'name': 'Administrator',
'needs': ['control', 'visibility', 'security', 'configuration'],
'context': 'system management and oversight'
},
'power_user': {
'name': 'Power User',
'needs': ['advanced features', 'automation', 'customization', 'shortcuts'],
'context': 'expert usage and workflow optimization'
},
'new_user': {
'name': 'New User',
'needs': ['guidance', 'learning', 'safety', 'clarity'],
'context': 'first-time experience and onboarding'
}
}
self.story_templates = {
'feature': "As a {persona}, I want to {action} so that {benefit}",
'improvement': "As a {persona}, I need {capability} to {achieve_goal}",
'fix': "As a {persona}, I expect {behavior} when {condition}",
'integration': "As a {persona}, I want to {integrate} so that {workflow}"
}
self.acceptance_criteria_patterns = [
"Given {precondition}, When {action}, Then {outcome}",
"Should {behavior} when {condition}",
"Must {requirement} to {achieve}",
"Can {capability} without {negative_outcome}"
]
def generate_epic_stories(self, epic: Dict) -> List[Dict]:
"""Break down epic into user stories"""
stories = []
# Analyze epic for key components
epic_name = epic.get('name', 'Feature')
epic_description = epic.get('description', '')
personas = epic.get('personas', ['end_user'])
scope = epic.get('scope', [])
# Generate stories for each persona and scope item
for persona in personas:
for i, scope_item in enumerate(scope):
story = self.generate_story(
persona=persona,
feature=scope_item,
epic=epic_name,
index=i+1
)
stories.append(story)
# Add enabler stories (technical, infrastructure)
if epic.get('technical_requirements'):
for req in epic['technical_requirements']:
enabler = self.generate_enabler_story(req, epic_name)
stories.append(enabler)
return stories
def generate_story(self, persona: str, feature: str, epic: str, index: int) -> Dict:
"""Generate a single user story"""
persona_data = self.personas.get(persona, self.personas['end_user'])
# Create story
story = {
'id': f"{epic[:3].upper()}-{index:03d}",
'type': 'story',
'title': self._generate_title(feature),
'narrative': self._generate_narrative(persona_data, feature),
'acceptance_criteria': self._generate_acceptance_criteria(feature),
'estimation': self._estimate_complexity(feature),
'priority': self._determine_priority(persona, feature),
'dependencies': [],
'invest_check': self._check_invest_criteria(feature)
}
return story
def generate_enabler_story(self, requirement: str, epic: str) -> Dict:
"""Generate technical enabler story"""
return {
'id': f"{epic[:3].upper()}-E{len(requirement):02d}",
'type': 'enabler',
'title': f"Technical: {requirement}",
'narrative': f"As a developer, I need to {requirement} to enable user features",
'acceptance_criteria': [
f"Technical requirement {requirement} is implemented",
"All tests pass",
"Documentation is updated",
"No regression in existing functionality"
],
'estimation': 5, # Default medium complexity
'priority': 'high',
'dependencies': [],
'invest_check': {
'independent': True,
'negotiable': False, # Technical requirements often non-negotiable
'valuable': True,
'estimable': True,
'small': True,
'testable': True
}
}
def _generate_title(self, feature: str) -> str:
"""Generate concise story title"""
# Simplify feature description to title
words = feature.split()[:5]
return ' '.join(words).title()
def _generate_narrative(self, persona: Dict, feature: str) -> str:
"""Generate story narrative in standard format"""
template = self.story_templates['feature']
action = self._extract_action(feature)
benefit = self._extract_benefit(feature, persona['needs'])
return template.format(
persona=persona['name'],
action=action,
benefit=benefit
)
def _generate_acceptance_criteria(self, feature: str) -> List[str]:
"""Generate acceptance criteria"""
criteria = []
# Happy path
criteria.append(f"Given user has access, When they {self._extract_action(feature)}, Then {self._extract_outcome(feature)}")
# Validation
criteria.append(f"Should validate input before processing")
# Error handling
criteria.append(f"Must show clear error message when action fails")
# Performance
criteria.append(f"Should complete within 2 seconds")
# Accessibility
criteria.append(f"Must be accessible via keyboard navigation")
return criteria
def _extract_action(self, feature: str) -> str:
"""Extract action from feature description"""
action_verbs = ['create', 'view', 'edit', 'delete', 'share', 'export', 'import', 'configure', 'search', 'filter']
feature_lower = feature.lower()
for verb in action_verbs:
if verb in feature_lower:
return feature_lower
return f"use {feature.lower()}"
def _extract_benefit(self, feature: str, needs: List[str]) -> str:
"""Extract benefit based on feature and persona needs"""
feature_lower = feature.lower()
if 'save' in feature_lower or 'quick' in feature_lower:
return "I can save time and work more efficiently"
elif 'share' in feature_lower or 'collab' in feature_lower:
return "I can collaborate with my team effectively"
elif 'report' in feature_lower or 'analyt' in feature_lower:
return "I can make data-driven decisions"
elif 'automat' in feature_lower:
return "I can reduce manual work and errors"
else:
return f"I can achieve my goals related to {needs[0]}"
def _extract_outcome(self, feature: str) -> str:
"""Extract expected outcome"""
return f"the {feature.lower()} is successfully completed"
def _estimate_complexity(self, feature: str) -> int:
"""Estimate story points based on complexity indicators"""
feature_lower = feature.lower()
# Complexity indicators
complexity = 3 # Base complexity
if any(word in feature_lower for word in ['simple', 'basic', 'view', 'display']):
complexity = 1
elif any(word in feature_lower for word in ['create', 'edit', 'update']):
complexity = 3
elif any(word in feature_lower for word in ['complex', 'advanced', 'integrate', 'migrate']):
complexity = 8
elif any(word in feature_lower for word in ['redesign', 'refactor', 'architect']):
complexity = 13
return complexity
def _determine_priority(self, persona: str, feature: str) -> str:
"""Determine story priority"""
feature_lower = feature.lower()
# Critical features
if any(word in feature_lower for word in ['security', 'fix', 'critical', 'broken']):
return 'critical'
# High priority for primary personas
if persona in ['end_user', 'admin']:
if any(word in feature_lower for word in ['core', 'essential', 'primary']):
return 'high'
# Medium for improvements
if any(word in feature_lower for word in ['improve', 'enhance', 'optimize']):
return 'medium'
# Low for nice-to-haves
return 'low'
def _check_invest_criteria(self, feature: str) -> Dict[str, bool]:
"""Check INVEST criteria compliance"""
return {
'independent': not any(word in feature.lower() for word in ['after', 'depends', 'requires']),
'negotiable': True, # Most features can be negotiated
'valuable': True, # Assume value if it made it to backlog
'estimable': len(feature.split()) < 20, # Can estimate if not too vague
'small': self._estimate_complexity(feature) <= 8, # 8 points or less
'testable': not any(word in feature.lower() for word in ['maybe', 'possibly', 'somehow'])
}
def generate_sprint_stories(self, capacity: int, backlog: List[Dict]) -> Dict:
"""Generate stories for a sprint based on capacity"""
sprint = {
'capacity': capacity,
'committed': [],
'stretch': [],
'total_points': 0,
'utilization': 0
}
# Sort backlog by priority and size
sorted_backlog = sorted(
backlog,
key=lambda x: (
{'critical': 0, 'high': 1, 'medium': 2, 'low': 3}[x['priority']],
x['estimation']
)
)
# Fill sprint
for story in sorted_backlog:
if sprint['total_points'] + story['estimation'] <= capacity:
sprint['committed'].append(story)
sprint['total_points'] += story['estimation']
elif sprint['total_points'] + story['estimation'] <= capacity * 1.2:
sprint['stretch'].append(story)
sprint['utilization'] = round((sprint['total_points'] / capacity) * 100, 1)
return sprint
def format_story_output(self, story: Dict) -> str:
"""Format story for display"""
output = []
output.append(f"USER STORY: {story['id']}")
output.append("=" * 40)
output.append(f"Title: {story['title']}")
output.append(f"Type: {story['type']}")
output.append(f"Priority: {story['priority'].upper()}")
output.append(f"Points: {story['estimation']}")
output.append("")
output.append("Story:")
output.append(story['narrative'])
output.append("")
output.append("Acceptance Criteria:")
for i, criterion in enumerate(story['acceptance_criteria'], 1):
output.append(f" {i}. {criterion}")
output.append("")
output.append("INVEST Checklist:")
for criterion, passed in story['invest_check'].items():
status = "✓" if passed else "✗"
output.append(f" {status} {criterion.capitalize()}")
return "\n".join(output)
def create_sample_epic():
"""Create a sample epic for testing"""
return {
'name': 'User Dashboard',
'description': 'Create a comprehensive dashboard for users to view their data',
'personas': ['end_user', 'power_user'],
'scope': [
'View key metrics and KPIs',
'Customize dashboard layout',
'Export dashboard data',
'Share dashboard with team members',
'Set up automated reports'
],
'technical_requirements': [
'Implement caching for performance',
'Set up real-time data pipeline'
]
}
def main():
import sys
generator = UserStoryGenerator()
if len(sys.argv) > 1 and sys.argv[1] == 'sprint':
# Generate sprint planning
capacity = int(sys.argv[2]) if len(sys.argv) > 2 else 30
# Create sample backlog
epic = create_sample_epic()
backlog = generator.generate_epic_stories(epic)
# Plan sprint
sprint = generator.generate_sprint_stories(capacity, backlog)
print("=" * 60)
print("SPRINT PLANNING")
print("=" * 60)
print(f"Sprint Capacity: {sprint['capacity']} points")
print(f"Committed: {sprint['total_points']} points ({sprint['utilization']}%)")
print(f"Stories: {len(sprint['committed'])} committed + {len(sprint['stretch'])} stretch")
print("\n📋 COMMITTED STORIES:\n")
for story in sprint['committed']:
print(f" [{story['priority'][:1].upper()}] {story['id']}: {story['title']} ({story['estimation']}pts)")
if sprint['stretch']:
print("\n🎯 STRETCH GOALS:\n")
for story in sprint['stretch']:
print(f" [{story['priority'][:1].upper()}] {story['id']}: {story['title']} ({story['estimation']}pts)")
else:
# Generate stories for epic
epic = create_sample_epic()
stories = generator.generate_epic_stories(epic)
print(f"Generated {len(stories)} stories from epic: {epic['name']}\n")
# Display first 3 stories in detail
for story in stories[:3]:
print(generator.format_story_output(story))
print("\n")
# Summary of all stories
print("=" * 60)
print("BACKLOG SUMMARY")
print("=" * 60)
total_points = sum(s['estimation'] for s in stories)
print(f"Total Stories: {len(stories)}")
print(f"Total Points: {total_points}")
print(f"Average Size: {total_points/len(stories):.1f} points")
print("\nPriority Breakdown:")
for priority in ['critical', 'high', 'medium', 'low']:
count = len([s for s in stories if s['priority'] == priority])
if count > 0:
print(f" {priority.capitalize()}: {count} stories")
if __name__ == "__main__":
main()
Related skills
How it compares
Use agile-product-owner when you need formal sprint documents with capacity math; use lighter planning skills for informal todo lists.
FAQ
What does agile-product-owner generate?
agile-product-owner generates sprint planning documents including sprint info, expanded sprint goals, team capacity tables, and prioritized task lists. Output is structured for agents or engineering teams to execute within a sprint window.
Does agile-product-owner handle team capacity?
agile-product-owner includes a team capacity section with per-member available days, PTO notes, and total person-day capacity. Tasks are prioritized to fit within that capacity for the sprint period.
Is Agile Product Owner safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.