Part 07 of 14 · · 4 min read
User flows, wireframes and every state of a screen
How to map a user flow, pick the right wireframe fidelity, organise information and design every state of a screen, from empty and loading to error.
Before a screen is drawn, you need to know the path a person takes through it and every state it can be in. User flows map the path, wireframes test the structure, and interaction design decides how the interface responds along the way.
Skipping this step is the most common reason a polished design falls apart in build: the happy path looks great, and then nobody has designed what happens when the network drops or the list is empty.
Three kinds of flow diagram
| Diagram | What it shows | Good for |
|---|---|---|
| Task flow | One task as a straight line of steps, with no branches | Agreeing on the core steps quickly |
| User flow | The same task with decision points and the paths that branch from them | Finding edge cases and missing screens |
| Wireflow | Each step drawn as a small wireframe, joined by arrows | Handoff: developers see both the screens and the logic between them |
A simple notation
Any notation works if the team shares it. This one is common and easy to sketch by hand or in FigJam:
text
( Start / End ) rounded shape
[ Screen ] rectangle
< Decision? > diamond, with Yes and No branches
{ System action } an API call, an email sent
──▶ direction of travelExample: creating a database
A cloud console where someone creates a managed database shows why flows matter. The work is long-running and can fail after the user has already left the form, so the flow has to cover more than the form itself.
text
(Start: Dashboard)
▼
[Create database] ──▶ [Choose engine: Postgres / MySQL / MongoDB]
▼
[Configure: version, replicas, storage]
▼
<Valid?> ── No ──▶ [Inline errors] ──┐
│ Yes │
▼ ◀──────────────┘
[Review and confirm]
▼
{Provision} ──▶ [Status: Provisioning…] ──▶ <Ready?>
│ Yes │ No
[Success] [Error + Retry]
▼
(End)Draw the happy path first, then walk it again asking what can go wrong at each step:
- What if a field is invalid, or the request times out?
- What if the user doesn’t have permission for this action?
- What if the network drops halfway through?
- What happens on Back? Is the form kept?
- If the user leaves midway, is a draft saved?
- What does the screen look like the very first time, with nothing in it?
Wireframe fidelity
| Fidelity | What it shows | When to use it |
|---|---|---|
| Low (sketch) | Boxes and lines, a rough layout idea | Exploring many directions quickly |
| Mid (greyscale) | Real structure and realistic content, no colour | Checking the flow and the information architecture |
| High (mockup) | Final visuals built from design system components | Usability testing and developer handoff |
- Use real content, not lorem ipsum. Real names, long labels and actual numbers are what break a layout, and it is better to find out in a wireframe.
- Keep mid-fidelity in greyscale. Without colour, stakeholders comment on structure instead of debating the shade of a button.
- Start from components. When a design system exists, even a mid-fidelity wireframe can use its real components, and the step to high fidelity becomes small.
Information architecture
Information architecture (IA) is how content is organised and labelled. Three tools cover most of the work:
- Card sorting. Users group topics into categories that make sense to them, which shows how they expect the content to be organised.
- Tree testing. Users try to find items in a text-only version of the menu, which shows whether the labels and hierarchy work.
- Sitemap. A diagram of every page and how they connect, used to agree on the structure.
The five dimensions of interaction design
Interaction design (IxD) is often described in five dimensions, a framework that grew out of work by Gillian Crampton Smith and Kevin Silver:
- Words: labels, button text, messages.
- Visual representations: icons, images, typography.
- Physical objects and space: mouse, touch, keyboard and the device itself.
- Time: animation, duration and how long the system takes to respond.
- Behaviour: how the system reacts to people, and how people feel in return.
Every state of a screen
A screen is not one design; it is a set of states. Listing them up front is one of the cheapest ways to avoid surprises in build.
| State | What to design |
|---|---|
| Ideal | The normal screen, full of realistic data |
| Empty | The first visit: a short explanation and one clear action, such as “Create your first database” |
| Loading | A skeleton in the shape of the layout; a spinner only for small areas |
| Partial | Only a little data. Does the layout still feel complete? |
| Error | What happened, what the user can do, and a Retry |
| Success | A confirmation and the obvious next step |
| Overflow | Very long names, thousands of rows, a narrow screen |
Common interaction patterns
- Progressive disclosure. Show the essentials and tuck rare options behind “Advanced settings”.
- Inline validation. Check a field when the user leaves it (on blur), not on every keystroke, so nobody is told off while still typing.
- Optimistic UI. Update the screen before the server confirms, and roll back with a clear message if the request fails.
- Undo or confirm. If an action can be reversed, do it at once and offer Undo in a toast. If it can’t, ask for confirmation first.
- Bulk actions. When rows in a table are selected, an action bar appears with what can be done to all of them.
Try this
Pick a flow from a product you use, such as inviting a teammate. Draw it as a user flow with the notation above, including at least three edge cases. Then list the states of its main screen using the table above and mark which ones the product actually designed.
Next in the series
A wireframe sets the structure; visual design makes it readable. Part 8 covers hierarchy, type scales, spacing on a 4 and 8 point grid, colour palettes and layout grids.
Sources and further reading
See a design system in practice: the AppsCode Design System case study