Skip to content

Beginner · Planning an app · topic 8 of 34 · 25 min

Planning screens and user flows

Explanation

Before building screens, sketch them. List the screens, draw how a user moves between them, and break each screen into small components. Plan the loading, empty, error and success state of every screen, and make it usable on a phone and with a keyboard.

Screens and user flows

A screen is one page the user sees, such as the login page. A user flow is the path a user takes through screens to finish a job. The main flow of our Notes app is: Login, then Notes list, then Edit note, then back to the list.

output
[Sign up] --> [Login] --> [Notes list] --> [Edit note]
                               |    ^            |
                               |    +-- Save ----+
                               +--> [New note] --+
The Notes app flow drawn with plain text. Arrows show where each button takes you.

Wireframes

A wireframe is a rough sketch of a screen: boxes for content, lines for text, no colours or pictures. It shows where things go, not how pretty they look. Draw it on paper first; it takes minutes. Free tools like Excalidraw or Figma help when you want to share it.

Think of it like this: A wireframe is like the chalk lines a tailor draws on cloth before cutting. The lines are rough and will not be seen in the final shirt, but they stop expensive mistakes with the scissors.

Mobile first

Mobile-first means you design for a small phone screen first, then add space for bigger screens. Most of our learners' users are on phones. On a phone the notes list is one column and the "New note" button is easy to reach with a thumb.

Break screens into components

A component is a small reusable piece of a screen. Naming components early makes the frontend code tidy, because each one becomes one function later.

ComponentWhat it showsUsed on
SearchBarA search input with a labelNotes list
NoteCardTitle, first line of body, pin iconNotes list
NoteFormTitle, body, pinned checkbox, Save buttonNew note, Edit note
EmptyStateA friendly message and a "Create your first note" buttonNotes list
ErrorBannerThe error message and a "Try again" buttonEvery screen

Four states every screen needs

  • Loading: data is on its way. Show a spinner or grey placeholder boxes.
  • Empty: the request worked but there is nothing yet. Say so and offer the next step.
  • Error: something failed. Say what happened in plain words and offer "Try again".
  • Success: show the data.
Tip: Beginners design only the success state. Real users on slow mobile networks see the loading and error states often, so sketch all four for every screen.

Accessibility basics

Accessibility means people with different abilities can use the app, including people using screen readers (software that reads the screen aloud) or only a keyboard. Plan for it now: every input gets a visible label, text has enough contrast against the background, and every action works with the Tab and Enter keys.

Careful: Do not use colour alone to show meaning (for example a red border for an error). Add text such as "Title is required" so colour-blind users and screen readers get the message too.

Watch the lesson

Planning screens and user flows · 1/6

Login -> Notes list -> Edit note

Now we plan what the user sees. We start with screens and the flow between them.

Prefer a video by a teacher? Find free videos on “wireframing for beginners user flow mobile first” on YouTube ↗

In real life: A food delivery app on a slow network

Open a food delivery app on a weak 4G signal. First you see grey boxes where restaurants will appear: the loading state. If you search for a dish nobody serves nearby, you see "No results, try another dish": the empty state. If the network drops, you see "Could not load, tap to retry": the error state. Then the list appears: success. Someone planned each of these on paper before any code was written.

Practice (0/3 done)

Task 1 · Code · Javascript

Write pickUiState({ loading, error, notes }) that returns which state the notes list should show: "loading" if loading is true; otherwise "error" if error has a value; otherwise "empty" if notes is missing or has no items; otherwise "success".

Task 2 · Practice

Draw wireframes on paper (or in Excalidraw) for three Notes app screens: Login, Notes list and Edit note, at phone size. Take a photo or screenshot and check it against the list.

Task 3 · Practice

For the Notes list screen, write the component list and describe exactly what the user sees in each of the four states (loading, empty, error, success). Add two accessibility checks you will follow.

Quick quiz

Question 1

1.What is a wireframe?

Question 2

2.A user opens the notes list and has no notes yet. Which state should the screen show?

Question 3

3.What does mobile-first mean?

Question 4

4.Which is an accessibility problem?

Question 5

5.Why split a screen into components like NoteCard and NoteForm?

Read more (free)

Pass the quiz (60% or more) or mark this topic as done when you are ready.

Your progress is saved on this device only.

← Previous: Writing the API contract