RUM and synthetic monitoring configured
Why it matters
Synthetic monitoring (Lighthouse CI, automated browser tests) catches regressions in controlled conditions. RUM (Real User Monitoring) captures what actually happens across your user base — different devices, networks, geographies, and browser versions. ISO 25010:2011 time-behaviour requires measuring real performance; without RUM, you are optimizing against lab conditions that may not match production. Without synthetic monitoring, you lack a baseline to detect regressions before they affect users.
Severity rationale
Low because monitoring is detective rather than preventive — its absence does not degrade performance directly, but means regressions go undetected until user complaints surface them, often after significant impact.
Remediation
Integrate the web-vitals library to collect LCP, CLS, and FID/INP from real users and send to your analytics backend. Pair with Lighthouse CI for synthetic baselines.
// app/layout.tsx — report Web Vitals to your analytics endpoint
import { useReportWebVitals } from 'next/web-vitals'
export function WebVitalsReporter() {
useReportWebVitals((metric) => {
fetch('/api/vitals', {
method: 'POST',
body: JSON.stringify({ name: metric.name, value: metric.value, id: metric.id }),
})
})
return null
}
Detection
-
ID:
rum-synthetic-monitoring -
Severity:
low -
What to look for: Count all monitoring integrations. Enumerate which provide RUM (Real User Monitoring) vs. synthetic monitoring. At least 2 monitoring types needed. Look for monitoring service integrations (web-vitals, Sentry, Datadog, New Relic, Google Analytics 4). Check for RUM (Real User Monitoring) dashboards. Look for synthetic monitoring (Lighthouse CI, Browserstack, etc.).
-
Pass criteria: Both RUM and synthetic monitoring are configured. RUM captures real user metrics (LCP, CLS, FID). Synthetic monitoring runs automated tests on each deploy.
-
Fail criteria: No monitoring configured, or only one type (RUM or synthetic, not both).
-
Skip (N/A) when: Never — monitoring is essential for production applications.
-
Cross-reference: For regression alerts built on monitoring data, see
regression-alerts-configured. -
Detail on fail:
"No monitoring configured — performance regressions undetected until users complain"or"Only synthetic monitoring; no real user data about actual performance" -
Remediation: Integrate web-vitals and a monitoring service like Sentry, Datadog, or New Relic.
// app/layout.tsx — web-vitals RUM integration import { useReportWebVitals } from 'next/web-vitals' useReportWebVitals((metric) => fetch('/api/vitals', { method: 'POST', body: JSON.stringify(metric) }))
External references
- iso-25010:2011 · time-behaviour — Time Behaviour (performance efficiency)
Taxons
History
- 2026-04-18·v1.0.0·Initial import from performance-deep-dive·automated