Art, design & a little curiosity
Interaction design ↗

Loading states that explain what is happening

Choose truthful loading feedback for an image collection, including initial load, incremental updates, slow responses, failures, and safe retry behavior without fabricated progress.

An original type poster study exploring loading state design.
Type poster / Original digital study

Make waiting understandable

Loading feedback must answer a practical question: has the action started, and what can the person do while waiting? An image collection has several loading situations, from its first request to retrieving another page. Give those situations different treatment instead of placing the same full-screen spinner over every operation.

Represent actual work without false progress

Reserve space when the eventual layout is predictable, but do not make placeholders look like readable content. Keep existing results available during a filter update when they remain useful, while indicating that the update is pending. Show a percentage only when the system measures real progress toward a meaningful completion point. Separate what the system knows from what the person has actually been told. A technically valid operation can still look unsuccessful when its confirmation is delayed or ambiguous. Describe the state before the action, while work is pending, and after it completes. Then name the information that remains available if the person leaves and returns. These notes become concrete requirements for the eventual implementation.

Prototype slow gallery updates

Prototype opening a collection, loading more images, and changing a filter during a slow response. Label each request so stale responses cannot silently replace newer choices. Add a failure state that preserves the selected filter and a retry action. Specify whether the person can continue reading previously loaded items. Work through the example once without a pointer, once on a narrow screen, and once after an interruption. These passes examine different assumptions; none replaces research with people who use the finished service. Preserve the same task and content across passes so that changes reveal weaknesses in the design rather than unrelated differences in the scenario. Capture each weakness as a specific revision, not a general impression.

Give stalled work a recovery state

If a spinner continues indefinitely, the design has not addressed failure. If an entire page becomes unusable while one thumbnail loads, the loading scope is too broad. A skeleton that flashes briefly on every minor update can also make a stable page feel unsettled. Check the transitions under varied response conditions. Distinguish a missing cue from a missing capability. Copy can explain an available recovery path, but it cannot create a recovery path the system lacks. Annotate where the interface needs a different state, a preserved value, or an operational response. Give each case a visible outcome. Otherwise an apparently helpful message may simply send someone around the same unsuccessful loop with more words to read.

Connect requests to visible outcomes

Review loading behavior by tracing requests to visible states, including success, cancellation, timeout, and retry. Confirm that the person never sees a fabricated progress claim or mistakes old results for new ones. The useful deliverable is a state table connected to a working prototype; a polished spinner alone cannot settle these questions. Give the retry the same request context so it repeats the intended operation rather than silently resetting the collection.

A worked example

Worked decision

While a new medium filter loads, preserve the previous collection with an explicit update state; a newer request must supersede an older response.

References & further reading

Examples and exercises in this guide are original teaching scenarios.

Keep following the thread.

More interaction design ↗