
Some delays are unavoidable. A search hits a slow database, an upload crosses a weak connection, a payment provider takes its time. You can't always make the wait shorter — but you can change how long it feels, and that's often enough.
Perceived performance is its own discipline. Research consistently shows that a wait filled with feedback feels shorter than an identical wait spent staring at nothing. The screen that freezes for two seconds reads as broken; the screen that shows a spinner reads as working. Same duration, completely different experience.
Match the indicator to the wait. For anything under about a second, a subtle state change is plenty — fading a button or showing a small inline spinner. For longer operations, a determinate progress bar that genuinely tracks completion beats an endless spinner, because uncertainty is what makes waiting unpleasant. People will tolerate a long wait far more patiently when they can see it ending.
Skeleton screens deserve a mention. Instead of a blank page or a generic loader, sketching the layout that's about to appear — grey blocks where text and images will land — gives the impression that content is already arriving. The interface feels alive rather than stalled.
A word of caution: don't fake progress you don't have. A bar that races to 90% and then sits there teaches users to distrust your indicators entirely. The goal is to mask delay honestly, smoothing the rough edge of waiting without lying about what's happening underneath.
