[Guides](https://featkpr.com/guides) / checked on 28 Sep 2026

# User flow vs user journey: what each means, with goals, tasks and features

A user flow is the set of steps a person takes inside a product to finish one task; a user journey is the wider path a person takes to reach a goal with a company or product, across channels and over time. Both definitions are the Nielsen Norman Group’s ([Kaplan, NN/g, 2023](https://www.nngroup.com/articles/user-journeys-vs-user-flows/) · UX research firm ) . The difference is scale: a flow happens on a few screens in minutes, and a journey can take weeks and happens mostly outside the product.

Tim Derzhavets · published 28 Sep 2026 · checked on 28 Sep 2026

## Five words, side by side

The two words travel with three others: feature, task and goal. Teams mix them up because each one describes “what the user does” at a different size.

| Word | What it is | Size | On BookStack |

|---|---|---|---|

| Feature | One thing the app lets a person do | One action | “Delete an API token”, in the Api module |

| Task | An activity with a start and an end | Minutes | Open the token’s page and confirm the delete |

| Goal | What the person wants done: the reason for the task | One sitting | “Delete an API token”, the goal on the Flows board |

| User flow | The steps inside the product for one task | Minutes | Six screens, from the home page to the delete page |

| User journey | The path to a larger goal, across channels and time | Days to months | Not in the code: most of it happens outside the app |

The definitions of feature and task come from the literature. A feature is “a prominent or distinctive user-visible aspect, quality, or characteristic of a software system” ([Kang et al., SEI, 1990](https://en.wikipedia.org/wiki/Software_feature) · technical report ) . A task is “any activity that is usually observable and has a start and an end point” ([Rosala, NN/g, 2020](https://www.nngroup.com/articles/task-analysis/) · UX research firm ) . The names in the BookStack column are from featkpr’s records of that app; the flow is drawn below.

## How a flow differs from a journey

The Nielsen Norman Group puts the difference in the level of detail: “User journeys describe a user’s holistic, high-level experience across channels and over time. User flows zoom in to describe a set of specific, discrete interactions that make up a common user pathway through a product.” ([Kaplan, NN/g, 2023](https://www.nngroup.com/articles/user-journeys-vs-user-flows/) · UX research firm )

So the two answer different questions. A journey map asks why a person arrives, where they stall and why they leave, including the parts no screen of yours can see: the search that brought them, the colleague who recommended you, the email they ignored. A flow asks whether the product gets a person through one task, step by step, and what breaks on the way when the code changes.

That is why a journey rarely lives in a codebase and a flow always does. Every step of a flow is a screen or a request that exists in the app’s code, and you can walk it on a running copy.

## Goals and tasks are not the same thing

Filling in a form is a task. Registering for a service is the goal the task serves ([Rosala, NN/g, 2020](https://www.nngroup.com/articles/task-analysis/) · UX research firm ) . The distinction matters more than it looks, because tasks change every time the screens change and goals mostly don’t. A redesign that moves a button rewrites the task. The goal, delete the token so the old script loses access, stays the same.

A useful test: if you can say it as a click (“press Save”), it is a step. If it has a start and an end on the screen (“fill in the new-book form”), it is a task. If you would still want it done after a redesign (“publish the page”), it is a goal.

featkpr keys its goals on what changes in the app, not on the clicks. Each goal record names an object and the change made to it: [the record “Delete the api token”](https://featkpr.com/library/goals#g-963e6f0c8583) is the object `api_token` with the change `deleted` , and a redesign that moves the delete button changes neither.

## How featkpr uses the words: goals, features, flows

featkpr maps a web app in three layers, smallest first:

- a **goal** is one thing a person gets done, keyed on what changes: an object and the change made to it;
- a **feature** is a named part of the app, read from its code, and it groups the goals kept on its routes;
- a **module** groups features by the part of the code they come from.

A goal sits inside a feature, and a feature inside a module. A **flow** is not a fourth layer: it is how a person moves through the app, screen by screen, and it ends on a goal. On BookStack featkpr holds 298 features in 13 modules, and its Flows board holds 149 flows ending at 89 features (20 Oct 2026).

featkpr says “flow” and never “journey” for a path inside an app, because a path through real screens is what it can read and show. Its flows are close to the Nielsen Norman Group’s user flows, with two differences. They are drafted from a crawl of a running copy of the app, not drawn by a designer, so each step is a screen that exists. And each one waits for a person to keep it or drop it before it counts.

Here is one real goal from BookStack, inside its feature and module, with a drafted flow that ends on it:

BookStack · featkpr's records, read 20 Oct 2026 · one goal, its feature and module, and one flow of the Flows board, as drafted

Module **Api**

Feature [Delete an API token](https://featkpr.com/library/features#f-bookstack-api-delete-an-api-token) proven by the wrong-user check

groups 1 goal kept on its routes

- Goal [Open the user api token (delete)](https://featkpr.com/library/goals#g-cc2905cac6f2) user api token · shown · proven · the flow below ends here

Flow [6 screens, from the home page](https://featkpr.com/library/flows#fl-8dbd00523be6) , ending on [Open the user api token (delete)](https://featkpr.com/library/goals#g-cc2905cac6f2)

- `/`
- `/my-account`
- `/my-account/profile`
- `/settings/users/{id}`
- `/api-tokens/{userId}/{tokenId}`
- `/api-tokens/{userId}/{tokenId}/delete`

Waiting on a person: keep it as a flow, or drop it

Goal inside feature inside module; a flow is a path across the app that ends on a goal. The screens are the ones featkpr's crawl reached on a running copy of BookStack, in order. Routes are shown without their method when it is GET.

The same idea in featkpr’s app: a drafted goal and the real screens a person walks to reach it, left to right.

**Flows, a drafted goal** · featkpr's app on sample data; its counts are the sample's

Every flow featkpr drafted for BookStack is in the [library of flows](https://featkpr.com/library/flows) , grouped by the goal it reaches. The goals are in the [library of goals](https://featkpr.com/library/goals) and the features in the [library of features](https://featkpr.com/library/features) .

## Which one should you draw?

- **A journey map** when the question is why people arrive, stall or leave, including what happens outside the product. It belongs to research, marketing and service design.
- **A flow** when the question is whether the product gets a person through a task, and what a change to the code breaks on the way. It belongs to product, design and engineering together.
- **A goal list** when the team first has to agree what counts as done, before anyone argues about screens.
- **A feature list** when you need to know what exists at all. The [feature inventory guide](https://featkpr.com/guides/feature-inventory) shows what to put on one, with a template.

Most teams need all four at different times. The mistake is using one word for all of them.

## Mix-ups worth avoiding

**Calling every flow a journey.** A diagram of six screens inside one product is a flow. Calling it a journey hides the part a journey map is for: what happens outside.

**Writing tasks as goals.** “Fill in the form” is a task. When a list of goals reads like a list of clicks, it will need rewriting at the next redesign.

**One flow per feature.** A goal often rests on several features. On BookStack, the goal “Update the permissions” rests on routes for books, chapters, pages, shelves and the API. A flow can pass through several goals on its way, too.

**Treating a user story as a flow.** A user story (“as an editor, I want to delete a token so that the old script loses access”) states a goal and its reason. It names no screens. The flow is how the product answers it.

## Where featkpr fits

featkpr drafts the flows and goals of a web app from its code and its real screens, and a person keeps or drops each one. The [user flows service](https://featkpr.com/services/user-flows) is that work for your app; the [library](https://featkpr.com/library/flows) is that work on BookStack, in the open.

## Sources

each read on 28 Sep 2026; the date is when it was published, the mark says what kind of source it is

- K. Kaplan, User Journeys vs. User Flows, Nielsen Norman Group, 16 Apr 2023 (last reviewed 27 Aug 2026). Both definitions on this page are quoted from it. 16 Apr 2023 · UX research firm, article [www.nngroup.com/articles/user-journeys-vs-user-flows/](https://www.nngroup.com/articles/user-journeys-vs-user-flows/)
- K. Kang, S. Cohen, J. Hess, W. Novak, A. Peterson, Feature-Oriented Domain Analysis (FODA) Feasibility Study, Software Engineering Institute, 1990: a feature is "a prominent or distinctive user-visible aspect, quality, or characteristic of a software system or systems". Quoted as Wikipedia's Software feature article quotes it; the report itself not re-read. 1990 · technical report, quoted through Wikipedia [en.wikipedia.org/wiki/Software_feature](https://en.wikipedia.org/wiki/Software_feature)
- M. Rosala, Task Analysis: Support Users in Achieving Their Goals, Nielsen Norman Group, 20 Sep 2020: a task is "any activity that is usually observable and has a start and an end point"; goals and tasks are not the same thing. 20 Sep 2020 · UX research firm, article [www.nngroup.com/articles/task-analysis/](https://www.nngroup.com/articles/task-analysis/)

How this guide was written and checked, and where its numbers come from: [how we write and check](https://featkpr.com/about/how-we-write) . Found an error? [Report a correction](https://featkpr.com/about/how-we-write#corrections) .

written by

[Tim Derzhavets](https://featkpr.com/about)

published 28 Sep 2026 · checked on 28 Sep 2026

this guide feeds

- [Library: every flow featkpr drafted](https://featkpr.com/library/flows)
- [Library: goals](https://featkpr.com/library/goals)
- [Library: features](https://featkpr.com/library/features)
- [Service: user flows](https://featkpr.com/services/user-flows)

## See featkpr map a real app

Half an hour on BookStack, your questions first. Your own app comes after.

[Ask for a private demo](https://featkpr.com/demo)

---

The page this twin stands for: https://featkpr.com/guides/user-flow-vs-user-journey. Every page on this site has a `.md` twin, and answers `Accept: text/markdown`.
