Skip to content
Back to skills

User Story Writing

BSecurity

Writes and refines user stories for product backlogs: splits epics into INVEST-compliant stories, drafts Given/When/Then and EARS-format acceptance criteria, and runs definition-of-ready checks. Triggers on: "write user stories", "split this epic", "acceptance criteria for", "refine this story", "is this story ready", "turn these requirements into stories".

  • 10 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 13, 2026
ai-agentsgodatabasebackendsecurity

Security analysis

B75/100
  • criticalImpersonates system messages to override safety constraints

Pro scans all 3 files and shows the line behind each finding

Scanned June 13, 2026

npx -y skills add timwukp/agent-skills-best-practice --skill user-story-writing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of User Story Writing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for User Story Writing
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/timwukp-user-story-writing/badge)](https://www.skillsdirectory.com/skills/timwukp-user-story-writing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: user-story-writing
description: >
  Writes and refines user stories for product backlogs: splits epics into INVEST-compliant stories,
  drafts Given/When/Then and EARS-format acceptance criteria, and runs definition-of-ready checks.
  Triggers on: "write user stories", "split this epic", "acceptance criteria for", "refine this
  story", "is this story ready", "turn these requirements into stories".
license: MIT
metadata:
  author: Community
  version: 1.0.0
  category: secure-sdlc
---

# User Story Writing

Turn requirements, feature ideas, and epics into stories a team can estimate and deliver. The product is the story set, not prose about the feature.

## Story Format

```markdown
### [ID] [Title — verb phrase, outcome-oriented]
**As a** [specific user role — not "user"], **I want to** [action], **so that** [value the role actually cares about].

#### Acceptance Criteria
- Given [precondition], when [action], then [observable outcome]
- ...
```

For system-level or compliance-driven requirements where the persona format gets artificial, use EARS instead:

| EARS pattern | Template | Use for |
|--------------|----------|---------|
| Ubiquitous | The [system] shall [behavior] | Invariants |
| Event-driven | When [trigger], the [system] shall [behavior] | Responses to events |
| State-driven | While [state], the [system] shall [behavior] | Mode-dependent behavior |
| Unwanted behavior | If [undesired condition], then the [system] shall [behavior] | Error and abuse handling |
| Optional | Where [feature is included], the [system] shall [behavior] | Configurable capabilities |

## INVEST Check

Run every story against INVEST before delivering; fix violations rather than annotating them:

- **I**ndependent — schedulable without forcing another story into the same sprint
- **N**egotiable — captures intent, not implementation; the "how" stays open
- **V**aluable — the "so that" names value for the role; "so that the database is updated" fails
- **E**stimable — a developer could size it; unknowns extracted into spike stories
- **S**mall — fits comfortably in a sprint; otherwise split (see below)
- **T**estable — every criterion observable; "works correctly" fails

## Epic Splitting Patterns

Apply the first pattern that yields shippable slices:

1. **By workflow step** — each step of the user journey is a story (browse → select → pay → confirm).
2. **Happy path first** — story 1 is the simplest successful flow; error handling, edge cases, and limits follow as separate stories.
3. **By business rule** — base behavior first, each rule variation (discounts, regions, roles) its own story.
4. **By data variation** — support one input type first (e.g. domestic transfers), add types incrementally.
5. **CRUD split** — create first, then read/update/delete if each carries real value.

Never split by architectural layer — a "backend story" with nothing demonstrable is not a story.

## Definition of Ready

A story is ready for sprint planning when:

- [ ] Acceptance criteria cover the happy path AND at least one failure/edge path
- [ ] Dependencies identified (other stories, external teams, data)
- [ ] Security consideration noted where the story touches auth, money, or personal data (one line; use the security-story-writing skill for dedicated security stories)
- [ ] UX reference attached where there's a user interface
- [ ] Team can estimate it without a meeting-length discussion

## Guidelines

- Write criteria the QA engineer can execute verbatim. Vague criteria are deferred arguments.
- Keep the user role honest: if every story says "as a user", the personas were never real. Use the actual role names from the product.
- When given a batch of raw requirements, first group them into epics, present the grouping for confirmation, then split — don't generate 40 stories in one shot.
- Resist gold-plating: if a criterion doesn't trace back to the "so that", cut it.

Files in this skill

  • SKILL.md3.9 KB
  • evals/evals.json1.9 KB
  • evals/trigger_evals.json1.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.