Frontend Performance/Monitoring
Lesson 7 of 20 · Episode 7

RUM vs. Synthetic Monitoring

Field data from real users vs. lab data from controlled tests — what each one is good and bad at.

RUMSyntheticField vs lab
Watch on YouTube ↗

Now you know the metrics — but where do the numbers come from? There are two ways to measure: watch real users in the wild (RUM / field data) or run controlled tests in a lab (synthetic monitoring). They answer different questions, and the pros use both.

The core distinction

One controlled test vs. thousands of real visits

Synthetic monitoring runs your page in a fixed environment — same device, network, and cache every time — so you get a clean, repeatable number. RUM instruments real visits and gives you a whole distribution of what actual people experienced. One is a controlled experiment; the other is the truth on the ground:

InteractiveLab gives you a number; field gives you a distribution
Synthetic (Lab)
1 controlled run

Same device, network, and cache every run → repeatable, identical numbers. Great for catching regressions.

RUM (Field)
thousands of real visits

Every real device, network, and location → a distribution. The truth about what users feel (incl. that slow tail).

Synthetic = repeatable single result. RUM = the spread across every real device, network, and location — including the slow tail.
Field data

RUM — Real User Monitoring

RUM is usually a small third-party script that reports each real visit's metrics (LCP, INP, CLS…) to a dashboard. Because it sees everyone, you can break the data down — by country, browser, device, connection — and discover that your “good” average is hiding a miserable experience for users in one region or on one browser.

The overhead trap
RUM runs in your users' browsers, so capturing too much(every request, every frame) makes the monitoring itself a performance problem. Keep it light. Popular tools: New Relic, SpeedCurve, Sentry.
Lab data

Synthetic monitoring

Synthetic tests run away from real users, so they cost your visitors nothing — which means you can capture everything: full request waterfalls, screenshots, console logs, main-thread traces. Because the variables are fixed, the same version yields the same result, which makes it perfect for two things: deep debugging a specific scenario, and pre-release testing to catch a regression before it ships. Tools: Lighthouse, WebPageTest, DebugBear.

Garbage in, garbage out
Lab data is only as honest as its variables. Test on a high-end laptop and Fast 3G while your users are on cheap phones and spotty networks, and your green lab scores are a comforting lie. Pick variables from your real audience (which RUM tells you).
A common surprise

Why field and lab numbers disagree

It throws people off when the same page reads 1.8 s in the field and 3.0 s in the lab. That's not a bug — they measure different things. Click through the reasons:

InteractiveSame page, different numbers
Field (RUM)
1.8s
Lab (Synthetic)
3.0s
Same page, different numbers — and that's expected. Why?
Field
Returning users have assets cached → fast
Lab
Cold cache every run → slower
Caching, device/network mix, which element is the LCP, and bfcache all pull field and lab apart.
Use the right one

Which tool for which question

You don't pick one forever — you pick per question. Field tells you what is wrong and for whom; lab lets you reproduce and fix it. Toggle to see the questions each is built to answer:

InteractiveField answers ‘what & who’; lab answers ‘why & did-it-help’
  • Are my real users actually having a good experience?
  • Which countries / browsers are slow?
  • Did last week's release regress p75 LCP in production?
RUM (field)Synthetic (lab)
SourceReal users, in productionControlled, scripted runs
Result shapeA distribution (p75, breakdowns)A single repeatable number
OverheadRuns in users' browsersZero cost to users
Detail capturedLightweight (keep it lean)Deep (traces, filmstrip, logs)
Before release?No — needs real trafficYes
Best atWhat real users feel; who's affectedReproducing & debugging; CI gates
Your turn

Field or lab?

For each goal, pick the right approach:

InteractiveSort each goal to the right tool
0/5 sorted
Block a PR if it slows the page in CI
Find out users in India have poor LCP
Get a full main-thread trace for one slow load
Track production p75 INP week over week
Check a redesign before launch
Q1Multiple choice
What is the defining feature of RUM (field data)?
Q2Multiple choice
Why can synthetic tests capture far more detail (traces, screenshots, logs) than RUM?
Q3Multiple choice
Your lab LCP is 3.0s but field LCP is 1.8s. The most likely reason?
Key takeaways
  • RUM (field) = real users → a distribution you can break down by segment.
  • Synthetic (lab) = fixed variables → repeatable, deep, and usable before release.
  • Lab is misleading if its variables don't match your real audience — pick them from RUM.
  • Field vs lab numbers differ by design (cache, device, LCP element, bfcache).
  • Use both: field to find what's wrong & for whom, lab to reproduce, debug, and gate releases.
← Previous
6. Interaction to Next Paint (INP)
Next →
8. Real User Monitoring