RUM (real user monitoring)
Telemetry collected inside real visitors' browsers, so you see what your actual users hit instead of what your laptop hits.
See it
What it is
RUM is a small script riding along in your page that reads the browser's own APIs (PerformanceObserver, Navigation Timing, window.onerror) and beacons the results back to you. Every sample carries context: route, device, connection type, browser, country, release. That context is the whole point, because it turns 'the site feels slow' into 'the /checkout route is slow on mid-range Android since Tuesday's deploy'.
Reach for it when your synthetic checks are green and users keep complaining anyway. RUM is the only source that includes the three-year old phone, the hotel wifi, and the browser extension injecting 400kb. Pair it with server-side traces: a bad p75 in RUM plus a fat span in the API trace tells you which half of the stack to go fix. The same beacon usually carries JS errors too, which is why RUM and error tracking tend to ship as one SDK.
Gotchas: RUM only hears from people who stayed. Whoever bounced at second two had the worst experience and sent you nothing, so the data is survivorship-biased. Ad blockers and consent banners quietly eat a chunk of your beacons. Report p75 or p95, never the mean, since one person in a tunnel drags an average into fiction. And attaching a user ID to every event is how you buy a surprise bill.
Ask AI for it
Add real user monitoring to this web app. Install the 'web-vitals' library, subscribe to onLCP, onINP, onCLS, onTTFB and onFCP, and also capture uncaught errors and unhandled promise rejections. Batch each sample and send it with navigator.sendBeacon to POST /api/rum on visibilitychange 'hidden', not on unload. Include the route pattern (not the raw URL), release commit SHA, device type, effective connection type, and an anonymous session ID, but no user identifiers and no query strings. Keep 100% of error events and sample performance events at 20%. Server-side, aggregate to p75 and p95 per route per device over a rolling 7-day window and flag regressions after a deploy.