Story Maps
This feature is behind the
story-mapsfeature flag. See Feature Flags for details.
Story Maps lay out a product's user journey as a grid so a team can see the whole experience at once, then slice it into releases. Instead of a flat backlog, work is arranged along the path a user actually takes — left to right in the order things happen, top to bottom in order of priority.
The technique comes from Jeff Patton's User Story Mapping. Wayd's board follows the familiar shape: a narrative flow across the top, the detail hanging beneath it, and horizontal bands for slicing that detail into releases.
The Structure
A story map has four levels, plus personas that cut across them:
- Goal — What the user is trying to accomplish. The top row of the board, read left to right as the journey unfolds. Goals are sometimes called activities or backbone items.
- Step — A stage within a goal. Each step gets its own column, so the second row reads as the narrative flow across the whole map.
- Task — A specific piece of work under a step. Tasks stack vertically inside the grid cell where their step column meets a swim lane row. A task can also carry a description and a checklist — see Task Details.
- Swim Lane — A horizontal band slicing the map into releases, milestones, or phases. Every task sits in exactly one lane.
- Persona — Who a step or task is for. Personas are tags, not a level of the hierarchy — see Personas.
A goal can have no steps, and a step can have no tasks. Both still hold their place on the board so you can see the gap.
The Board
The detail page renders the whole map as one aligned grid:
┌────────┬───────────────────────────────────────────────┐
│ Goals │ Landing Page │ Story mapping session│
├────────┼────────────┬───────────┼──────────┬───────────┤
│ Steps │ Navigate │ Create a │ Persona │ Story map │
│ │ to the page│ new map │ mgmt │ mgmt │
├────────┼────────────┼───────────┼──────────┼───────────┤
│ Tasks 12 tasks │ ← swim lane
├────────┼────────────┼───────────┼──────────┼───────────┤
│ │ [task] │ [task] │ [task] │ [task] │
│ │ [task] │ │ [task] │ │
├────────┴────────────┴───────────┴──────────┴───────────┤
│ Release 2 8 tasks │ ← swim lane
├────────┬────────────┬───────────┬──────────┬───────────┤
│ │ [task] │ [task] │ │ [task] │
└────────┴────────────┴───────────┴──────────┴───────────┘
Every step gets one column, and a goal header spans the columns of its own steps. Columns share the available width evenly and stop shrinking at a minimum, so a wide map scrolls rather than squeezing its cards into unreadable slivers.
Each swim lane is a full-width banner followed by a row of cells. A task's position is the intersection of its step's column and its lane's row.
The board keeps its headers in view as you scroll: the label column on the left stays fixed while the board scrolls sideways, and the Goals and Steps rows stay pinned to the top while the task rows scroll underneath. On a tall or wide map you never lose track of which goal and step a card belongs to.
Collapsing
Goals and swim lanes each have a caret beside their name that folds them away — a way to set a finished part of the board aside while you work on the next.
- A collapsed swim lane keeps its banner and hides its row of cards.
- A collapsed goal folds to a narrow vertical strip showing its name, hiding its steps and their tasks.
Collapsing only changes your own view. Nothing is deleted, nothing is sent to the server, and other people looking at the same map are unaffected. Expanding brings everything straight back. Because collapsing is a view setting rather than a saved one, the board opens fully expanded each visit.
A collapsed goal or lane can still be dragged to reorder it, but its hidden steps and tasks cannot be dropped on until you expand it again.
Personas
Personas identify who a piece of the map is for — Product Manager, Engineer, Customer. They are scoped to a single map: creating a persona on one map does not create it anywhere else.
A persona has a name, an optional description, and a color. Steps and tasks can each be tagged with any number of personas.
Tagging
Every step and task card has a row of small dots along the bottom, one per persona on the map. A filled dot means that persona is linked; a hollow ring means it is not. Click a dot to toggle the link. Hovering a dot names the persona.
Goals are not tagged directly — a goal is a container, and it takes its relevance from the steps and tasks beneath it.
Filtering
The bar above the board filters the map to one persona. Click a persona chip to select it, click it again (or click All) to clear.
Filtering mutes rather than hides: non-matching steps and tasks fade back, so you can still see the shape of the whole map while the persona's slice stands out. A goal stays lit whenever any step or task beneath it matches.
The counts on the right of the filter bar — goals, steps, tasks — follow the filter, as do the per-lane task counts on each swim lane banner.
Managing personas
Type a name into + Persona for a quick add; a color is assigned automatically. Manage opens a dialog for editing names, descriptions, and colors, reordering personas by drag, and deleting them. Each row shows how many steps and tasks currently use that persona.
Deleting a persona untags it from every step and task on the map. It does not delete any of that work.
Swim Lanes
Swim lanes slice the map horizontally. The typical use is release planning: everything in the top lane ships first, the next lane ships after that.
Every map starts with one lane named Tasks. This default lane is fixed — it cannot be renamed, reordered, or deleted, and it is always first. Every other lane can be renamed, dragged to reorder, and deleted.
Deleting a lane does not delete its tasks — they move to the default lane, preserving their relative order. The confirmation tells you how many tasks will move, and a message afterwards confirms it.
Each lane banner shows its task count on the right. This count follows the persona filter; the count in the delete confirmation does not, because every task moves regardless of what is currently on screen.
Lane dates
A lane can carry an optional start date, end date, or both. Hover a lane to reveal a calendar icon, then pick the dates.
Both dates are independent and entirely descriptive — nothing is scheduled or validated from them, and a lane with only an end date is perfectly valid. When one date is set it is shown on its own; when both are set they read as a range.
Editing
Click any goal, step, task, or lane name to edit it in place. Enter saves, Escape cancels, and clicking away saves. Leaving the field empty keeps the previous name. A task holds more than its title — click the card itself to open its details.
Add buttons appear on hover: + on a goal cell adds a step, + on a step cell adds a task, and Add swim lane sits at the bottom of the board. New items are created with a placeholder name and open straight into edit mode, so you can add a goal and type its real name without a second click.
Two placeholders offer the same thing in place. A goal with no steps yet shows a dashed + Add step slot in the Steps row, and every task cell shows a dashed + Task row at the foot of its cards when you hover it. Adding through a cell's own placeholder puts the task in that cell — the step column you clicked, in that swim lane — rather than in the default lane.
Delete buttons appear on hover in the same places. Deleting a goal deletes its steps and their tasks; deleting a step deletes its tasks. Both warn you first.
Task Details
Click a task card to open its details. Everything a card cannot show — a description, a checklist — lives there.
The panel is not modal. The board stays live beside it: you can keep dragging cards, editing names, and clicking other tasks, and the panel re-points at whichever task you pick. Clicking the open task again closes it, as does the ✕ in the panel header.
On a wide screen the panel opens beside the board and the board narrows to make room, so no column ends up underneath it. On a narrower screen there isn't width to spare, so it slides over the board instead.
| Field | Notes |
|---|---|
| Title | The same title shown on the card. Enter saves, Escape cancels. Leaving it empty keeps the previous title. |
| Description | Free text for anything the title cannot carry. Saves when you click away. |
| Swim Lane | Moves the task to another lane in the same step — the keyboard-friendly alternative to dragging it. |
| Personas | The same tags as the card's dots, with names. A tagged persona shows in its own colour; an untagged one is muted. Click to toggle. |
| Checklist | Sub-items for work too small to be its own task. |
Title and Description each show a character count while you are typing in them; a title holds up to 128 characters, a description up to 2,048, and a checklist item up to 256. Delete task at the foot of the panel deletes the task after you confirm.
Checklists
A checklist breaks a task into smaller pieces without cluttering the board. The card shows the tally — 2/5 — and the panel holds the items.
Tick an item to mark it done; it greys out and strikes through, and the card's tally updates. Click an item's name to rename it in place. + Add item appends to the list and stays open so you can add several in a row.
Rearranging
Everything on the board can be dragged. There is no grab handle — drag the card itself. A short drag threshold keeps a plain click free for editing and for the persona dots.
| Item | Can be moved |
|---|---|
| Goal | Reordered among goals |
| Step | Reordered within its goal, or moved to a different goal |
| Task | Reordered within its cell, moved to another step, or moved to another swim lane. A lane change can also be made from the task details panel, without dragging |
| Swim Lane | Reordered, except the default lane, which stays first |
While dragging, a blue insertion line shows exactly where the item will land — a vertical line for goals and steps, a horizontal one for tasks. Each gap between two items has a single line, so one landing position never shows two possible marks. An empty cell highlights instead, since it has no card to draw a line against.
When a drag would move an item to a different parent, that parent is outlined as well, so the insertion line answers "where" while the outline answers "into what":
| Dragging | Outlined |
|---|---|
| A step into another goal | That goal's whole run of step columns |
| A task into another step or lane | The destination cell |
Reordering within the same parent draws no outline — the parent is not in question there.
Illegal targets never highlight: a step dragged over the goals row shows nothing, because a step cannot become a goal.
To move a step into a goal that has no steps yet, drop it on the + Add step placeholder beneath that goal.
Real-time Collaboration
Story maps update live. When several people have the same map open, their avatars appear in the page header, and every change — a renamed step, a dragged task, a new persona — appears for everyone without a refresh. This makes the board usable as the shared artifact during a live story mapping session.
Exporting
Actions → Export CSV downloads the map as a spreadsheet. Anyone who can view the map can export it.
The file has one row per task, with the goal and step repeated on each row:
| Column | Notes |
|---|---|
| Goal | |
| Goal Order | Position on the board, starting at 1 |
| Step | |
| Step Order | Position within its goal |
| Task | |
| Task Order | Position within its cell |
| Description | |
| Personas | Semicolon-separated, e.g. Engineer; Designer |
| Swim Lane |
Rows come out in board order — goal by goal, step by step, lane by lane — so the file reads the same way the board does. Goals with no steps and steps with no tasks still get a row, with the columns below them blank, so nothing on the board is missing from the file.
The Personas column describes the row's subject: a task's own personas on a task row, and the step's on a row for an empty step. A step's personas are not repeated onto each of its task rows.
The export always covers the whole map. An active persona filter changes what you see on the board but not what lands in the file.
Story Map Lifecycle
A story map is Active when created, and its creator is its Owner, shown in the story maps list alongside Key, Name and Status. Actions → Archive, or Archive in the list's row menu, retires it.
Archived maps become read-only — the add, edit, delete, and drag affordances all disappear — and are hidden from the story maps list unless you switch on Include Archived. Archiving cannot be undone, so it asks for confirmation first.
Delete removes a map entirely and is separate from archiving; a map does not need to be archived first.
Guided Tour
The first time you open an active map you can edit, a tour starts. On an empty board it builds along with you — it waits while you add a goal, a step beneath it, and a task beneath that — and on a board that already has content it points out the goals, steps and tasks there. Either way it goes on to opening a task, dragging, personas and swim lanes. Once you finish or close it, it does not start again on its own; the ? button (Take a tour) in the page header replays it.
Permissions
| Permission | Grants |
|---|---|
| View Story Maps | Open the list and any map; export to CSV |
| Create Story Maps | Create a story map |
| Update Story Maps | Everything on the board — goals, steps, tasks, lanes, personas — plus editing and archiving the map |
| Delete Story Maps | Delete a story map |
Everything a map contains is governed by Update on the map itself; there are no separate permissions for goals, steps, tasks, lanes, or personas.
Common Tasks
Creating a story map
- Navigate to Planning > Story Maps
- Click Create Story Map
- Enter a Name and optional Description
- Open the new map and click + Goal in the header, or Add goal on the empty board, to start the backbone
Building the backbone
- Add the goals for the journey, left to right in the order a user encounters them
- Under each goal, add the steps that make it up
- Read the steps row on its own — it should tell the story of the journey end to end
Getting the top two rows right first is worth the time. The backbone is what makes the rest of the map readable.
Slicing into releases
- Add a swim lane for each release or milestone
- Drag tasks up into the earliest lane that must contain them
- Read across the top lane — that row is your first release, described as a complete journey rather than a list of tickets
Setting up personas
- Add a persona per audience using + Persona
- Tag steps and tasks by clicking the dots on their cards
- Click a persona chip to see that audience's slice of the journey
Fleshing out a task
- Click the task card to open its details
- Add a description for anything the title cannot carry
- Break the work into checklist items — the card shows the tally, so progress reads from the board