Learn

/

Splitting Patterns

Splitting Patterns

9 patterns

The Humanizing Work nine patterns and the SPIDR mnemonic that compresses the most useful five. Workflow steps, CRUD, business rules, data shapes, input methods, major effort, simple-then-complex, defer performance, and spike.

Avoid
Epic
PUB-100
Editors publish articles through legal and marketing approval
Child issues
Approval workflow data model and states
Routing service for approver assignment
Approval queue UI for reviewers
Notifications and audit log

Prefer
Epic
PUB-100
Editors publish articles through legal and marketing approval
Child issues
Editor publishes directly without review
Editor publishes after editor review
Editor publishes after legal review
Editor publishes after marketing review
Editor previews in staging before publish
Why avoid

Splitting by component (data model, routing, queue UI, notifications) is horizontal slicing. None of those stories ship a working publish flow on their own; an editor cannot publish anything until the whole stack lands.

Why prefer

Workflow-step splits ship the simplest end-to-end path first, then layer in the intermediate steps. Each slice is a real flow editors can use today.

Humanizing Work: Splitting User Stories
Avoid
Epic
ACC-44
Users manage their account
Child issues
Account management UI
Account API endpoints

Prefer
Epic
ACC-44
Users manage their account
Child issues
User signs up (create)
User views their profile (read)
User updates their profile (update)
User closes their account (delete)
Why avoid

'UI' and 'API' is horizontal slicing. The team builds the bones for all four operations, ships none of them, and product cannot reorder a single piece against its actual urgency.

Why prefer

'Manage' is almost always a clue that multiple operations are hiding behind one verb. CRUD-style splitting names them, often with very different priorities. Sign-up is urgent; close-account can wait until next quarter.

Humanizing Work: Splitting User Stories
Avoid
Epic
FLT-21
Search flights with flexible dates
Child issues
Date-range picker UI
Search API accepts a date range
Results list renders flexible-date matches

Prefer
Epic
FLT-21
Search flights with flexible dates
Child issues
Search flights within N days of a target date
Search flights on any weekend in a month
Search flights plus or minus N days of a window
Why avoid

Splitting into picker UI, API, and results list is horizontal slicing dressed up as a feature breakdown. None of the three stories ships a working search alone, and the three actual rule variations are still hidden inside whichever story claims them.

Why prefer

Three rules, three stories. The team can ship the most-used variant first and learn whether the other two are actually wanted before building them. The split exposes priorities; the lump hides them.

Humanizing Work: Splitting User Stories
Avoid
Epic
LOC-12
Customers find services near a location
Child issues
Geocoding service for all location types
Location index covering country/city/neighborhood
Search results UI

Prefer
Epic
LOC-12
Customers find services near a location
Child issues
Search by country
Search by city
Search by neighborhood
Why avoid

Splitting into geocoder, index, and UI is layer-by-layer work. All three data variations are still bundled into each layer, so country users wait for the neighborhood index to land before anything ships.

Why prefer

Start with the simplest data shape (country), ship it end-to-end, then broaden. You often discover that later variations are wanted less than you assumed and can be deprioritized.

Humanizing Work: Splitting User Stories
Avoid
Epic
BOOK-31
Customers book a meeting time
Child issues
Booking domain model and persistence
Booking API for create, read, cancel
Calendar picker and timezone autocomplete UI
Confirmation email

Prefer
Epic
BOOK-31
Customers book a meeting time
Child issues
Customer types a date and time into a plain text field
Customer picks a time from a calendar
Customer's timezone autocompletes
Why avoid

Splitting into model, API, UI, and email is layer-by-layer slicing. No customer can book anything until all four ship together; the team cannot trade the calendar picker for an earlier launch even though it is the most expensive piece.

Why prefer

When the UI is doing most of the work, ship the feature with a minimal input first. The booking logic, validation, and confirmation are live on day one. The fancy interface lands in slice two without blocking the core value.

Mike Cohn: SPIDR
Avoid
Epic
PAY-50
Customers pay with any card type
Child issues
Payment processor abstraction layer
Card-network adapters (Visa, MC, Amex, Discover)
Checkout UI with card selection
Receipts and refund handling

Prefer
Epic
PAY-50
Customers pay with any card type
Child issues
Customer pays with Visa end-to-end (the payment pipeline)
Customer pays with Mastercard
Customer pays with Amex
Customer pays with Discover
Why avoid

Splitting into abstraction, adapters, UI, and receipts is layer-by-layer work. No customer pays anything until all four ship, and the team has built the abstraction without ever feeling the shape of one real payment going through.

Why prefer

The first slice carries the entire infrastructure cost; the rest are nearly free once the pipeline is live. The team estimates Mastercard accurately by the time it lands, because they have learned what the pipeline actually requires.

Humanizing Work: Splitting User Stories
Avoid
Task
META-30
When to spike
Description

Whenever a story looks big or hard, file a spike to research it before estimating.


Prefer
Task
META-30
When to spike
Description

Reach for a spike only when the other splitting patterns do not apply, that is, when the team genuinely cannot estimate because the implementation approach is unclear. A spike is an admission that you cannot split yet, not a default move.

Why avoid

Spiking by reflex is procrastination dressed as research. Most 'big' stories are not unknowable; they are unsplit. Try the patterns first; spike only when the patterns honestly do not apply.

Why prefer

Spike is the explicit last resort in the Humanizing Work guide. Most stories can be split by workflow, data, rules, or interface before research is needed. Defaulting to a spike costs the team a sprint of value while the eight other patterns sit unused.

Mike Cohn: SPIDR
Avoid
Story
EXP-77
13 pts
Customer exports a report
Description

During refinement: "yeah, but also schedule it." "Yeah, but also email it." "Yeah, also let them filter the columns." All in scope.


Prefer
Story
EXP-77
3 pts
Customer exports a report (CSV, current filters)
Description

Captured during refinement and pulled out as their own candidate stories: scheduled exports (EXP-78), emailed exports (EXP-79), per-column selection (EXP-80). Product prioritizes the candidates separately.

Why avoid

Keeping all of it in one story is the cure for productivity. The 13 will not finish in the sprint, and product loses the chance to defer the things they would have deferred anyway if asked.

Why prefer

When the scope keeps growing, capture the simple core as the first story and pull each 'yeah, but also' into its own candidate. Product prioritizes them after; the original story can ship.

Humanizing Work: Splitting User Stories
Avoid
Story
RPT-44
8 pts
Managers see throughput report (sub-second p99 from day one)
Description

Compute the report, build the page, and optimize cold-start latency to under 1s p99. Cache layer included.


Prefer
Story
RPT-44
3 pts
Managers see throughput report (correct, possibly slow)
Description

Ship the correct report with a loading spinner. Optimization (caching, pre-aggregation) is RPT-45 and gets prioritized after we see real usage.

Why avoid

Building the cache before the report ships locks in assumptions about hot paths the team has not measured. Half the optimization work is for usage patterns that never materialize.

Why prefer

Ship correct, then ship fast. The optimization story can be sized accurately once you see where the real time is going. Premature optimization wastes estimates and often optimizes the wrong path.

Humanizing Work: Splitting User Stories