Home / Monitoring

Measuring Software Speed From the Browser With Real User Data

September 28, 2026 ·

real user monitoring setup

Speed is easiest to discuss when a lab test produces a clean number, but real users do not experience a clean environment. They use mid-range phones, congested networks, browser extensions, cached assets, and pages that vary by region. This guide explains how to set up real user monitoring so your team can measure software speed from the browser with data that reflects actual sessions. It also shows how to turn those measurements into practical performance tuning decisions.

Start with the user journey, not a generic score

Choose two or three journeys that matter to the product: signing in, opening a dashboard, searching, or completing checkout. Define what a successful experience means for each journey, including the moment the interface becomes useful and the moment the main action completes. This keeps the program focused on outcomes rather than collecting every available timing.

Real user monitoring, often called RUM, observes page loads and interactions in the browser and sends selected measurements to your service. Unlike a synthetic test, it captures the variation caused by devices, networks, geography, and application state. The goal is not to replace lab testing; it is to see whether improvements hold for the people using the product.

Choose metrics that explain the experience

Begin with Core Web Vitals and a small set of supporting measures:

  • Largest Contentful Paint (LCP): when the main content appears to be ready.
  • Interaction to Next Paint (INP): how quickly the interface responds to clicks, taps, and key presses.
  • Cumulative Layout Shift (CLS): how much content moves unexpectedly while the page is loading.
  • Time to First Byte (TTFB): how long the browser waits for the first response from the server.
  • Resource timings: how long scripts, styles, fonts, images, and API calls take to load.

Report distributions rather than a single average. A median can hide a slow tail, so include p75 and p95 values and compare them with the experience you want to provide. Keep the metric set stable enough to compare releases over time.

Plan the data you collect

Before writing code, document the events and fields your team needs. A useful page view record might include the URL pattern, route name, device class, connection type when available, country or region, release identifier, and a sample of timing values. Interaction records should include the interaction type, target element, latency, and the route where it occurred. Use route templates rather than raw URLs with identifiers, such as /orders/:id, to keep reports readable.

Decide how to handle sensitive data. Do not send form values, tokens, query strings containing personal information, or free text from the page. Allowlist the fields that leave the browser, and document the retention period. If you sample data, keep enough samples for small routes and for peak periods, and record the sampling rate with each event.

Instrument the browser with a small, explicit API

Create a thin monitoring module that exposes functions such as trackPageView, trackMetric, and trackInteraction. The module should attach a common context to every event, validate fields, apply sampling, and send batches asynchronously. Sending data must not delay navigation or compete with the main task.

For page views, record the route when the application changes history state or the route becomes interactive. For metrics, use the browser Performance API where it is available: the navigation timing entry for TTFB, resource timing entries for assets, and the paint and layout-shift entries for page-level signals. For interactions, measure the time from the event handler start until the next frame is presented, then report the result after the interaction completes.

Keep the transport resilient. Use sendBeacon or a fetch request with keepalive during page unload, batch events on a timer, and cap the queue so a failing endpoint does not grow memory. Retry only transient failures, and drop events after a reasonable limit.

Validate the setup before drawing conclusions

Test the pipeline in a staging environment with several devices and network conditions. Confirm that page views arrive once, that route templates are correct, and that interactions are not double-counted. Check that the monitoring code does not introduce long tasks or layout shifts. Compare a known slow action with the reported value, then repeat it on a throttled connection.

Create a simple dashboard with the p75 and p95 of each metric, split by route, device class, release, and region. Add a release marker so the team can see whether a deployment changed the distribution. Set alert thresholds for sustained regressions rather than single outliers, and include a link from each alert to the affected route and release.

Turn measurements into improvements

Start with the routes that combine high traffic with poor p75 values. Break the result down by lifecycle phase. If TTFB is high, inspect server work, caching, and edge delivery. If LCP is late, check the main image or heading, its priority, and whether critical CSS is blocked by a late stylesheet. If INP is poor, look for long event handlers, unnecessary rendering work, and third-party scripts that run during interaction. If CLS is unstable, reserve space for media and avoid inserting content above existing content.

Make one change at a time when possible, deploy it behind a controlled release, and compare the next day of field data with the previous baseline. Keep a short performance budget for the journeys you care about, and review it during normal release checks. A budget can be a maximum p75 value, a limit on transferred bytes, or a cap on long tasks during the primary interaction.

Build a repeatable operating rhythm

Assign an owner for the monitoring pipeline and a reviewer for the dashboard. Review trends weekly, investigate meaningful changes after releases, and archive notes about experiments so future teams understand why a decision was made. Periodically retire fields that are not used, refresh route templates, and recheck that sampling still represents important traffic.

Real user monitoring is most valuable when it connects a browser measurement to a product decision. By starting with a clear journey, collecting a focused set of metrics, validating the pipeline, and reviewing distributions by release and context, you can measure speed where it matters and improve it with evidence rather than assumptions.

Related reading