Product

User Story Mapping: Fixing the Flat Backlog

A prioritized backlog is still a flat list, and flat lists lose the one thing that matters most: the shape of the user's actual journey. Here's Jeff Patton's story map, the slicing discipline that makes it work, and the INVEST and SPIDR tools that keep the stories underneath it honest.

User Story Mapping: Fixing the Flat Backlog

The sprint that convinced me flat backlogs were the problem was, on paper, a successful one. We shipped every committed story: an export function, two settings screens, an admin permissions matrix, a notification preference panel. All real, all requested, all done-done. And at the demo, watching it stitched together, someone asked the question that ruined the afternoon: “so… can a user actually finish signing up yet?” They could not. Four sprints in, we had built a scattering of well-made rooms for a house with no hallway. Every story had been prioritized, estimated, and delivered — and the backlog’s shape had quietly hidden the fact that no end-to-end journey worked at all.

That’s the specific disease Jeff Patton built story mapping to cure, and his diagnosis is blunt: a prioritized list destroys the second dimension. Rank-ordering forces every item into a single file, and single file has no way to represent “these five stories are steps in one journey” or “this story is a luxury version of that one.” In the delivery post of the strategy cascade series I covered how to sequence and deliver work; this post is about the layer that post skipped — how the backlog gets its structure before any sequencing framework touches it.

The map: a backbone and slices

A story map is built in two moves. First, the backbone: the user’s activities laid left to right in narrative order — sign up, set up a project, invite the team, do the core work, share the result. Patton’s framing is that you’re telling the product’s story, and the test of the backbone is that you can read it aloud left to right as a sentence about a user’s day. Under each activity hang the tasks and stories that serve it, more essential at the top, more optional further down.

Second — and this is where the map earns its keep — you slice horizontally. Each slice is a release: a thin line drawn across the entire backbone, taking a little from every activity, so that each slice is a complete, walkable journey at some level of sophistication. The first slice is the walking skeleton — the same instinct as the spike-and-skeleton pattern from the risk post, applied to product scope instead of architecture: sign up crudely, set up minimally, do the core thing once, share it badly. Every slice after that thickens the journey rather than lengthening a corridor to nowhere.

The vignette that made me a convert: rebuilding an onboarding flow, we mapped it and discovered the previous plan — the one from the flat backlog — had scheduled three consecutive sprints inside the first backbone column. Polishing signup to a mirror shine while everything to its right stayed imaginary. The map made the mistake look as absurd as it was; on the list, it had looked like sensible prioritization, because the list can’t show you that depth-first is a choice. We re-sliced, shipped a complete-but-crude journey in the first month, and the feedback from that crude slice reshuffled everything we’d planned to polish — which is the second thing slices buy you: real learning arrives per-journey, not per-feature.

Worked example

The onboarding map, re-sliced

The same backbone read left to right as a user's day, cut into two releases. The first slice is complete but crude end to end; the second thickens it. What used to be three sprints of signup polish is still on the map — it just sits in the backlog band, where its real priority is visible.

Backbone →

Sign up

Set up project

Invite team

Do core work

Share result

MVP

  • Sign up with an email and password

  • Create one project with a name

  • Invite a teammate by email link

  • Add and edit the first item

  • Share a read-only link

Release 2

  • Sign in with Google

  • Start from a project template

  • Bulk-invite from a CSV

  • Comment and assign work

  • Export to PDF

Backlog (unsliced)

Not in a release yet

  • Password strength meter and email verification

  • SSO and domain capture

  • Custom project fields

        Build your own map →

        Keeping the stories underneath honest

        A map is only as good as its cards, and two older disciplines keep the cards from rotting.

        INVEST — independent, negotiable, valuable, estimable, small, testable — is Bill Wake’s checklist for a healthy story, and the letter teams fail most is V: cards that are horizontal layers (“build the API,” “build the UI,” “wire them up”) instead of vertical slices of user-visible value. Horizontal stories are how a flat backlog’s disease re-infects a story map — each layer card is real work, none of them is a walkable step of anyone’s journey, and the map degenerates back into a task list arranged under a narrative header.

        Story splitting is the companion skill, because the most common objection to vertical slicing is “this story is too big to be vertical.” It almost never is. Mike Cohn’s SPIDR patterns name five ways to split without going horizontal: split off the spike (research the unknown separately), split by path (happy path first, edge cases later), by interface (one platform or input method first), by data (one record type first), by rules (relax the business rules, tighten them in a later story). Every one produces a smaller story that still crosses the whole stack and still delivers something a user could touch. On the teams I’ve run, “which SPIDR letter applies” replaced a recurring forty-minute argument with a five-minute one.

        Worth naming what the map doesn’t replace: it structures the delivery backlog, it doesn’t validate that anything on it is worth building — that’s the discovery stack’s job, and the two connect exactly where Teresa Torres’s opportunity tree hands a chosen solution over to delivery. Map the solution you’ve validated; don’t let a beautiful map launder an unvalidated one into looking inevitable. In roadmap terms, the moment an item approaches the Now column is the moment it has earned a map — the roadmap holds problems, and the map is where a problem finally gets a solution shape.

        The failure modes

        The first is the one every artifact in this series shares: the map goes stale. Built in a two-day workshop, photographed, transcribed into a tool, never touched again — at which point it’s a historical document of what the team believed in March. A story map is a living plan or it’s wall art; the difference is whether sprint planning actually happens at the map, slicing and re-slicing, or happens in a ticket queue while the map decorates a Miro board nobody opens.

        The second is subtler: backbone-as-org-chart. Teams under Conway’s Law pressure draw the backbone left to right in the order their teams touch the work — intake, processing, review, output — rather than the order the user experiences it. The map still looks like a map, but it’s a value-stream diagram of the org, and slicing it produces releases shaped like handoffs instead of journeys. The test is always the same: read the backbone aloud as a user’s story. If it only makes sense read as a department’s story, it’s not a user story map yet.

        And the third: mapping everything. The map’s power is proportional to how much journey it shows per square meter, and a map that tries to hold every edge case and admin screen becomes exactly the undifferentiated pile it was meant to replace. Map the journeys that matter; leave the long tail in the list format it deserves — and if the list itself has rotted, that cleanup is its own job.

        Put it to work

        1. Map your current release backlog in an hour. Backbone across the top in user-narrative order, current sprint’s stories placed underneath. Two things become visible immediately: columns with no stories (journey steps you’re ignoring) and columns with a tower of them (depth-first polishing in progress). Both were invisible in the list.
        2. Audit this sprint’s stories for the V. For each story in flight, name the user-visible change it ships. Count the horizontal layers — the “API for,” “backend of,” “part 1 of” stories. That count is how far back toward a flat task list you’ve already slid.
        3. Practice one SPIDR split. Take your current “too big to slice vertically” story and run all five letters against it. In my experience at least two produce a shippable thinner version — and the exercise of finding them teaches vertical slicing faster than any definition of it.

        Further reading

        • Jeff Patton, User Story Mapping — the source; the first three chapters are the argument, the rest is facilitation practice.
        • Mike Cohn, User Stories Applied — INVEST and the craft of the individual story, from before maps existed to hold them.
        • Mike Cohn’s “Five Story-Splitting Techniques” (SPIDR) — the splitting patterns in blog-post form.
        • Henrik Kniberg’s “Making sense of MVP” — the skateboard-to-car essay; the same slicing logic as the map, in one drawing everyone’s seen and half of everyone misreads.
        About the author

        Prakash Poudel Sharma

        Engineering Manager · Product Owner · Varicon

        Engineering Manager at Varicon, leading the Onboarding squad as Product Owner. Eleven years of building software — first as a programmer, then as a founder, now sharpening the product craft from the inside of a focused team.

        Keep reading

        More on this

        Join the conversation0 comments

        What did you take away?

        Thoughts, pushback, or a story of your own? Drop a reply below — I read every one.

        Comments are powered by Disqus. By posting you agree to theirterms.

        0:000:00