Yashveer Singh
Connect
<- All posts
Performance Optimization6 min read

Real User Monitoring vs Synthetic Monitoring: Both, Not Either

Real User Monitoring (RUM) collects performance data from actual users as they use the application in their real browsers, networks, and devices. Synthetic monitoring simulates user interactions from fixed locations using scripted tests that run on a schedule. RUM shows what real users actually experience, including performance on slow networks, old devices, and geographically distant locations. Synthetic monitoring provides consistent, repeatable baseline measurements for catching regressions before they reach users.

Written by Yashveer Singh, founder of Yashveer Labs.

What you need to know

  • RUM shows what real users actually experience. Synthetic monitoring shows consistent baseline performance from controlled conditions. Both are necessary.
  • Synthetic monitoring catches regressions immediately after deployment. RUM catches them after real users are affected. Use synthetic in the deployment pipeline.
  • Core Web Vitals from RUM reflect actual Google Search ranking signals. The p75 values Google uses for ranking come from field data, not synthetic tests.
  • Slow p95 and p99 RUM values are worth investigating even if the median is good. The users in the tail are not statistical noise.
  • Session replay connected to performance data is the fastest way to understand what users experience during slow page loads.

The core argument

The common pattern is teams choosing one monitoring approach and treating it as complete. Teams with synthetic monitoring know their p95 LCP from a fast London server and have no idea what their users in India on 4G see. Teams with only RUM cannot answer "did our performance regress after today's deployment?" without waiting for enough real traffic to accumulate statistical significance.

The two approaches are complementary because they answer different questions. Synthetic monitoring answers: "Is performance above a minimum threshold right now?" This is the regression detection question. RUM answers: "What do our actual users experience?" This is the user impact question. Neither answer is available without both tools.

The practical implementation is: synthetic monitoring in the CI/CD pipeline that runs against staging and blocks production deployments that regress performance. RUM in production that captures real user experience data and alerts when field metrics degrade below the target threshold. Synthetic catches regressions before they reach users. RUM measures the actual user experience impact of the changes that did ship. On Prominence Football Academy's web platform, adding Lighthouse CI to the deployment pipeline caught a 3x LCP regression introduced by a large unoptimized image before it reached any users. The RUM data the same week confirmed that the images that did make it to production were loading well for real users on mobile connections.

Common mistakes

  1. Using only synthetic monitoring and assuming it reflects real user experience. Synthetic tests run from high-speed data center connections on latest-generation hardware. Real users are on mobile devices with 4G connections in geographically diverse locations. A page that scores 90 on Lighthouse on a desktop from a US server may score 60 for a user on a mid-range Android phone in Southeast Asia. RUM reveals this gap; synthetic cannot.
  1. Tracking only median performance and ignoring the distribution tail. If p50 LCP is 1.5s but p95 LCP is 8s, 5% of users experience an 8-second load. For a site with 100,000 monthly visitors, that is 5,000 users seeing an unacceptably slow page. Google's Core Web Vitals ranking uses the p75 value, not the median. The tail matters.
  1. Not correlating performance metrics with business outcomes. Performance data is only actionable when connected to what it means for the business. A 500ms LCP improvement is meaningful if it correlates with a conversion rate increase. Track performance metrics alongside the business metrics they affect: bounce rate by LCP bucket, checkout completion rate by page load time percentile.
  1. Running Lighthouse only on the home page. The home page typically has the most performance attention and is not representative of the experience on product detail pages, dashboards, or checkout flows. Run synthetic monitoring on a representative set of pages including the most business-critical flows.
  1. Setting performance budgets that are never enforced. A performance budget that generates a warning in the CI output but never blocks a deployment will be ignored after a few weeks. Performance budgets must be enforced: deployment fails when the budget is exceeded. This creates the pressure to fix the regression rather than ship over it.

Where to start

  1. Install the web-vitals library and send data to an analytics endpoint. The web-vitals library measures LCP, FID/INP, CLS, TTFB, and FCP and fires a callback with the values. Connect this to an existing analytics tool (Google Analytics 4, Vercel Analytics, a custom endpoint) to start collecting field data. This is a one-time 15-minute setup that provides ongoing RUM.
  1. Add Lighthouse CI to the deployment pipeline. Install the @lhci/cli package, configure it to run against the staging deployment after each push, and set performance score thresholds (LCP under 2.5s, CLS under 0.1) that fail the check. Start with thresholds slightly below the current baseline to establish the enforcement habit before tightening the budget.
  1. Review RUM data weekly and identify the pages with the largest distribution spread. Pages where p50 is good but p95 is poor have specific user segments with a bad experience. Investigate those pages with device and connection type segmentation to understand which users are in the slow tail.

Related reading

FAQ

Frequently asked

Author

The reason my name is on this page

My name is on this page because I wrote what is on this page. Yashveer Singh. Full stack developer. Founder of Yashveer Labs. The portfolio is on the homepage. The projects are live. The code is real. The work is provable. If you have read this far, you already know whether the voice matches the standard you are looking for. The next move is yours.

Related reading