user-story-writer
The user-story-writer skill generates production-ready user stories from feature briefs, PRDs, or verbal descriptions in standard format. Use it when breaking down epics into estimable stories, creating tickets from product requirements, writing acceptance criteria in Given/When/Then format, or defining edge cases and definitions of done for planning tools like Jira or Linear.
git clone --depth 1 https://github.com/mohitagw15856/pm-claude-skills /tmp/user-story-writer && cp -r /tmp/user-story-writer/plugins/pm-delivery/skills/user-story-writer ~/.claude/skills/user-story-writerSKILL.md
# User Story Writer Skill This skill produces production-ready user stories from a feature brief, PRD section, or verbal description. Each story follows the standard format with a clear who/what/why, behavioural acceptance criteria in Given/When/Then format, edge cases, and definition of done. Output is ready to paste into Jira, Linear, or your planning tool. ## Required Inputs Ask the user for these if not provided: - **Feature or change** to break into stories — paste the brief, PRD section, or describe the feature - **User types / personas** involved (e.g. admin, end user, guest, API consumer) - **Scope** — are we writing one story or decomposing an epic into a full set of stories? - **Acceptance criteria format preference** — Given/When/Then, bullet checklist, or both? - **Technical constraints or notes** — anything the engineering team has flagged that should shape the stories ## Output Structure For each story: --- ## Story: [Short title — verb + noun, e.g. "Filter search results by date range"] **Epic:** [Parent epic name — e.g. "Advanced Search"] **Story ID:** [Jira/Linear ID — leave blank if not yet created] **Priority:** [P1 / P2 / P3] **Story points:** [Leave blank — for engineering to estimate] --- ### User Story > **As a** [specific user type — not "user"], > **I want to** [concrete action they want to take], > **So that** [the outcome they achieve — business value, not feature description]. **Example:** > As an **account manager**, > I want to **filter my client list by last contact date**, > so that I **can quickly identify clients I haven't spoken to in over 30 days and prioritise outreach**. --- ### Context [1–3 sentences of context that aren't in the user story itself: when does this story matter, what triggers the need, how does it fit into a larger flow. This helps engineers understand why before they ask.] --- ### Acceptance Criteria **Format: Given / When / Then** Each criterion tests one specific behaviour. Write one GWT per observable outcome — not one GWT for the whole feature. **AC1: [Short name for this criterion]** ``` Given [starting state or context] When [user action] Then [observable system behaviour] ``` **AC2: [Short name]** ``` Given [...] When [...] Then [...] ``` **AC3: [Short name]** ``` Given [...] When [...] Then [...] ``` --- ### Edge Cases [List scenarios that are non-obvious but must be handled. These become additional ACs or notes to engineering.] - [ ] **[Edge case 1]:** [e.g. User applies a date filter that returns 0 results — show empty state with clear messaging and a "clear filters" action] - [ ] **[Edge case 2]:** [e.g. User has >10,000 clients — filter must not degrade load time >200ms] - [ ] **[Edge case 3]:** [e.g. Date filter persists across page refresh — or explicitly should not if that's the decision] - [ ] **[Permission edge case]:** [e.g. Read-only users can see the filter but cannot save filter presets] --- ### Out of Scope [Explicitly state what this story does NOT cover — prevents scope creep and clarifies where the next story begins.] - Saving and sharing filter presets (separate story — see [Story X]) - Bulk actions on filtered results - Exporting filtered client list to CSV --- ### Definition of Done - [ ] Acceptance criteria all pass - [ ] Edge cases handled (or explicitly deferred with a new ticket raised) - [ ] Unit tests written for each AC - [ ] Works on mobile viewport (if applicable) - [ ] Accessibility: keyboard navigable and screen-reader compatible - [ ] Error states are handled and copy approved - [ ] Product and design have reviewed in staging - [ ] No console errors in production build --- ## Epic Decomposition Template If the user provides an epic or feature brief, decompose it into a full set of stories before writing them: **Epic:** [Name] **Goal:** [What outcome does completing this epic achieve?] **Stories:** | # | Story | Notes | Dependencies | |---|---|---|---| | 1 | [Core happy path story — the simplest version of the feature that delivers value] | | | | 2 | [Validation / error handling story] | | Depends on #1 | | 3 | [Edge case or power user story] | | Depends on #1 | | 4 | [Admin or configuration story] | | | | 5 | [Performance or scale story — if applicable] | | Depends on #1 | **Suggested sprint order:** [Which stories are P1 for MVP? Which can follow in a later sprint?] --- ## Common Story Anti-Patterns — and Fixes Use these to review stories before handing to engineering: | Anti-pattern | Example | Fix | |---|---|---| | **Solution in the story** | "As a user I want a dropdown filter" | Remove the UI decision — "As a user I want to filter by date range" | | **Vague "so that"** | "so that it's easier to use" | Make it specific — "so that I can prioritise outreach without opening each record manually" | | **Too big** | Story covers 5 distinct user flows | Split into separate stories per flow | | **No acceptance criteria** | Story has description only | Add at least 3 GWT criteria before engineering starts | | **ACs that test the solution, not the behaviour** | "Given the dropdown is open, When I select an option" | Test the outcome — "Given I have applied a date filter, When I view my results, Then only clients last contacted in that date range appear" | | **Missing empty state** | No AC for what happens with 0 results | Add it — empty states are part of the feature | | **Missing error state** | No AC for network failure or invalid input | Add error handling ACs explicitly | --- ## Example: Full Story Set for a Feature **Feature brief:** "Allow users to export their invoice history as a PDF or CSV" --- ### Story 1: Export invoice list as CSV > As a **finance admin**, > I want to **export my invoice history as a CSV file**, > so that I can **import it into our accounting software without manual data entry**. **AC1: Successful export** ``` Given I am on the Invoices page with at least one invoice When I click "Export" and select "CSV" Then a CSV file
Design a 360-degree feedback survey or write a structured 360 feedback report. Use when asked to build a 360 feedback process, write 360 feedback for a colleague, design a feedback survey, or produce a feedback report. Produces either a complete survey instrument with rating scales and open-ended questions, or a structured narrative feedback report with themes, strengths, and development areas.
Decode a 401k or workplace retirement plan — the real cost of its funds, the match's fine print, vesting math, and the plan features worth using or avoiding. Use when someone asks 'is my 401k any good', 'decode my 401k plan', 'which funds should I look at', or 'what fees am I paying'. Produces a fee decode in dollars-over-time, match and vesting math, a fund-lineup triage by cost, and the questions for HR or the plan administrator.
Design statistically rigorous A/B tests for product features, UI changes, onboarding flows, and pricing experiments. Use when asked to set up an experiment, design an A/B test, calculate sample size, or interpret test results. Produces a complete test plan with hypothesis, variant definitions, sample size, duration estimate, guardrail metrics, and a results interpretation guide.
Analyse a finished A/B test and write the readout — the result, whether it's statistically and practically significant, what it means, and the ship/no-ship call. Use when asked to analyse experiment results, write an A/B test readout, interpret test data, or decide whether to ship a variant. Produces a clear verdict with the lift and confidence, segment cuts, the risks (peeking, novelty, sample), and a recommendation. Distinct from planning a test — this reads results.
Generate a WCAG 2.2 accessibility audit checklist and remediation suggestions for any UI or design. Use when asked to audit for accessibility, check WCAG compliance, review a design for a11y issues, or create an accessibility remediation plan. Produces a prioritised checklist with pass/fail assessments and specific fixes.
Plan a trip that actually works with a disability or access need — confirm real accessibility (not just 'accessible' labels), book the assistance in advance, plan for equipment and medication, and build in the contingencies for when access breaks down. Use when someone says 'plan an accessible trip', 'travelling with a wheelchair/disability', 'book assistance for my flight', or 'will this hotel actually work for me'. Produces an access-verified itinerary, an assistance-booking checklist, an equipment/medication plan, and contingency scripts. Verify specifics with providers.
Request a reasonable accommodation at work or in education — frame it around the barrier and the adjustment (not your diagnosis), cite the right process, and navigate the back-and-forth constructively. Use when someone says 'I need a workplace accommodation', 'request reasonable adjustments', 'ADA/Equality Act accommodation', or 'how do I ask for accommodations for my disability/condition'. Produces the request letter, a barriers-and-adjustments map, disclosure guidance, and a plan for the interactive process. Not legal advice — routes to the formal process and to advocacy where needed.
Build a structured account plan for any key customer or target account. Use when asked to create an account plan, key account strategy, strategic account review, or territory plan. Produces a complete account plan with relationship map, growth opportunities, risks, and 90-day action plan.