Hello! Welcome back to our course on analyzing and optimizing user flows.
In our last lesson, we focused on streamlining data entry with intelligent defaults and contextual suggestions. We learned how to proactively assist users by anticipating their needs. Today, we shift our focus from speeding up user actions to managing their perception during unavoidable system delays.
This lesson addresses the learning outcome: Select appropriate progress indicators to manage user expectations in multi-step flows. Whenever a user has to wait, whether it's for a file to upload, a report to generate, or a multi-step form to be completed, it's a potential point of friction. Your job as a designer is to make that wait as painless as possible.
We will cover:
- The psychological importance of showing progress.
- The two fundamental types of progress indicators: determinate and indeterminate.
- A catalog of common indicator styles and when to use them.
- A framework for selecting the right indicator based on the expected wait time.
Let's get started.
1. The Psychology of Waiting: Why Bother?
Before we dive into the "how," let's establish the "why." Unexplained waiting is a primary source of user frustration. It creates uncertainty and anxiety: "Is it broken? Did my click register? Should I try again?"
Progress indicators directly address this by upholding Jakob Nielsen's first and most important usability heuristic: Visibility of System Status. By keeping users informed about what’s going on, you give them a sense of control and make the wait more tolerable.
To introduce this concept, let's watch a short video from the Nielsen Norman Group.
Mask Interaction Delays with Progress Indicators
This video, 'Mask Interaction Delays with Progress Indicators,' explains the fundamental purpose of these UI elements and how they help manage user perception during delays.
Please watch the introduction to understand the core human need that progress indicators fulfill.
As the video states, this isn't a new concept, but it's a persistent human need. When the system provides feedback, users are psychologically more willing to wait.
2. The Core Distinction: Determinate vs. Indeterminate
The first and most critical decision you'll make when choosing a progress indicator is whether the process has a predictable duration. This leads to two categories:
- Determinate Indicators: Used when the system can calculate how long a process will take. They show how much progress has been made and how much is left (e.g., a percentage).
- Indeterminate Indicators: Used when it's impossible to know how long a process will take. They simply show that the system is working and has not frozen.
To explore this fundamental difference, the following article provides clear definitions and visual examples.
How to create progress indicator UI for better usability?
The article 'How to create progress indicator UI for better usability?' by Cieden offers a great breakdown of the two main types of indicators.
Please read the section titled 'What are the types of progress indicators?'. Focus on the definitions and use cases for 'Indeterminate' and 'Determinate' indicators.
To summarize the key distinction you just read about:
- Use a determinate indicator for predictable tasks like a file upload, a software installation, or navigating the steps of a checkout flow.
- Use an indeterminate indicator for unpredictable tasks like fetching data from a server, applying a filter to a large dataset, or connecting to a service.
Choosing the wrong type can be frustrating. Showing an indeterminate spinner for a process that should be predictable can make users anxious, while a determinate bar that doesn't move realistically can erode trust.
3. A Catalog of Progress Indicator Styles
With the determinate/indeterminate distinction in mind, let's look at the common UI patterns used to visualize progress. As a UI/UX designer, you're likely familiar with these from a visual standpoint; our goal here is to connect each style to its proper use case.
Indeterminate Indicators (For Unknown Durations)
These indicators signal that the system is busy, without specifying for how long.
- Spinners (Looped Animations): The most common indeterminate indicator. It's a simple, endlessly looping animation. Best for very short waits.
- Skeleton Loaders (Stencils): A modern approach where the UI layout appears instantly as grayed-out placeholder boxes. The content then loads into these placeholders. This manages expectations about the page structure and makes the load feel faster.
Determinate Indicators (For Known Durations)
These indicators show a finite amount of progress from start to finish.
- Progress Bars: The classic linear bar that fills to show completion. Often paired with a percentage. Ideal for file transfers or multi-step processes that occur on a single screen.
- Progress Circles: A circular version of the progress bar. It's more compact and can be elegantly overlaid on content, like a download icon that fills up.
- Step-Based Indicators: Crucial for multi-step flows like checkouts or onboarding. They show the user which step they are on, how many steps are left, and which steps are complete. This manages expectations for the entire journey, not just a single system action.
Let's watch a practical example of a step-based indicator in a multi-step form.
How to Create a Multi-Step Form with a Progress Bar in WordPress | JetFormBuilder
This video from Crocoblock demonstrates how a progress bar is implemented in a multi-step form. It clearly visualizes the user's location within a larger flow.
Watch the first clip (1:12 - 1:40) to hear the description of the progress bar, and the second clip (8:39 - 9:05) to see how it looks and functions on the live website. Notice how it highlights the current step.
This step-based pattern is a perfect example of managing expectations in a multi-step flow, directly addressing our learning outcome.
4. A Framework for Selection: Matching the Indicator to the Wait
Now for the central question: how do you select the right indicator? The primary factor is the expected wait time.
Here is a simple framework to guide your decision-making.
How to create progress indicator UI for better usability?
Let's return to the Cieden article, which provides excellent, practical guidance on this topic.
Read the section 'How to use status indicator UI styling based on waiting time?'. This provides a clear, time-based heuristic for choosing an indicator.
Based on what you've read, here's a summary of the framework:
- Wait time < 1 second: Don't use an indicator. The flicker of a fast-appearing and disappearing indicator can feel like a glitch and create more visual noise than it's worth.
- Short wait (1-3 seconds): Use an indeterminate indicator like a spinner or a skeleton screen. The wait is too short for a user to track a determinate bar meaningfully.
- Medium wait (3-10 seconds): Use a determinate indicator if possible (e.g., progress bar). If the duration is truly unknown, an indeterminate spinner is acceptable, but users may start to wonder if it's stuck.
- Long wait (> 10 seconds): A determinate indicator is essential. You should also provide more context, such as a percentage, a time estimate ("About 2 minutes left"), or a checklist of sub-tasks being completed.
5. Best Practices & Application Activity
Implementing an indicator is easy, but implementing a good one requires care. Here are some key best practices, many of which are covered in the "What are the loading indicator best practices?" section of the Cieden article.
- Provide Context: Pair your indicator with a label (e.g., "Uploading your files..."). This answers the "What am I waiting for?" question.
- Show Realistic Progress: A progress bar that jumps to 99% and then hangs for a long time is famously frustrating. It breaks trust. Make the progress feel as linear and steady as possible.
- Don't Block the User (for long waits): If a process is long (like exporting a large file), allow it to run in the background. Use a small indicator in a corner rather than a modal that blocks the entire UI.
- Ensure Accessibility: Use ARIA attributes in your code so screen readers can announce the progress (e.g., "Loading, 50% complete").
Activity: Designing a Photo Album Flow
Imagine you are designing a mobile app that allows users to create and order a custom photo album. The user journey involves several steps where waiting is inevitable.
For each of the three scenarios below, describe:
- Which type of progress indicator you would use (e.g., spinner, progress bar, step indicator).
- Why you chose it, justifying your decision based on whether the task is determinate/indeterminate and its likely duration.
Scenarios:
- A) The user has selected 50 photos from their phone's gallery and taps an "Upload" button to add them to the project.
- B) After the upload completes, the app needs to quickly process the images to check their resolution and warn the user about any low-quality photos. This process takes about 4-5 seconds.
- C) The overall creation process is broken into three main stages: 1. Upload Photos → 2. Arrange Layout → 3. Checkout. How would you visually communicate the user's position within this high-level flow?
Conclusion
Excellent work today. We've explored how to transform a potentially frustrating wait into an informed and controlled experience for the user. By thoughtfully selecting and designing progress indicators, you can significantly reduce friction in complex user flows.
Here are your key takeaways:
- Progress indicators are essential for system status visibility, which reduces user anxiety and builds trust.
- The foundational choice is between determinate (for predictable durations) and indeterminate (for unknown durations) indicators.
- Expected wait time is the primary factor in selecting the right style: spinners for short waits, and progress bars or step indicators for medium-to-long waits.
- Effective indicators are contextual, realistic, and accessible, turning dead time into an informative part of the user journey.
In our next lesson, we'll address what happens when things don't go as planned. We will learn how to design clear error messages and recovery paths to guide users back on track, another critical skill for creating resilient and user-friendly flows.
Can't find a good explanation? Sign up and we'll make it for you
Sign up