Performance and Feedback

Users experience performance emotionally before they measure it technically. Great UI is both objectively fast and subjectively responsive.

The Two Layers of Speed

LayerGoal
Actual performanceGood Core Web Vitals, efficient assets, lightweight rendering
Perceived performanceImmediate feedback, stable layouts, useful loading states

UI Feedback Rules

Respond fast

  • acknowledge clicks immediately
  • show pressed, loading, or pending state quickly
  • never leave users wondering whether the action worked

Preserve continuity

  • avoid full-page spinners when a local loading state is enough
  • keep existing data visible during refresh when possible
  • use optimistic updates carefully when failure recovery is clear

Loading Patterns

PatternBest Use
SkeletonsContent-heavy pages where structure is known
Inline spinnerSmall, local async action
Progress indicatorLonger uploads, imports, or multi-step processes
Stale-while-refreshDashboards and list views

UI Feedback Example

<button class="save-button" aria-live="polite">
  <span class="label">Save changes</span>
  <span class="spinner" hidden></span>
</button>
button.disabled = true;
label.textContent = 'Saving…';
spinner.hidden = false;

A tiny immediate response prevents double clicks and reassures the user that work is in progress.

Layout Stability

Cumulative layout shift destroys confidence.

Prevent it by:

  • reserving space for images and async content
  • avoiding banners that suddenly push the screen down
  • keeping button labels stable between states
  • sizing skeletons to match real content

Web Performance Priorities

AreaStrong Practice
ImagesCompress, resize, lazy-load where appropriate
FontsLimit families and weights, use sensible loading strategy
JSShip less, defer non-critical work
CSSKeep the critical path lean
Data fetchingCache intelligently and avoid unnecessary refetching

Performance and Conversion

Performance affects trust and completion.

Slow ExperienceLikely Outcome
Laggy form inputsUsers doubt reliability
Slow product pagesHigher bounce and lower engagement
Jumpy checkoutLower completion and more errors
Delayed feedback after clickDouble submits and frustration

Error and Retry Design

A strong interface plans for failure.

  • explain failures in plain language
  • keep user work intact
  • show whether retry is safe
  • offer fallback paths when possible
  • log and monitor errors after launch

Common Mistakes

  • global spinners that wipe out context
  • loading states with no indication of expected wait
  • animations that slow perceived speed instead of improving clarity
  • heavy dashboards with no prioritization of above-the-fold value