Why the empty state should come before the happy path

Ronnie Kiyegga
Ronnie Kiyegga

Most products get designed from the full screen first: the dashboard packed with data that shows the product working. It’s the version that looks best in a mock-up, so it’s usually the one that gets built first.

But it isn’t the screen a new user sees. On day one there’s no data, and the product has to explain itself with nothing to show.

That’s where the empty state comes in. It isn’t a placeholder for missing data; it’s the first real version of the workflow.

In this article, I’ll walk through why it’s worth designing first, the different kinds of “empty” a product has to tell apart and what the empty state reveals about the rest of the product.

A placeholder is not an explanation

Once the populated page works, an empty state is often added as a placeholder:

No applications yet.

Maybe there is an illustration, and maybe a button:

Create

That is better than a blank screen, but it does not always answer the user’s actual questions:

  • What is this area for?
  • Why should I create something here?
  • What is the first useful thing I can do?
  • What information will I need?
  • Is this empty because I am new, because a filter is active, or because something failed?
  • What will happen after I take this action?

“Empty” is not one condition

Several situations can look identical if the product does not model them separately:

First-use empty state
No records have ever been created.
Filtered empty state
Records exist, but none match the current filter.
Loading state
The system does not know yet whether records exist.
Error state
The request failed, so the product cannot show records.
Permission-limited state
Records may exist, but this user cannot access them.
Completed state
There is intentionally no outstanding work.

Treating all of these as “No data” creates confusing behaviour. A candidate may have twenty applications but see no results because the status filter is set to “Interviewing,” and what they need is “Clear filters,” not “Create your first application.” A user may see an empty list because the request failed. The useful action is “Try again,” not “Start creating records.” A user who has completed all follow-up tasks does not need an onboarding message. They need confirmation:

No follow-ups are due this week.
Your next scheduled action is Thursday.

The product needs to know what kind of empty it is showing, and the interface can only know what the data it receives preserves. If an API answers a permission failure, a failed query and a genuinely empty collection with the same empty list, the frontend cannot recover the difference. The user is invited to add their first application when the real problem is access or a failed request.

Start from the next action

The empty state should begin with the user’s next meaningful action. For a job-application tracker, a first-use dashboard might say:

Your job-search pipeline starts with one opportunity.
Add an application to keep its company, role, current stage,
and next action in one place.
Add your first application

That does three things:

  • Explains the product object.
  • Connects creation to a user outcome.
  • Offers one clear next step.

The action label matters too. “Create” is technically correct but vague. “Add your first application” tells the user what will happen.

Designing the empty state reveals unnecessary complexity

Writing the first-use state early forces useful product questions:

  • What is the smallest unit of value?
  • What data is actually needed to create it?
  • Can the user create it immediately?
  • Does creation require setup that should happen earlier?
  • What happens after the first record exists?
  • Which fields can be deferred?
  • What can be prefilled or inferred safely?

If it takes a long explanation before the user can create the first useful record, the onboarding model may be too complex. For example, if a candidate must first create a company, then a contact, then a pipeline category, then a custom tag, then a document folder before adding an application, the product has optimised its data model ahead of the user’s first outcome. The empty state exposes that friction. A better first action may create sensible defaults:

Company name
Role title
Current stage
Next action date

Additional information can be added later when it becomes useful.

The happy state can hide product assumptions

A populated dashboard often includes information created by previous product decisions:

Stage
Next action
Contacts
Tags
Notes
Documents
Follow-ups
Activity history
Response analytics

When those objects already exist, the page can appear coherent; the empty state asks whether the product has a clear path to creating them. It also reveals which objects are essential and which are supporting complexity. A useful product does not require users to create an entire internal model before receiving any value. The happy path should emerge naturally from the first meaningful action.

Do not use empty states to hide uncertainty

One common mistake is showing an empty state while the application is still loading. Another is treating an error as though the user simply has no data.

Request pendingnot an empty state
Request failednot an empty state
User has no recordsempty state

That distinction is important in any workflow involving payments, bookings, applications, approvals, or saved work. If a user submits something and the system has not confirmed the result, showing an empty state can imply that their work disappeared. The interface should show the actual state:

Saving application…
We could not save this application.
Try again
Application saved.
View application

An empty state should explain absence, not conceal uncertainty.

Final thoughts

The happy path tells you what the product looks like after someone has succeeded. The empty state tells you whether the product can help them succeed for the first time. Build it early, make it specific to the user’s situation, explain why the next action matters, and distinguish first use from filtered results, loading, errors, permissions and completed work. The first useful action is where the product begins.

Other articles