BBMM Technologies
← All articles
6 min readux, empty-states, error-handling, interface-design

Designing Empty States and Error States Well

By Maksym Bardakh · Co-founder & President

In short

Empty states and error states are where users form lasting impressions, yet they are routinely neglected. A good empty state orients a new user and offers a clear first action; a good error state explains plainly what happened and what to do next. Both should be designed as deliberately as the main flow, because they appear exactly when the user is most uncertain.

The states everyone forgets

Most design effort goes into the path where everything works and the screen is full of content. But users spend real time in two other places: the empty state, when there is nothing yet, and the error state, when something went wrong. These are precisely the moments of greatest uncertainty, and a blank screen or a cryptic error at those moments does lasting damage to the user’s confidence.

Treating these states as afterthoughts is a mistake, because they carry disproportionate weight. The first empty state is often a new user’s first real impression, and the first error is often where a user decides whether the product is trustworthy.

Empty states should orient and invite

An empty state is an opportunity, not a void. For a new user it is the first thing they see, so it should explain what will eventually be here and offer a clear way to get started. A genuinely empty list with no guidance leaves the user to guess; an empty state with a single obvious action moves them forward.

  • Explain briefly what the area is for and what will appear here.
  • Offer one clear action that lets the user fill the space.
  • Distinguish a first-use empty state from a no-results state, since they need different messages.

Error states should explain and guide

An error message exists to help the user recover, not to report a failure to the developer. A message that states only that something went wrong, in technical language, leaves the user stuck and anxious. A good error explains what happened in plain terms, says whether it was the user’s action or a system problem, and offers a concrete next step.

Write error messages for the person reading them. Say what happened, why if it helps, and what to do next, in language the user understands. Avoid blame, avoid jargon, and never leave the user without a path forward.

Design for the unhappy path on purpose

The deeper principle is that the unhappy path deserves explicit design. Enumerating the states a screen can be in, loading, empty, populated, error, and partial, and designing each one, prevents the common failure of building only the populated case and letting the rest fall back to something raw and confusing.

This is not extra polish; it is core to whether the product feels reliable. A user who hits an empty state that guides them, or an error that helps them recover, comes away trusting the product more, not less. The states where things are uncertain are exactly the states worth designing with care.

Key takeaways

  • Empty and error states appear when the user is most uncertain and shape lasting impressions.
  • An empty state should explain what belongs there and offer a clear first action.
  • Distinguish first-use empty states from no-results states, which need different messages.
  • Error messages should explain plainly what happened and offer a concrete next step.
  • Enumerate and design every state a screen can be in, not only the populated case.

Frequently asked questions

Why do empty states matter?
Because they are often a new user’s first impression and a moment of uncertainty. A good empty state orients the user and offers a clear action instead of leaving a blank, confusing screen.
What makes a good error message?
One written for the user that explains plainly what happened, indicates whether it was their action or a system problem, avoids jargon and blame, and offers a concrete next step.
What are the states a screen can have?
Commonly loading, empty, populated, error, and partial. Designing each one deliberately prevents the failure of building only the populated case and leaving the rest raw.

References

About the author

Maksym Bardakh

Co-founder & President

Maksym is a software engineer and product strategist focused on executive-function and behavioral system design. At BBMM he leads product direction across Flowo, TextPack, and Pillow, working at the intersection of human cognition and durable interface design.