WhollySoftware
Back to blogDesign

Designing Loading and Skeleton States That Feel Fast

Wholly Software TeamNovember 12, 20256 min read
Designing Loading and Skeleton States That Feel Fast

On a real estate listings app, moving from a generic centered spinner to skeleton screens that mimicked the actual layout of listing cards, image block, price line, address line, cut perceived load time complaints in user interviews noticeably, even though the actual network request time hadn't changed at all. A spinner tells the user 'wait, nothing is happening yet.' A skeleton tells them 'this is coming, and here's roughly its shape,' which sets an expectation the real content can then satisfy.

We got the first version of this wrong by making the skeleton too literal, animating a shimmer effect across every single skeleton block on the page simultaneously, which at high content density looked chaotic rather than calm, almost like the whole screen was glitching. Staggering the shimmer slightly, and slowing it down, made the same technique read as a smooth, intentional loading sequence instead of visual noise.

For genuinely long operations, longer than a couple of seconds, skeleton screens alone stop being enough, because a static shape with a shimmer doesn't communicate progress, just presence. On a document-processing feature for the legal services client we mentioned in other work, we switched to a state that named the actual stage of a multi-step process, uploading, scanning, extracting, which gave users a sense of real progress rather than an ambiguous, indefinite wait, even when we couldn't show a literal percentage.

We also learned to avoid skeleton screens entirely for genuinely fast operations, under roughly 300 milliseconds, because a skeleton that flashes in and immediately gets replaced by real content reads as a glitch, not as helpful feedback. We added a minimum-display threshold logic so the skeleton only shows at all once a request has taken long enough that a flash would otherwise occur, which sounds like a small detail but removed a specific, recurring visual stutter that had shown up in earlier QA passes.

The general principle across all of this: perceived speed is a design problem as much as an engineering one. The actual network or processing time is often outside a designer's control, but what the screen communicates during that wait is entirely ours to get right, and it measurably changes how fast users report an app feeling, independent of the underlying performance work.

UXLoading StatesMotion DesignProduct Design
Designing Loading and Skeleton States That Feel Fast — Wholly Software