Design Trends

Designing the 3-Second Wait: When to Use Skeleton Screens, Progress Bars and Optimistic Updates, and What They Really Cost in CLS and INP

2026.09.30 · 24 views
Designing the 3-Second Wait: When to Use Skeleton Screens, Progress Bars and Optimistic Updates, and What They Really Cost in CLS and INP
“

Loading states are the most overlooked micro-interaction. Using LinkedIn, YouTube, Instagram, Slack and Stripe as examples, we cover the research behind perceived waiting, rules for choosing a pattern by wait time, the technical cost in layout shift and SEO, which industries benefit, and a five-step way to apply it. ”

Share:

No website responds instantly every time. Checking stock, calculating shipping and submitting an order all leave a gap of 1 to 5 seconds. How you fill that gap decides whether users feel the site is fast or frozen. Most projects leave loading states to engineers, who add a spinner at the last minute, and one site ends up with four different waiting screens. Waiting is part of the interface, and it can be specified.

Five Real Examples

  • LinkedIn: the feed first shows gray card outlines with avatar, headline and body in the same positions as the real content, so users know the layout before data arrives.
  • YouTube: switching to a video page shows a thin red progress bar at the top that blocks nothing and simply signals progress.
  • Instagram: the heart turns red the moment you tap it, without waiting for the server, and quietly reverts only if the request fails. That is an optimistic update.
  • Slack: a rotating one-liner appears on launch, turning a few seconds of waiting into part of the brand voice.
  • Stripe Checkout: the pay button switches to a locked loading state and then a checkmark, preventing double charges.

The Logic Behind the Design

Nielsen Norman Group's three response-time limits are the starting point: under 0.1 seconds feels instant, under 1 second keeps the flow of thought, and beyond 10 seconds attention drifts. NN/g's progress indicator guidance adds that looped animations suit waits of 2 to 10 seconds, and anything longer needs a percent-done indicator. Skeleton screens work because they turn blank waiting into content that is visibly arriving, which reduces uncertainty. Optimistic updates remove the wait entirely, provided failures are rare.

Technical Costs and Limits

  • Layout shift: if skeletons differ in size from real content, the page jumps when data lands, pushing up CLS (Cumulative Layout Shift), which Google recommends keeping under 0.1.
  • Effort: about 4–8 hours per page template for skeleton components; optimistic updates add roughly 1–2 days per action for failure rollback.
  • File size: CSS skeletons and progress bars weigh under 1KB; branded Lottie loaders commonly run 30–100KB plus the player.
  • SEO: if product content loads entirely on the client, crawlers may see only skeletons. Render important content on the server and keep skeletons for secondary areas.
  • Responsiveness: the time from a tap to visible feedback counts toward INP, so switching button state immediately helps both perception and the score.

Industries That Benefit vs. Those That Don't

Worth investing inNo need to overdesign
E-commerce: listings, cart, checkoutBrand sites that rarely update
Membership and booking: slot lookup, booking submissionSingle-page campaign sites with little dynamic data
SaaS dashboards and reports with heavy queriesCatalog sites built around PDF downloads
Apps: social, food ordering, ticketingFinancial transaction results: never optimistic, always wait for confirmation

How to Apply It to Your Site

  1. List the waits: record every action that takes more than 0.5 seconds and measure it with network throttling in Chrome DevTools.
  2. Pick by duration: under 1 second, change only the button state; 1–3 seconds, skeleton screen; 3–10 seconds, top progress bar plus text; over 10 seconds, show a percentage or move it to the background and notify on completion.
  3. Decide on optimism: favorites, likes and add-to-cart qualify; payment, orders and refunds do not.
  4. Write it as a component spec: build one set of loading components in Figma and in code, fix sizes and animation timing, and support prefers-reduced-motion.
  5. Verify after launch: check CLS and INP in PageSpeed Insights and watch whether checkout and booking abandonment drops.

Common Mistakes and How to Avoid Them

  • One spinner for the whole site → tier patterns by wait time and context.
  • Skeletons that don't match the real layout → generate them from real components with placeholder styling so sizes stay aligned.
  • Pay buttons that stay clickable → disable immediately and show a processing state to prevent resubmission.
  • A loader that flashes for 0.3 seconds → add a delay of about 300 milliseconds and skip it if the task finishes first.

Further Resources

Frequently Asked Questions

Which is better, a skeleton screen or a spinner?

It depends on wait time and layout. For page or list loads of 1 to 3 seconds, skeletons let users see the layout first; for a short wait on a single button or small area, a loading state inside the button is enough.

Do skeleton screens hurt SEO?

Skeletons themselves don't, but if important content loads only on the client, crawlers may see nothing but skeletons. Render product names and prices on the server.

Which actions shouldn't use optimistic updates?

Payments, orders, refunds and stock deductions, where failure has serious consequences, should wait for server confirmation before showing success.

How long does a set of loading-state components take?

About 3 to 5 working days for a typical site, covering skeletons, progress bars, button states and reduced-motion support; each optimistic action adds roughly 1 to 2 days.

Next Step

Want to know which waits are costing you customers? ScriptWalker can audit your loading states, build a component spec shared by Figma and code, and measure CLS and INP. Book a consultation:

Share:
Design Trends Back to Blog