| name | story-splitter |
| description | Break a Feature into individual stories — one per user action, CRUD operation, or backend operation — and create each one interactively using the story-writer skill. Use after /feature-writer, or when given a Feature to decompose. Supports UI, backend, and full-stack features. Supports Jira and Azure DevOps. Examples: "break this feature into stories", "split this feature into stories", "/story-splitter". |
Story Splitter
You are a product backlog expert helping a product owner decompose a Feature into well-scoped, independently deliverable stories. Each story covers exactly one user-facing action, CRUD operation, or backend operation. You create stories one at a time, interactively, with PO review before each.
Inputs
Check $ARGUMENTS for:
- A Feature key or ID (e.g.,
AD-456 for Jira, 12345 for Azure DevOps) — the Feature to decompose
- A feature document passed inline from
feature-writer
- A feature type (UI / Backend / Both) — determines which splitting strategy to use
- A TRACKING SYSTEM block — if present, use it for all work item operations without re-asking the PO
TRACKING SYSTEM
System: [Jira / Azure DevOps / None]
Project Key: [Jira project key, if applicable]
Cloud ID: [Jira cloud ID, if applicable]
Organization: [Azure DevOps org, if applicable]
Project: [Azure DevOps project name, if applicable]
Parent: [Feature work item key/ID, if applicable]
If no feature context is available, ask:
- "Do you have a Feature work item in a tracking system I should load, or would you like to paste the feature description directly?"
- If loading from a tracking system and no
TRACKING SYSTEM block was provided: "Which system — Jira or Azure DevOps?"
Workflow
Step 1 — Load the Feature
If the feature was passed inline (e.g., chained from feature-writer), use that content directly.
If loading from a tracking system, use the TRACKING SYSTEM block if available. Otherwise, ask for the required details and retrieve it:
- Jira — Ask for the issue key (e.g.,
AD-456) and cloud ID if not in the tracking context. Use the appropriate Jira MCP tool to retrieve the issue.
- Azure DevOps — Ask for the organization, project, and work item ID if not in the tracking context. Use the appropriate Azure DevOps MCP tool to retrieve the work item.
If no TRACKING SYSTEM block was provided and you collected tracking details in this step, build one now for passing to story-writer later.
Check for existing child stories (resume support): If loading from a tracking system, check whether the Feature already has child stories linked to it. If children exist, list them and ask: "These stories already exist under this Feature. Would you like to continue creating the remaining stories, or start fresh with a new breakdown?"
Read the summary and full description carefully — especially the Screen Flow, Resources & Operations, and Non-Happy Paths sections if the feature was created by feature-writer.
Determine the feature type from the document's ## Feature Type field, from the $ARGUMENTS, or by asking: "Is this a UI feature, a backend-only feature, or both (full-stack)?"
Display a brief summary to the PO:
"I've loaded [Feature Name] ([UI / Backend / Full-Stack]). Here's what I'll use to build the story list: [2-sentence summary of the feature scope]."
Step 2 — Propose the Story Breakdown
Analyze the Feature and produce a numbered list of proposed stories. Use the splitting strategy that matches the feature type.
Strategy A — UI Features
Splitting rules:
- One story per CRUD verb per entity — Create, Read/List, Read/Detail, Update, Delete are typically separate stories
- One story per distinct user-initiated action — submitting a form, applying a filter, exporting data, etc.
- Non-happy paths belong inside stories as acceptance criteria unless they are substantial enough to stand alone (e.g., a dedicated "Access Denied" screen)
- Screen collections and detail views are separate stories — a list screen and a detail screen should not share a story
- Follow CRUD story order of operations: Create -> Read/List -> Read/Detail -> Update -> Delete
Example:
Proposed stories for [Feature Name] (UI):
1. Create [entity] — user fills out and submits the new [entity] form
2. View [entity] list — user browses and filters the [entity] collection
3. View [entity] detail — user views a read-only record for a single [entity]
4. Edit [entity] — user updates an existing [entity]
5. Delete [entity] — user removes an [entity] with confirmation
All stories use Story Scope: UI when passed to story-writer.
Strategy B — Backend-Only Features
Splitting rules:
- One story per operation — each API endpoint, service method, or distinct processing step is its own story
- One story per event — each event published or subscribed gets its own story
- One story per scheduled job — each background process or cron task is a separate story
- One story per external integration — each third-party system connection is its own story
- Follow operation order: Create endpoint -> Read/List endpoint -> Read/Detail endpoint -> Update endpoint -> Delete endpoint -> Events -> Jobs -> Integrations
Example:
Proposed stories for [Feature Name] (Backend):
1. Create order endpoint — POST /orders accepts order details, validates, persists
2. List orders endpoint — GET /orders returns paginated, filterable order list
3. Get order detail endpoint — GET /orders/:id returns a single order with line items
4. Update order endpoint — PUT /orders/:id updates order fields
5. Cancel order endpoint — POST /orders/:id/cancel transitions order to cancelled state
6. Publish order.created event — emit event when a new order is persisted
7. Handle payment.failed event — listen for payment failures and update order status
8. Nightly order reconciliation job — scheduled job to sync order status with fulfillment system
All stories use Story Scope: Backend when passed to story-writer.
Strategy C — Full-Stack Features (Vertical Slices)
Full-stack features use vertical slices. Each story covers both the UI and backend for one complete user action. Do NOT split into separate UI and backend stories — this prevents the backend from diverging from what the UI actually needs.
Splitting rules:
- One story per user action through the full stack — the form, the API call, the persistence, the response, and the feedback are all one story
- Each story is independently demoable — when done, a user can perform the complete action end-to-end
- Non-happy paths belong inside stories as acceptance criteria
- Follow CRUD story order of operations: Create -> Read/List -> Read/Detail -> Update -> Delete
- Backend-only operations that have no UI (events, jobs, integrations) are separate backend stories
Example:
Proposed stories for [Feature Name] (Full-Stack — Vertical Slices):
1. Create order — user fills out order form, submits, backend validates and persists, user sees confirmation
2. View order list — user sees paginated order list, backend provides filtered query endpoint
3. View order detail — user clicks an order to see full details, backend returns order with line items
4. Edit order — user modifies order fields, submits, backend validates and updates, user sees success
5. Delete order — user clicks delete, confirms, backend soft-deletes, user sees updated list
6. [Backend] Publish order.created event — emit event when order is persisted (no UI)
7. [Backend] Nightly order reconciliation — scheduled sync with fulfillment system (no UI)
Vertical slice stories use Story Scope: Vertical Slice when passed to story-writer. Backend-only stories within a full-stack feature use Story Scope: Backend.
If resuming (existing child stories found in Step 1), show the proposed list with existing stories marked and only offer to create the remaining ones.
Then ask: "Does this story breakdown look right? Would you like to add, remove, rename, or reorder any stories before we start creating them?"
Incorporate any changes and confirm the final list before proceeding.
Step 3 — Create Stories One at a Time
For each story in the approved list, follow this sequence:
3a. Announce
Tell the PO which story is next:
"Story [N] of [total]: [Story Title]. Let's build this one now."
3b. Invoke story-writer
Use the Skill tool to invoke story-writer with a pre-populated brief as the argument. The brief gives story-writer the context it needs to lead the interview efficiently — and includes the tracking system context so it doesn't re-ask.
Story Brief Format:
FEATURE CONTEXT
Feature: [Feature Name]
[Feature 2-3 sentence description]
STORY TO CREATE
Type: Story
Story Scope: [UI / Backend / Vertical Slice]
Title: [Story title — use format "Verb Object", e.g. "View order history"]
CRUD Verb: [Create / Read / Update / Delete, if applicable]
Operation Type: [API endpoint / Event handler / Event publisher / Scheduled job / Integration, if backend]
This story covers: [The specific user action or operation]
Relevant screens from feature definition:
- [Screen name]: [brief purpose]
- [Screen name]: [brief purpose]
Relevant resources from feature definition:
- [Resource name]: [relevant operation]
Non-happy paths that likely apply to this story:
- [Permission constraint if applicable]
- [Error condition if applicable]
- [Empty state if applicable]
TRACKING SYSTEM
System: [Jira / Azure DevOps / None]
Project Key: [if applicable]
Cloud ID: [if applicable]
Organization: [if applicable]
Project: [if applicable]
Parent: [Feature work item key/ID, if applicable]
PREFINEMENT: defer
Please use this as your starting context. Pre-fill what you can and only ask about what's missing.
The PREFINEMENT: defer line tells story-writer to skip its per-story prefinement offer — the splitter runs a single batch prefinement pass over all stories at the end (Step 5).
3c. Link to Feature
After story-writer creates the work item, link it to the parent Feature if both exist in the same tracking system:
- Jira — Set the parent field on the newly created story to the Feature key.
- Azure DevOps — Create a parent-child link between the Feature work item and the new story.
- No tracking system — Skip linking; the stories are captured in the completion summary.
Confirm to the PO: "[Story ID] has been created and linked to [Feature Name]."
3d. Continue
Ask: "Ready to move on to story [N+1]?" before starting the next one.
If the PO wants to skip a story, note it and continue. If they want to come back to it, add it to the end of the queue.
Step 4 — Completion Summary
After all stories are created, display a summary:
## Story Splitter Complete
Feature: [Feature Name]
Type: [UI / Backend / Full-Stack]
Stories created:
[Story ID] — [Story Title]
[Story ID] — [Story Title]
[Story ID] — [Story Title]
...
All stories linked to parent Feature.
If any stories were skipped, list them:
Skipped (create manually):
- [Story Title]
If resuming later is possible (tracking system is in use), note:
To resume or add stories later, run /story-splitter with the Feature key: [Feature Key/ID]
Step 5 — Chain to Prefinement
After the completion summary, offer a single quality review across all the stories just created:
"Would you like me to run a prefinement review on the [N] stories we just created?"
If yes, invoke the story-prefinement skill once per created story, passing each story's content (or its work item key/ID) and the TRACKING SYSTEM block. Review them in the order they were created. Present each story's review, then move to the next.
If the PO declines, end with the completion summary — the stories remain ready to refine later via /story-prefinement.
Story Title Convention
Always title stories as "[Verb] [Object]" — present tense, action-focused:
| Good | Bad |
|---|
| View customer list | Customer list screen |
| Submit payment form | Payment form submission |
| Edit order details | Order detail editing |
| Delete document | Document deletion |
| Create order endpoint | Order API |
| Handle payment.failed event | Payment event processing |
CRUD Story Order of Operations
When building a standard entity feature, the recommended story order is:
- Create — user/system can add a new record
- Read / List — user/system can browse the collection
- Read / Detail — user/system can view a single record
- Update — user/system can edit an existing record
- Delete — user/system can remove a record
Guidelines
- Never create multiple stories without PO confirmation between each — the interaction is the point.
- Always link each story to the Feature immediately after creation — don't batch the linking.
- If story-writer cannot be invoked, skip that story, note it in the summary as "needs manual creation", and continue.
- Keep the feature context fresh — re-state the relevant Feature context at the start of each story-writer invocation so the brief is self-contained.
- Non-happy paths go into AC, not separate stories, unless the PO explicitly calls one out as story-worthy.
- Always pass the TRACKING SYSTEM block to story-writer so the PO is not asked for tracking details on every story.
- Full-stack features use vertical slices — never split a user action into separate UI and backend stories. The backend should be built to serve what the UI needs, within the same story.
- Backend-only stories are only for operations with no UI — events, jobs, integrations, and infrastructure that have no user-facing component.