user-stories
Use this skill when writing user stories, defining acceptance criteria, story mapping, grooming backlogs, or estimating work. Triggers on user stories, acceptance criteria, story mapping, backlog grooming, estimation, story points, INVEST criteria, and any task requiring agile requirements documentation.
product user-storiesacceptance-criteriastory-mappingbacklogestimationWhat is user-stories?
Use this skill when writing user stories, defining acceptance criteria, story mapping, grooming backlogs, or estimating work. Triggers on user stories, acceptance criteria, story mapping, backlog grooming, estimation, story points, INVEST criteria, and any task requiring agile requirements documentation.
user-stories
user-stories is a production-ready AI agent skill for claude-code, gemini-cli, openai-codex, and 1 more. Writing user stories, defining acceptance criteria, story mapping, grooming backlogs, or estimating work.
Quick Facts
| Field | Value |
|---|---|
| Category | product |
| Version | 0.1.0 |
| Platforms | claude-code, gemini-cli, openai-codex, mcp |
| License | MIT |
How to Install
- Make sure you have Node.js installed on your machine.
- Run the following command in your terminal:
npx skills add AbsolutelySkilled/AbsolutelySkilled --skill user-stories- The user-stories skill is now available in your AI coding agent (Claude Code, Gemini CLI, OpenAI Codex, etc.).
Overview
User stories are short, plain-language descriptions of a feature from the perspective of the person who wants it. They are the primary unit of work in agile teams - a shared, human-readable contract between product, design, and engineering that keeps teams focused on user value rather than technical implementation details.
Tags
user-stories acceptance-criteria story-mapping backlog estimation
Platforms
- claude-code
- gemini-cli
- openai-codex
- mcp
Related Skills
Pair user-stories with these complementary skills:
Frequently Asked Questions
What is user-stories?
Use this skill when writing user stories, defining acceptance criteria, story mapping, grooming backlogs, or estimating work. Triggers on user stories, acceptance criteria, story mapping, backlog grooming, estimation, story points, INVEST criteria, and any task requiring agile requirements documentation.
How do I install user-stories?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill user-stories in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support user-stories?
This skill works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.
Maintainers
Generated from AbsolutelySkilled
SKILL.md
User Stories
User stories are short, plain-language descriptions of a feature from the perspective of the person who wants it. They are the primary unit of work in agile teams - a shared, human-readable contract between product, design, and engineering that keeps teams focused on user value rather than technical implementation details.
When to use this skill
Trigger this skill when the user:
- Wants to write or improve a user story
- Needs to define acceptance criteria for a feature
- Is creating or facilitating a story mapping session
- Wants to groom or refine a product backlog
- Needs to estimate stories with story points or t-shirt sizes
- Asks about INVEST criteria or whether a story is well-formed
- Needs to split a large story or epic into smaller deliverable stories
- Wants to write technical stories, spikes, or enabler stories
Do NOT trigger this skill for:
- Sprint planning ceremonies (scheduling and capacity work, not story writing)
- Project roadmaps and OKRs (strategy-level, above story granularity)
Key principles
INVEST criteria - Every story should be Independent, Negotiable, Valuable, Estimable, Small, and Testable. A story that fails any criterion needs rework before it enters a sprint. See the Core Concepts section for the full breakdown.
Acceptance criteria are testable - Acceptance criteria must be written so that a tester (human or automated) can unambiguously determine pass or fail. Vague criteria like "the UI should look good" are not acceptance criteria - they are opinions. Rewrite them as concrete, observable outcomes.
Vertical slices, not horizontal - A story must deliver end-to-end value: a real user doing a real thing and getting a real result. A story that covers only the database layer, only the API, or only the UI is a task, not a story. Horizontal slicing creates work that sits unfinished for sprints; vertical slicing enables continuous delivery.
Conversation over documentation - The written story is a placeholder for a conversation, not a complete specification. The three C's (Card, Conversation, Confirmation) mean the card captures the intent, the team talks through details during grooming and planning, and acceptance criteria confirm shared understanding. Resist writing exhaustive specifications - keep the card short and talk.
Stories are negotiable - The "N" in INVEST. A story is not a contract. The team and product owner negotiate scope, approach, and details right up until the sprint begins. If a story cannot be adjusted, it is a requirement document masquerading as a story.
Core concepts
Story anatomy
The standard template - "As a [persona], I want [action], so that [outcome]" - has three parts, each carrying weight:
- Persona (
As a...) - Who benefits? Use a real persona or role, not "user" or "system." The persona grounds every decision in a real person's need. - Action (
I want...) - What do they want to do? This is the feature, stated as a user action, not a system capability. - Outcome (
So that...) - Why do they want it? The business or user value. This is the most important part - it prevents teams from building the wrong thing correctly.
INVEST criteria
| Letter | Criterion | What it means |
|---|---|---|
| I | Independent | Can be developed and delivered without depending on another story |
| N | Negotiable | Scope and details can be adjusted before the sprint |
| V | Valuable | Delivers perceivable value to a user or the business |
| E | Estimable | The team can size it; if not, it needs splitting or a spike |
| S | Small | Fits in one sprint; ideally completable in 2-3 days |
| T | Testable | Acceptance criteria exist and can be verified |
Acceptance criteria formats
Given/When/Then (Gherkin) is the most structured format and maps directly to automated tests:
Given [initial context / precondition]
When [action or event]
Then [expected outcome]Checklist format works for stories with multiple independent outcomes:
- [ ] User can sort the table by any column
- [ ] Sort order persists across page refreshes
- [ ] Default sort is by date descendingUse Gherkin for behavior-critical paths (auth, payments, core flows). Use checklists for UI stories with many small, independent criteria.
Story mapping
Story mapping organizes stories into a two-dimensional grid:
- Horizontal axis (Backbone) - User activities in the order a user experiences them (left to right). These are big-bucket steps like "Browse catalog," "Add to cart," "Checkout," "Receive order."
- Vertical axis (Depth) - Stories under each activity, ordered by priority (top = must-have, bottom = nice-to-have).
- Horizontal slices - Drawing a line across all activities at the same depth creates a release slice that delivers a complete, thin version of the product.
Common tasks
Write effective user stories
Template:
As a [specific persona],
I want [specific action],
So that [measurable outcome].Weak story (before):
As a user, I want to search, so that I can find things.Strong story (after):
As a returning customer,
I want to search my order history by product name or order date,
So that I can quickly find and re-order items I've bought before.The strong version names the persona, specifies the exact action, and ties the outcome to a real business motivation (re-orders).
Checklist before writing:
- Is the persona specific enough to guide design decisions?
- Is the action a user action, not a system behavior?
- Does the "so that" capture user or business value - not technical rationale?
- Can this be delivered in a single sprint?
Write acceptance criteria - GWT format
Write one scenario per distinct behavior. Cover the happy path first, then edge cases and error states.
Story: As a shopper, I want to apply a discount code at checkout, so that I receive the discount on my order total.
Scenario: Valid discount code applied
Given the shopper has items in their cart totaling $80
When they enter a valid 20%-off code "SAVE20" at checkout
Then the order total shows $64.00
And the applied discount is itemized on the order summary
Scenario: Expired discount code
Given a discount code "SUMMER22" that expired on 2022-09-01
When the shopper enters "SUMMER22" at checkout
Then an error message reads "This code has expired"
And the order total is unchanged
Scenario: Code already used (single-use code)
Given the shopper has already used single-use code "WELCOME10"
When they enter "WELCOME10" again at checkout
Then an error message reads "This code has already been used"Create a story map - step by step
- Define the user - Agree on which user (persona) the map is for. One map per primary user type.
- List user activities - Brainstorm the big steps the user takes (post-its, one per card). Arrange left to right in user journey order. Aim for 5-10 activities.
- Break activities into tasks - Under each activity, list the user tasks (specific actions). These become the backbone of your stories.
- Write stories under tasks - Under each task, write the stories needed to support it. Stack them vertically with highest priority on top.
- Draw release slices - Draw horizontal lines through the map. Everything above the first line = MVP. Everything above the second line = v1.1. Etc.
- Validate the slices - Each slice should be a coherent, releasable product. Ask: "Could a user get value from only what's above this line?"
Groom and refine backlog
Run a grooming session against each story using this checklist:
- Clear? Can the team explain it back in their own words?
- INVEST? Does it pass all six criteria?
- Acceptance criteria complete? At least one happy-path scenario, one error case.
- Dependencies identified? Are blockers noted and tracked?
- Ready to estimate? If the team cannot size it, create a spike story.
- Definition of Done applicable? Does standard DoD cover this, or are there story-specific done criteria?
If a story fails more than two items, send it back to the product owner for rework rather than attempting to fix it in the grooming meeting.
Estimate with story points - relative sizing
Story points measure complexity + uncertainty + effort relative to a reference story, not time.
Step-by-step with planning poker:
- Select a reference story the whole team agrees is "a 3." Post it visibly.
- Read the new story aloud. Give everyone a moment to think silently.
- All team members reveal their estimate simultaneously (cards or app).
- If estimates converge (within one Fibonacci step): accept the majority or average.
- If estimates diverge: the highest and lowest estimators explain their reasoning. Discuss until convergence, then re-estimate once.
Fibonacci scale: 1, 2, 3, 5, 8, 13, 21, ? (unknown), infinity (too large)
Sizing heuristics:
| Points | Meaning |
|---|---|
| 1-2 | Well-understood, trivial change, clear path |
| 3-5 | Moderate work, minor unknowns, typical story |
| 8 | Complex, significant unknowns - consider splitting |
| 13+ | Too large for one sprint. Must split before committing |
| ? | Team doesn't understand the story - needs a spike |
Split large stories - patterns
See references/story-splitting.md for the full 10-pattern reference.
Quick reference - top 3 patterns:
By workflow step - Break the story at each step in the user's process. "As a user, I want to complete checkout" splits into: enter shipping address / enter payment / review and confirm / receive confirmation email.
By data variation - If a story handles many types of input, start with the simplest type and add variations in follow-on stories. "Search by name" / "search by date" / "search by category."
Happy path first - Implement the success case, defer error handling and edge cases to a follow-on story. Always ship the happy path first.
Write technical stories and spikes
Technical story template:
In order to [technical goal / business benefit],
As [team or role],
We need to [technical action].Example:
In order to meet the 200ms API response SLA,
As the platform team,
We need to add a Redis cache layer in front of the product catalog endpoint.Spike template (time-boxed research):
Spike: [question to answer]
Timebox: [hours]
Output: [what the team will have at the end - a decision, a prototype, an ADR]Example:
Spike: Evaluate Stripe vs. Braintree for payment processing
Timebox: 8 hours
Output: Decision doc with recommendation, covering integration complexity,
fee structure, and PCI compliance implicationsSpikes produce knowledge, not shippable software. Always define what "done" looks like before starting.
Anti-patterns
| Anti-pattern | Why it's wrong | What to do instead |
|---|---|---|
| The system story ("The system shall...") | Hides the user; focuses on implementation, not value | Rewrite from the user's perspective. Who benefits? Why? |
| Horizontal story ("Build the database layer") | Not deliverable as standalone value; creates half-built features | Slice vertically through all layers for a thin, complete feature |
| Acceptance criteria as UI wireframes | Wireframes constrain solutions prematurely and can't be automated | Write behavior in Given/When/Then; let design solve the UI problem |
| Gold-plating in acceptance criteria | Defining every micro-interaction as a criterion bloats stories | Cover behavior, not aesthetics. Reserve UI polish for design specs |
| Mega-stories (epic masquerading as a story) | Too large to estimate reliably or complete in one sprint | Split using the patterns in references/story-splitting.md |
| Missing "so that" | Team builds the feature without understanding why; leads to wrong solutions | Always complete the outcome clause. If you can't, the story isn't ready |
Gotchas
"So that" written as a technical rationale defeats the purpose - "So that the database is updated" or "so that the API returns 200" describes implementation, not user value. If the "so that" clause could be written by an engineer rather than a user, rewrite it from the user's perspective - what can they now do or feel that they couldn't before?
Stories estimated without the team who will build them are not estimates - Point estimates assigned by product managers or scrum masters without engineer input are not commitments the engineering team made. Only the team doing the work should size the stories.
INVEST "Independent" is aspirational, not absolute - Some dependencies are unavoidable (auth before user profiles). The rule is to minimize hidden dependencies, not eliminate all sequencing. Expose dependencies explicitly in the story as a "Depends on:" note rather than pretending they don't exist.
Acceptance criteria written as UI wireframes lock in a solution prematurely - "The button is blue and in the top-right corner" as an acceptance criterion prevents design iteration. Write behavior ("user can dismiss the notification at any time") and let design solve the visual implementation.
Spikes without a defined output become open-ended research sinkholes - A spike with no output criteria runs until time is up and delivers a dump of information rather than a decision. Always define: what specific question will be answered, and what artifact (decision doc, ADR, prototype) will exist when the spike is done.
References
references/story-splitting.md- 10 patterns for splitting large stories with worked examples for each. Load when a story is too large or an epic needs breaking down.
References
story-splitting.md
Story Splitting Patterns
Large stories (epics, 13+ point stories) must be split before entering a sprint. The goal is to produce stories that are independently deliverable - each one shippable on its own, providing real value. Below are 10 patterns, ordered from most broadly applicable to most specialized.
Pattern 1: Workflow Steps
When to use: The story covers a multi-step user process end to end.
How: Identify each discrete step in the workflow and make each step a story. Deliver steps in order so the workflow is usable (even if incomplete) after each sprint.
Example:
Original: As a job applicant, I want to apply for a job so that I can be considered.
Split into:
- As an applicant, I want to upload my resume so that it is stored for my application.
- As an applicant, I want to fill in my personal and contact details so that the employer can reach me.
- As an applicant, I want to submit a cover letter so that I can explain my interest.
- As an applicant, I want to review and submit my application so that it is sent to the employer.
Pattern 2: Business Rule Variations
When to use: A single story handles multiple business rules or conditions that each require distinct logic.
How: Implement the simplest rule first. Add each additional rule variant as a follow-on story.
Example:
Original: As a shopper, I want to apply discount codes at checkout.
Split into:
- As a shopper, I want to apply a percentage-off discount code.
- As a shopper, I want to apply a fixed-amount discount code.
- As a shopper, I want to apply a free-shipping discount code.
- As a shopper, I want to apply a buy-one-get-one discount code.
Pattern 3: Happy Path First
When to use: Any story where error handling, edge cases, and unhappy paths are significantly expanding scope.
How: Deliver the success scenario first. Create a separate story for error states, validation failures, and edge cases.
Example:
Original: As a user, I want to reset my password so that I can regain access to my account.
Split into:
- Happy path: request reset email, click link, set new password, log in.
- Edge cases: expired link, already-used link, invalid email address entered, password does not meet policy.
Rule: Never defer the happy path. Always defer the edge cases.
Pattern 4: Data Complexity / Input Variations
When to use: A story must handle many types or formats of input data, and supporting each type requires distinct work.
How: Start with the most common or simplest data type. Add types in follow-on stories ordered by usage frequency.
Example:
Original: As a content editor, I want to embed media in articles so that posts are richer.
Split into:
- Embed YouTube videos by URL.
- Embed images by URL or file upload.
- Embed Twitter/X posts by URL.
- Embed audio files.
Pattern 5: Operations (CRUD)
When to use: A story covers full create/read/update/delete functionality for a resource.
How: Each CRUD operation is a separate story. Deliver in dependency order: Create first, then Read, then Update, then Delete.
Example:
Original: As an admin, I want to manage team members so that I can control access.
Split into:
- As an admin, I want to invite a new team member by email.
- As an admin, I want to view the list of current team members and their roles.
- As an admin, I want to change a team member's role.
- As an admin, I want to remove a team member from the team.
Pattern 6: Acceptance Criteria Separation
When to use: A single story has so many acceptance criteria that it clearly covers multiple behaviors.
How: Group related acceptance criteria together. Each group becomes its own story.
Example:
Original story has 14 acceptance criteria covering: search input behavior, result display, pagination, filtering, and sorting.
Split into:
- Search and display results (input + basic result list).
- Filter results by category and date range.
- Sort results by relevance, date, and price.
- Paginate through search results.
Pattern 7: Defer Performance
When to use: A story has both a functional requirement and a non-functional performance requirement that significantly increases complexity.
How: Deliver functional correctness first. Make performance optimization a separate story with explicit SLA acceptance criteria.
Example:
Original: As a user, I want product search results to appear in under 200ms even with 10M products in the catalog.
Split into:
- As a user, I want to search for products by name and see matching results.
- As the platform, we need search to respond in under 200ms at p99 for 10M products (spike/tech story with defined load test as acceptance criteria).
Pattern 8: Spike Before Story
When to use: The team cannot estimate a story because there are too many unknowns about the technical approach.
How: Create a time-boxed spike to resolve the unknowns. The spike output is a decision or prototype. The real implementation story follows the spike.
Spike template:
Spike: [Question to answer]
Timebox: [hours]
Output: [Concrete deliverable - ADR, prototype, recommendation doc]Example:
Original: Integrate with the third-party payroll API (no estimate possible - API is undocumented).
Split into:
- Spike (8h): Explore the payroll API. Output: list of available endpoints, auth mechanism, rate limits, and recommended integration approach.
- Story: Implement payroll sync using the integration approach from the spike.
Pattern 9: User Role Variations
When to use: A story involves multiple user roles that each have different permissions, views, or behaviors for the same feature.
How: Implement one role's experience per story, starting with the role that delivers the most value or unblocks other work.
Example:
Original: As a user, I want to view the analytics dashboard so that I can track performance.
Split into:
- As a content creator, I want to see views and engagement metrics on my own posts.
- As a team manager, I want to see aggregated metrics across all team members' posts.
- As an admin, I want to see platform-wide metrics and export reports.
Pattern 10: Platform / Device Variations
When to use: A story must work across multiple platforms or device types with meaningfully different implementations for each.
How: Implement the primary platform first. Add additional platforms as follow-on stories.
Example:
Original: As a user, I want to receive push notifications for new messages.
Split into:
- Push notifications on web (browser notifications).
- Push notifications on iOS.
- Push notifications on Android.
Choosing the right pattern
| Situation | Pattern to try first |
|---|---|
| Story covers a user journey with steps | Workflow Steps (#1) |
| Story has complex business logic branches | Business Rule Variations (#2) |
| Story scope keeps growing with edge cases | Happy Path First (#3) |
| Story handles many data types or formats | Data Complexity (#4) |
| Story is "manage a thing" CRUD | Operations (#5) |
| Story has too many acceptance criteria | AC Separation (#6) |
| Story has a performance requirement | Defer Performance (#7) |
| Team can't estimate due to unknowns | Spike First (#8) |
| Feature behaves differently per role | User Role Variations (#9) |
| Feature needed on multiple platforms | Platform Variations (#10) |
A story can be split using more than one pattern. Start with the pattern that removes the most uncertainty, then re-evaluate each resulting story against INVEST criteria.
Frequently Asked Questions
What is user-stories?
Use this skill when writing user stories, defining acceptance criteria, story mapping, grooming backlogs, or estimating work. Triggers on user stories, acceptance criteria, story mapping, backlog grooming, estimation, story points, INVEST criteria, and any task requiring agile requirements documentation.
How do I install user-stories?
Run npx skills add AbsolutelySkilled/AbsolutelySkilled --skill user-stories in your terminal. The skill will be immediately available in your AI coding agent.
What AI agents support user-stories?
user-stories works with claude-code, gemini-cli, openai-codex, mcp. Install it once and use it across any supported AI coding agent.