Playbook
Why Performance Is User Experience (Why Performance Is User Experience)
Performance is not separate from UX. Learn why speed, waiting psychology, Core Web Vitals, RAIL, and inclusive design determine whether users trust and complete tasks.
Web Performance Engineering in the Age of AI
Part 1 of 13
A 13-part series on treating web performance as product UX—and engineering it under AI-era workloads, marketplace scale, and real user networks.
Why performance is UX
Performance is not separate from user experience—it is one of its most visible dimensions. Users experience a website through time: how quickly content appears, how soon they can act, and whether interactions feel smooth or interrupted. Web performance includes both objective measures, such as load time and responsiveness, and the user’s subjective perception of speed. MDN
A slow interface creates friction at every stage:
- A blank or incomplete screen makes users wonder whether the site is working.
- An unresponsive button makes them question whether their action registered.
- Layout shifts move content unexpectedly and cause mistakes.
- Janky scrolling or animation makes the interface feel unreliable.
- Delays interrupt the user’s mental flow and increase the likelihood of abandonment.
By contrast, a fast, stable interface feels effortless. Users can focus on their goal rather than managing the technology between themselves and that goal. Research and guidance from web-platform experts consistently link better performance with stronger engagement, retention, satisfaction, and lower abandonment. web.dev
Performance communicates quality
Users often interpret responsiveness as a signal of reliability and trust. A product that reacts immediately feels thoughtfully designed; one that freezes, stutters, or repeatedly makes users wait feels fragile—even if its underlying features are technically correct.
This is why performance should be treated as a product requirement, not merely an engineering or optimization task. Design choices, content strategy, JavaScript architecture, hosting, and visual effects all influence the experience users ultimately perceive.
What to optimize
A user-centered performance strategy should ask:
- When does meaningful content appear? Optimize the experience of waiting, not only the final load time.
- When can the user interact? A page that looks ready but ignores input still feels broken.
- How stable is the interface? Prevent unexpected movement while content, ads, images, or fonts load.
- How smooth are interactions? Scrolling, typing, opening menus, and navigating should feel continuous rather than jerky.
Core Web Vitals help measure important parts of this experience, but metrics are useful only insofar as they represent real user friction. The goal is not to make a dashboard green; it is to make the product feel fast, clear, and dependable in real conditions.
Concepts that recur through this chapter
📦 User-perceived performance
How fast and reliable the experience feels to the user—not only what a lab score reports.
📦 Perceived waiting time
The emotional duration of a delay; often influences satisfaction more than clock time alone.
📦 Core Web Vitals
LCP, INP, and CLS—loading, responsiveness, and visual stability measured at the 75th percentile of real users.
📦 Field data vs lab data
Real-user measurement versus controlled, repeatable diagnostic tests.
📦 RAIL
Response, Animation, Idle, Load—a user-action framework for performance goals.
📦 Performance budget
Shared limits for weight, latency, and stability that make “fast enough” a design constraint.
These terms matter because this chapter argues for a product stance: measure journeys, design waits, support imperfect connectivity, and shift performance left—before AI-era workloads make silent delays worse.
The cost of slow
A slow website creates costs before users ever see its main content. The first delay becomes the first impression: visitors may interpret it as a sign that the product is outdated, unreliable, or difficult to use. Performance therefore shapes not only whether people stay, but also how they judge the organization behind the site.
Users expect content to appear quickly and interactions to respond immediately. As delays increase, patience decreases; users may abandon the page, repeat an action, or leave with less trust in the product. MDN describes poor performance as a cause of abandonment, reduced retention, lower conversion, and diminished satisfaction. MDN
First impressions happen during loading
The loading experience is part of the interface, even when the page is technically not ready:
- A blank screen provides no evidence that progress is being made.
- A partially rendered page can make the product feel unfinished.
- A visible loading indicator helps, but does not compensate for an unnecessarily long wait.
- Layout shifts make the interface feel unstable and can cause accidental clicks.
- A fast first response reassures users that the system is working.
This matters especially for first-time visitors, who have no established trust or reason to wait. Google’s performance guidance notes that slow sites are less effective at engaging and retaining users, while citing examples where additional loading time led to measurable user loss. web.dev
Satisfaction is cumulative
One delay may be tolerable, but repeated delays compound throughout a session. A user who waits for the page, then waits for a menu, then waits for a search result experiences the product as a series of obstacles rather than a smooth path toward a goal.
Performance also affects emotional state. Research summarized by web.dev associates delays in page speed with elevated stress, meaning that a slow experience can feel more burdensome than its duration alone suggests. Over time, this frustration reduces confidence, engagement, willingness to return, and likelihood of recommending the product. web.dev
The business impact
The “cost of slow” appears in several connected forms:
- More abandoned visits and incomplete tasks.
- Lower conversion and revenue.
- Reduced repeat usage and customer retention.
- Higher support demand when users cannot tell whether actions succeeded.
- Weaker trust in the brand.
- Greater data, battery, and device costs for users on slower or limited connections.
The practical lesson is simple: speed is part of the product’s first impression and every subsequent interaction. A fast site does not merely save time—it communicates respect for the user’s attention and makes the entire experience feel more reliable.
The psychology of waiting
Waiting is not experienced as a neutral measurement of seconds. People judge a delay through emotion and expectation: a two-second wait can feel acceptable when the interface responds immediately, but feel much longer when the screen is blank, the outcome is uncertain, or the user does not know whether the action worked.
Research on service experiences shows that perceived waiting time often influences satisfaction more strongly than objective waiting time. Waiting feels worse when it is idle, unexplained, uncertain, or outside the user’s control; engagement, information, and visible progress can make the same duration feel more manageable. Erasmus research
Why digital waits feel painful
Several psychological effects make delays especially damaging in websites and apps:
- Unoccupied time feels longer. A blank screen gives users nothing to focus on, so their attention turns toward the passage of time.
- Uncertain time feels longer. Without feedback, users cannot tell whether the system is loading, frozen, or failed.
- Anxious time feels longer. When an action involves money, personal data, or an important task, users worry about the outcome.
- Unfair or uncontrolled time feels longer. Users become frustrated when they cannot understand why they are waiting or what they can do about it.
- Interrupted time feels longer. Repeated pauses break concentration and make a task feel more difficult than it actually is.
The first wait is often particularly important because it establishes expectations for the rest of the experience. If the product is slow before the user has received any value, the delay feels like a barrier rather than a necessary step.
Designing better waits
Good performance remains the best solution, but unavoidable waits should be designed deliberately:
- Show an immediate response when the user taps or submits.
- Replace blank screens with meaningful structure, such as a skeleton layout.
- Display progress when the duration is measurable.
- Explain what is happening when the operation is complex.
- Give users control, such as cancel, retry, or continue in the background.
- Confirm success clearly so users do not repeat an action.
- Use optimistic updates only when failure can be handled safely.
A progress indicator does not make a process objectively faster, but it reduces uncertainty and signals that the system is working. The goal is to transform passive waiting into informed progress: users should know that something is happening, why it is happening, and—when possible—how long it may take.
Evaluating UX performance
UX performance should be measured from two perspectives: how the system performs and how successfully users complete their goals. A page can achieve excellent technical scores yet still frustrate users if navigation is confusing, errors are frequent, or important tasks take too long.
Core Web Vitals
Google’s Core Web Vitals focus on three user-facing aspects: loading, responsiveness, and visual stability. The current recommended “good” thresholds are measured at the 75th percentile of real user experiences. Google Search Central
| Metric | What it measures | Good target |
|---|---|---|
| Largest Contentful Paint (LCP) | When the main content becomes visible | ≤ 2.5 seconds |
| Interaction to Next Paint (INP) | How quickly the interface responds visibly to user input | ≤ 200 ms |
| Cumulative Layout Shift (CLS) | How much the page moves unexpectedly | ≤ 0.1 |
These metrics answer three basic questions: Can users see the important content? Can they interact without waiting? Does the interface stay where it belongs?
Product and usability metrics
Technical metrics should be paired with measures of actual user outcomes:
- Task success rate: the percentage of users who complete a task correctly.
- Time on task: how long users need to accomplish a goal.
- Error rate: how often users make mistakes, repeat actions, or encounter failures.
- Abandonment rate: how frequently users leave before completing a flow.
- Satisfaction: feedback collected through CSAT, post-task questions, or interviews.
- Retention and conversion: whether better performance leads users to return, purchase, subscribe, or complete another valuable action.
These metrics reveal whether performance improvements produce meaningful UX improvements rather than merely better diagnostic scores. UX Army
Field data versus lab data
Field data comes from real users on their actual devices, browsers, networks, and locations. It is the best way to understand the experience users truly receive, and the Core Web Vitals report uses this type of real-world data. Google Search Console help
Lab data comes from controlled tools and repeatable test conditions. It is useful for debugging regressions and comparing changes, but it cannot represent every real-world device or network condition.
A strong measurement process uses both: lab tests to identify causes, field data to verify impact, and user-outcome metrics to confirm that the experience actually improved.
Measure journeys, not just pages
Page-level scores are useful, but users experience flows: searching, signing in, checking out, uploading a file, or completing a form. Measure the performance of those journeys from the user’s perspective, including:
- Time until the user can begin.
- Delay after each important interaction.
- Errors and repeated actions.
- Completion and abandonment.
- Satisfaction after the task.
The most meaningful performance goal is therefore not simply “reduce LCP” or “improve INP.” It is: help users complete important tasks quickly, confidently, and without unnecessary effort.
Performance for all
A fast experience should not be defined by the newest phone, a powerful laptop, or a high-speed Wi‑Fi connection. Real users may be on older hardware, limited data plans, congested mobile networks, small screens, or devices that struggle with heavy JavaScript and animation. Inclusive performance means making the core experience usable and responsive under those conditions.
Design for the baseline
Start with the lowest reasonable capability rather than treating slower users as an edge case:
- Make essential content and actions available without large downloads.
- Use responsive layouts that adapt to screen size, orientation, and input method.
- Keep navigation, forms, and primary interactions simple on small screens.
- Use semantic HTML and progressive enhancement so basic functionality works before advanced features load.
- Avoid assuming that every device supports fast processors, large memory, touch, or permanent connectivity.
The goal is not to create an inferior mobile version. It is to deliver the same essential value, while adapting presentation and optional features to the user’s context.
Adapt resources intelligently
The browser should not receive more data or computation than the device needs. Responsive images allow it to choose an appropriately sized asset through srcset and sizes; below-the-fold images can be lazy-loaded so that bandwidth is reserved for visible content. MDN
Adaptive loading can also provide a fast core experience to everyone, then add higher-quality media, complex animation, or nonessential scripts when the device and network can support them. On slow connections, this may mean smaller images and videos; on low-end hardware, it may mean fewer animations and less computationally expensive work. web.dev
Support imperfect connectivity
Networks are not stable. A user may move between Wi‑Fi and mobile data, lose connectivity in an elevator, or experience high latency even when bandwidth appears adequate. Good UX should therefore:
- Show clear loading, offline, and retry states.
- Preserve user input during failures.
- Cache essential assets where appropriate.
- Allow safe actions to queue for later synchronization.
- Avoid making users restart an entire task after a temporary error.
- Communicate whether an action succeeded, failed, or is still pending.
An interface that handles interruption gracefully feels more reliable than one that is fast only under ideal conditions.
Test real conditions
Performance testing should include real low-end devices, different browsers, small screens, CPU throttling, and simulated slow or unstable networks. Measure Core Web Vitals in field data as well as controlled tests, then segment results by device class, connection type, geography, and important user journeys.
The standard is not “Does it work on my machine?” It is “Can users with ordinary devices and difficult connections see, understand, and complete the important task?” A performant product is one that does not make hardware quality or network speed a prerequisite for a usable experience.
Performance-first design
Performance-first design treats speed, responsiveness, and stability as product requirements from the beginning—not as technical problems to fix after launch. It asks designers and engineers to make every visual, interaction, and feature earn its impact on the user’s time, attention, battery, data, and device resources.
Start with the core experience
Begin by identifying the user’s primary goal and designing the shortest reliable path to it:
- Show the most important content first.
- Make the primary action available as early as possible.
- Remove decorative elements that compete with essential content.
- Delay advanced features until they are needed.
- Use progressive disclosure to keep initial screens simple.
- Design useful empty, loading, error, and offline states.
A beautiful interface that takes too long to become useful is not successful design. The first screen should communicate value quickly, even while secondary content continues loading.
Make visual choices responsibly
Design decisions directly affect performance. Large hero videos, unoptimized images, custom fonts, complex shadows, excessive animation, and third-party widgets can increase download size, rendering work, and interaction delays.
Prefer appropriately sized responsive images, lightweight assets, restrained animation, and components that can render progressively.
Design for perceived performance
Users need feedback as much as they need speed. A responsive interface should:
- Acknowledge input immediately.
- Preserve the screen while new content loads.
- Use skeletons when the page structure is known.
- Use progress indicators for operations with meaningful duration.
- Keep layout dimensions stable to prevent visual movement.
- Explain failures and provide recovery actions.
Feedback should be honest: a loading animation must not disguise a stalled request, and a skeleton should resemble the content it represents rather than create false expectations.
Build performance into the process
Performance-first design works best as a shared workflow:
- Define performance budgets for page weight, loading, responsiveness, and stability.
- Include slower devices and networks in design reviews.
- Prototype loading, error, and transition states—not only the ideal final screen.
- Test realistic user journeys in both lab and field conditions.
- Monitor Core Web Vitals and task outcomes after release.
- Revisit the design when new features consume the available performance budget.
The central principle is simple: design the experience users can actually receive, not the one visible only in an ideal prototype or development environment.
The RAIL model
RAIL is a user-centered framework for thinking about web performance as a series of user actions rather than a single page-load number. It divides the experience into Response, Animation, Idle, and Load, giving each context a practical performance goal based on how people perceive delay. web.dev
| Principle | User experience | Practical goal |
|---|---|---|
| Response | Acknowledge clicks, taps, typing, and other input | Respond within 100 ms |
| Animation | Keep scrolling, dragging, and transitions smooth | Produce each frame within about 16 ms |
| Idle | Use background time without blocking future interaction | Work in small chunks, ideally under 50 ms |
| Load | Make useful content and interaction available quickly | Load interactive content within about 5 seconds |
Response
When a user clicks a button, the interface should acknowledge the action almost immediately—even if the complete operation takes longer. The first response might be a pressed state, spinner, optimistic update, or navigation transition; its purpose is to reassure the user that the input was received.
Long JavaScript tasks can block the main thread and delay this feedback. Splitting expensive work into smaller chunks allows the browser to return control to the user more frequently. MDN
Animation
Scrolling, dragging, and transitions are continuous interactions. If rendering misses frames, movement becomes jerky, which makes the interface feel unpolished and difficult to control.
The traditional RAIL target is roughly 16 milliseconds per frame for a 60-frame-per-second experience. In practice, teams should prioritize smoothness where motion helps users understand state or manipulate content, while avoiding unnecessary animation that consumes processing power.
Idle
Idle time is an opportunity to prepare future interactions: preload likely content, parse deferred data, or initialize noncritical components. However, background work should remain interruptible; a task that monopolizes the main thread can make a page feel slow the moment the user interacts.
RAIL recommends breaking idle work into short units so that interaction can take priority. This is especially important on lower-powered devices, where the same computation takes longer. web.dev
Load
Loading is not finished merely because the browser has downloaded every resource. The meaningful goal is to show useful content, establish visual stability, and make key interactions available as soon as possible.
A RAIL-based loading strategy therefore prioritizes:
- Critical content and styles.
- The first meaningful view.
- Essential interaction code.
- Stable layout dimensions.
- Deferred images, scripts, and features that are not immediately needed.
Using RAIL today
RAIL is best understood as a planning and prioritization model, not a replacement for modern metrics. Pair it with Core Web Vitals, field data, and task outcomes to identify which delays matter most to users.
For example, a product team might discover that its landing page loads acceptably but that opening the search filter takes 600 ms. RAIL directs attention to that interaction because responsiveness—not just initial loading—is the real source of friction. Its central principle remains: optimize the moments when users are acting, waiting, and trying to understand what happened.
Designing for performance from the start
Performance is easiest to achieve when it is part of the product’s foundation rather than a cleanup task after launch. Early decisions about content, layout, images, fonts, JavaScript, APIs, and architecture determine how quickly the experience can become useful and how well it will respond on real devices.
Set targets early
Before creating detailed screens, define what “fast enough” means for the most important user journeys:
- When should meaningful content appear?
- When should the user be able to interact?
- How quickly should key actions respond?
- How much layout movement is acceptable?
- What device and network conditions must be supported?
Turn these answers into performance budgets for page weight, image size, JavaScript, fonts, third-party code, loading time, and interaction latency. A budget makes performance a shared design constraint rather than an issue owned only by developers.
Make high-impact choices first
The greatest gains often come from decisions made before implementation:
- Prioritize essential content over decorative media.
- Design the critical path before adding secondary features.
- Choose responsive images and appropriately sized assets.
- Reduce dependency on custom fonts and third-party scripts.
- Keep layouts stable while content loads.
- Use progressive enhancement for advanced capabilities.
- Avoid interactions that require unnecessary network requests.
A small, focused interface is usually easier to make fast than a feature-heavy interface that must be optimized later.
Prototype the real experience
A static design file shows the final state, but it does not show waiting, partial loading, failure, or recovery. Prototypes should include:
- Slow initial loading.
- Delayed API responses.
- Empty and skeleton states.
- Progress indicators.
- Offline or interrupted connections.
- Errors and retry behavior.
- Low-end device constraints.
- Keyboard, touch, and accessibility interactions.
This exposes performance-related UX problems while they are still inexpensive to change.
Measure continuously
Test performance at every stage: design review, prototype, pull request, release candidate, and production. Use lab testing to reproduce problems, field data to understand real users, and product metrics such as task completion, abandonment, and satisfaction to verify that technical improvements matter.
The guiding principle is shift performance left: make important performance decisions before code is written, protect them with budgets and tests, and treat them as part of the definition of a finished feature. A fast product is not produced by one final optimization pass; it is shaped by hundreds of small decisions made from the beginning.
The mappings that get confused most often
❌ Performance is separate from UX
✓ Performance is one of UX’s most visible dimensions
❌ A green Core Web Vitals dashboard means the product feels good
✓ Metrics help only when they represent real friction and task outcomes
❌ Waiting is just clock time
✓ Perceived waiting time is shaped by feedback, certainty, and control
❌ Fast on a developer laptop is “fast enough”
✓ Inclusive performance starts from ordinary devices and difficult networks
❌ Optimize after launch
✓ Shift performance left: budgets, prototypes, and definition of done from day one
Checklist: treat performance as product UX
- List the five highest-value journeys (for a marketplace: search, product detail, add to cart, checkout step, account recovery).
- For each journey, write what “broken” feels like in plain language—blank screens, silent taps, layout jumps, repeated clicks.
- Set targets for meaningful content, interaction readiness, response latency, and layout stability.
- Design waiting, error, offline, and recovery states—not only the ideal screen.
- Pair Core Web Vitals (field + lab) with task success, time on task, errors, abandonment, and satisfaction.
- Define the baseline devices and networks that must pass before a release is done.
- Apply a RAIL lens: which delays hurt Response, Animation, Idle, or Load the most?
- Turn the answers into a performance budget owned by design and engineering together.
If you cannot answer these eight questions, performance is still an afterthought—not a product requirement.
What this chapter locks in
- Performance is UX: users experience products through time—appearance, response, stability, and smoothness.
- Slow costs trust, conversion, retention, and emotional energy; the first wait is the first impression.
- Perceived waiting often matters more than objective seconds; design feedback, progress, and control into unavoidable delays.
- Measure system performance and user outcomes together; prefer journeys over page vanity scores.
- Inclusive and performance-first design start from the baseline device, imperfect networks, and early budgets.
- RAIL keeps attention on the moments users act and wait; Core Web Vitals quantify parts of that story.
The goal is not to make a dashboard green. It is to help users complete important tasks quickly, confidently, and without unnecessary effort.
Next: we separate what users feel from what tools measure—so metrics become decision instruments, not vanity scoreboards.
FAQ
Frequently asked questions
Why is performance part of UX?
Users experience a website through time: how quickly content appears, how soon they can act, and whether interactions feel smooth. Performance is one of UX’s most visible dimensions.
What are Core Web Vitals good targets?
At the 75th percentile of real users: LCP ≤ 2.5s, INP ≤ 200ms, CLS ≤ 0.1—paired with task success, abandonment, and satisfaction.
What is RAIL?
A user-centered model of Response, Animation, Idle, and Load with practical goals for when users act, wait, and try to understand what happened.
What does this chapter lock in?
Treat performance as a product requirement: design waits, measure journeys, support ordinary devices and imperfect networks, and shift performance left from the start.
Engineering Principles Learned
- Performance is not separate from UX—it is one of its most visible dimensions.
- Perceived waiting and task outcomes matter as much as lab scores.
- Shift performance left: budgets, inclusive baselines, and RAIL priorities from the start.
PRODUCTION REFERENCE
Decision record and production validation
DECISION SIGNALS
- Users abandoned flows after silent delays on catalog and checkout surfaces.
- Visual polish could not compensate for late content and unstable layout.
- Performance work arrived too late in the delivery cycle to change architecture choices.
- Teams tracked LCP, INP, and CLS as metrics instead of as user experience outcomes.
PRODUCTION VALIDATION
- Marketplace platform
- B2B/B2C
- Catalog at scale
- Technical leadership
- React
- Next.js
- AWS
EVIDENCE: CASE STUDY
Kayra Export Marketplace Platform
The anonymised production context for performance decisions on a high-SKU marketplace storefront is available in the related case study.
Explore the architectural context →Continue reading
Continue reading
Next in series
Measuring What Matters: Essential Metrics for User-Centric Performance
Measure user-centric performance with lab and field data, Core Web Vitals (LCP, INP, CLS), RUM, CrUX, budgets, and continuous monitoring—so metrics drive…
Related articles
From a Monolithic Frontend to Next.js Multi-Zone Architecture
Why do monolithic frontend boundaries become strained in a growing marketplace? A decision record covering the alternatives, trade-offs, and production…
Related articles
Goodbye tailwind.config.js: What Does Tailwind v4 Change?
Discover the revolutionary changes brought by Tailwind CSS v4: migration from JavaScript configuration to CSS, new Oxide engine, automatic content…