I2.08.1failure distinct from emptydesign

Failure must be clearly distinct from an empty result

Aliases: error is not empty · load fail vs zero hits · false empty

What it is

A request that did not come back, and a request that came back with a zero set, are two worlds. Failure is “this time we could not know”. Empty is “we know, and the answer is none”. If the UI shares a “no content yet” block, people read a dropped network, a timeout or a permission error as “there was never anything here”. They stop retrying, go create a copy of data that already exists, or assume a filter wiped the results. The first cut of load failure is to draw these as two presentations that cannot impersonate each other.

Why it happens

Empty ends a query; failure ends a channel. After a query, the next move is to change the query or accept none. After a channel, the next move is to repair the channel or ask for the same query again. Shared visuals point the next move at the wrong place: empty illustrations usually offer “create” or “widen the filter”; failure needs “what happened, can I ask again”. Pointed wrong, create collides with objects that exist, and widening the filter conceals a channel that is still broken.

Failure also has sources: network, server, permission, client parse. Different sources make empty an even worse impersonator — a permission failure drawn as “you have no documents yet” sends people to create, not to ask for access. Distinction does not require pasting internal exception codes. It does require that people can tell “none” from “we do not know whether any”.

Where it stops holding

A first install with a definitely empty local store is empty; do not draw failure chrome “in case”. Search’s “no matches” is empty; a module that failed at the same time must be marked separately, not collapsed into one no-match sentence. When cache holds stale data, failure often yields to “stale + refresh failed”, a presentation from the cache group, not failure drawn as empty. Automation and screen readers that only hear “no content” will miss failures; distinction must enter textual status, not live only in illustration colour.

Applying it

  • Give failure and empty different titles and actions: failure is “couldn’t load” plus a nearby retry; empty is “no items” plus create or change filters. Do not share a “no data for now” line.
  • Failure copy answers “we do not know whether any”, not “there are none”.
  • Keep permission failure as its own class. Do not drop it into the empty template.
  • How to check: open a list that definitely has data, with the network off. If the screen takes the empty illustration or “go create”, distinction has failed. Then compare a true zero-result query; the two screens should not be able to impersonate each other.

Related

  • Same group: I2.08.2 A retry control must be reachable where the failure is · I2.08.3 A local failure must not make the whole page unusable
  • Nearby: I2.13 Load failure and retry · I2.12 Cache and stale content · E6.06 Empty states
  • Search terms: error versus empty · load failure · false empty state

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/I2.08.1