Noise Rate
The share of decided flags that should receive no engineering effort — the recommended-no-action share.
The Framework
Know which PageSpeed warnings deserve work — and what the report missed. A verdict-based method for auditing the automated report — not just the page. PageSpeedAudit is the audit that begins where PageSpeed Insights stops; this page is the canonical statement of the method behind every audit we deliver.
In plain words: Google's free speed test shows a long list of warnings. Some warnings are wrong. Some real problems never appear on the list. This page explains how we test every warning, how we search for the problem the list misses, and how we check that every fix worked.
1 · The problem
Two failure directions. Four verdicts. Two outputs. One evidence ladder.
Flags, scores, modeled savings and lab artifacts arrive as claims — not conclusions.
No decisive evidence obtainable? The flag exits sideways as Unresolved — a status, not a fifth verdict — with the named test that would decide it, and stays out of the Noise Rate’s denominator.
Anchor on field percentiles and decompose the binding user constraint independently.
Automated performance tools such as Google PageSpeed Insights are screening instruments: they are engineered for sensitivity, and consequently they fail in two directions at once. They produce noise — flags that are false, immaterial, or unfixable for the specific site — and they produce silence — real, user-experienced bottlenecks that appear nowhere in the report. The Noise & Silence framework treats the automated report itself, not the web page, as the primary object of the audit. Its method is the Four Verdicts: every flag the tool raises is adjudicated, with documented evidence, as Real, Wrong, Trivial, or Locked. The adjudication yields two falsifiable quantities — the Noise Rate (the share of flags that should receive no engineering effort) and the Silent Bottleneck (the binding field constraint absent from the flag list) — and every surviving recommendation must then pass a three-step verification ladder: predict, prove, confirm. The framework imports its foundations from screening theory, signal detection, medical alarm-fatigue research, and the actionability literature of automated static analysis; its application to web-performance reporting is, to our knowledge, novel.
| Premise | An automated performance report fails in exactly two directions: Noise — flags owed no effort — and Silence — real bottlenecks never flagged. Silence is the detector’s classical Type II error. Noise is deliberately broader than the Type I false alarm: it also holds the true-but-unactionable flags (Trivial, Locked) the SOC literature calls “true alarms, explained by legitimate behavior”. |
|---|---|
| Method | The Four Verdicts, applied to every flag, in order: fails the truth test → Wrong · fails the materiality test → Trivial · fails the jurisdiction test → Locked · passes all three → Real. A flag whose discriminating evidence cannot be obtained is held Unresolved — a status, not a fifth verdict — with the named test that would decide it. |
| Evidence rules | Every verdict carries (1) a verbatim artifact, (2) a documented falsification attempt, (3) a confidence grade. No artifact, no verdict. |
| Outputs | Noise Rate = (Wrong + Trivial + Locked) ÷ flags decided — the recommended-no-action share, reported beside the unresolved share. Silent Bottleneck = the binding field constraint that appears nowhere in the flag list. |
| Discipline | Every surviving fix must predict (arithmetic range against field data), prove (repeated-run lab A/B), and confirm (field percentiles, on the 28-day clock). |
Web performance remains materially unsolved: in the most recent HTTP Archive Web Almanac, only 48% of mobile origins and 56% of desktop origins achieved “good” Core Web Vitals (Jariyal et al., 2025), while the business stakes are well documented — a Google-commissioned study conducted by Deloitte and 55 across 37 brand sites found that a 0.1-second improvement in mobile speed metrics was associated with, among other effects, an 8.4% increase in retail conversions (Deloitte, 2020). We have quantified that stake for a single page in our own research on the cost of a millisecond.
Into this gap Google ships a free, authoritative diagnostic: PageSpeed Insights (PSI), which wraps Lighthouse lab analysis and Chrome User Experience Report (CrUX) field data. Practitioner responses to its output are strikingly bimodal. One camp treats the report as a work order and burns engineering quarters chasing a 100/100 score. The other camp, exhausted by recommendations that never seem to move anything, concludes the tool should be disregarded altogether — an entire genre of practitioner literature exists to argue that the score “does not matter” or “does not reflect reality” (Lyrical Host, n.d.; HelpfulCrowd, n.d.). The software-engineering research community observed the same two poles over a decade ago with static analysis tools: developers either drown in warnings or abandon the tool, with false positives and warning overload chief among the reasons they cite (Johnson et al., 2013).
Both responses share the same mistake: they assign the report a truth status — all true or all worthless — instead of assigning each claim in it a verdict. A screening instrument's output is neither a work order nor garbage. It is input for a confirmatory diagnosis that has not yet happened.
The Noise & Silence framework is that confirmatory step, made explicit, procedural, and measurable.
None of the framework's ingredients is new. That is deliberate: each pillar is imported from a field that has already spent decades — in one case, nearly a century — learning the lesson web performance has not yet institutionalized.
Screening is not diagnosis. Since Wilson and Jungner's canonical WHO monograph, medicine has separated the high-sensitivity screening test from the confirmatory diagnostic work-up that must follow it — and made the availability of follow-up diagnosis an explicit precondition for screening at all (Wilson and Jungner, 1968). A screening instrument is designed to over-flag: for its maker, a false alarm costs little, while a miss is catastrophic. PSI has exactly this economic structure — a false alarm costs the site owner's time, not Google's — so its over-flagging is a design property, not a defect.
Every detector commits two errors. Statistical decision theory formalized the trade-off: a test can raise a false alarm (Type I error) or miss a real signal (Type II error), and tuning a detector toward sensitivity necessarily buys more of the first (Neyman and Pearson, 1933; Green and Swets, 1966). Silence is the second of these errors — the missed signal — in plain language. Noise, as this framework uses the word, is broader than the statistician’s false alarm: it is every flag owed no effort — the factually false ones (the true Type I errors) and the true-but-unactionable ones the SOC literature later identified (Section 2, final paragraph; Section 5.3 keeps the two shares separable). The framework's contribution is to insist that an audit must measure both — and the literature on diagnostic testing adds a warning that transfers directly: a positive result's usefulness — its predictive value — collapses when the condition it flags is rare in the population under test, which is why a flag's existence is never evidence of its importance (Altman and Bland, 1994).
Unmanaged noise destroys the operator, not the instrument. Medicine calls the failure mode alarm fatigue: between 72% and 99% of clinical alarms are false, clinicians desensitize under the load, and patient deaths have been attributed to the resulting missed alarms (Sendelbach and Funk, 2013). Security operations centers rediscovered the phenomenon at industrial scale, with a finding that matters enormously for this framework: the seminal qualitative study of SOC analysts — titled “99% False Positives” — found that most alarms practitioners dismiss are not technically incorrect but are “true alarms, explained by legitimate behavior”: right about the event, worthless about the action (Alahmadi, Axon and Martinovic, 2022). Web teams that have “fixed everything PageSpeed said” twice and seen nothing move are exhibiting the same syndrome — not laziness, but a rational loss of trust in an unadjudicated alarm stream.
Actionability, not correctness, is the operative standard. The deepest import comes from Google's own static-analysis program. The team that built Tricorder, Google's internal analysis platform, measures what they call effective false positives: “We consider an issue to be an ‘effective false positive’ if developers did not take positive action after seeing the issue” — regardless of whether the flag is technically correct (Sadowski et al., 2018). A decade earlier, a systematic literature review had already consolidated “actionable alert identification” as its own research problem: separating, out of everything an automated analyzer raises, the subset a rational engineer should act on (Heckman and Williams, 2011). The Four Verdicts are a domain-specific actionability classifier in exactly this tradition — applied to a class of report, the web-performance audit, where no such discipline currently exists.
One more import deserves credit. The insight that page-load time is governed by a dependency structure — a critical path, such that optimizing off-path activities yields zero improvement — was established for web pages by the WProf work at the University of Washington (Wang et al., 2013). It grounds the framework's treatment of the binding constraint (Section 5.3), which is the theory-of-constraints principle that a system improves only when its constraint improves (Goldratt and Cox, 1984).
2 · Failure modes
Calling PSI's output noisy is not a criticism of Google's engineering; it is a description of structural properties that Google itself documents. Adjudication is possible precisely because the falsifying evidence is usually in the report's own data. Six mechanisms account for most of the noise we adjudicate in practice.
| Failure mechanism | What misleads the team | Best falsifying evidence | Likely verdict |
|---|---|---|---|
| Metric mismatch | A red lab score is read as a failing user experience. | Field LCP, INP and CLS percentiles — after ruling out window lag and variant mismatch. | Wrong / Trivial |
| Model overreach | Simulated savings are read as field forecasts and subtracted from field numbers. | The saving’s own lab baseline; arithmetic against field timing. | Real, magnitude recomputed |
| Zero-savings flag | A large byte count creates urgency while the modeled savings are zero. | The audit’s own metricSavings — completed by the intent-and-objective check (3c). | Trivial, on the combination |
| Run variance | One synthetic before/after pair is mistaken for causal proof. | Repeated-run distributions, confidence interval, noise floor. | Inconclusive |
| Intent blindness | Interaction, consent, security or revenue code is labeled “unused”. | Ownership, execution path, and what the resource is for. | Wrong / Locked |
| Environment mismatch | Cold synthetic conditions are generalized to real users. | Lab-versus-field divergence — with the distribution checked, never the p75 alone. | Wrong, or Real for a segment |
A simulated saving nearly the size of the entire real-user experience. The bars share a unit, not a baseline — the saving lives in the simulator’s graph, the 2,784 ms in the field — so they cannot be subtracted; their very comparability is the alarm.
(a) The score is not the experience. The Lighthouse performance score weights Total Blocking Time at 30% and Speed Index at 10% (Chrome Developers, n.d. a). Neither is a Core Web Vital; neither exists in field data. Only half the score's weight (LCP 25% + CLS 25%) rests on metrics Google's own Search guidance treats as user-experience ground truth — and INP, a Core Web Vital since March 2024 (Google Search Central, 2023), is absent from the score entirely. A red lab score over green field vitals is therefore never a self-contradiction — but it is a discrepancy with more than one candidate explanation. Metric weighting is the most common; the others are the trailing 28-day field window (which a regression deployed this week has barely entered), environment and variant differences between the datacenter run and real traffic, and a real degradation confined to a segment the aggregate p75 hides. The adjudicator’s job is to name which explanation is operating before any roadmap is planned around either number — and the weighting case remains the single most expensive trap in the genre, because teams plan quarters around a number no user experiences.
(b) Simulated savings are upper bounds, not predictions. Lighthouse's default throttling is simulated: a modeling engine, Lantern, replays the observed network activity under modeled constraints. Google's own design documentation quantifies the cost — “Lantern is ~6-13% more inaccurate than DevTools throttling” — and frames this as acceptable because it is comparable to run-to-run variance (GoogleChrome Lighthouse, n.d.). Opportunity “savings” estimated this way do not compose, and they are counterfactuals inside the simulator’s own dependency graph — their baseline is the simulated lab metric, never the field percentile, so they cannot be subtracted from field numbers at all. We have recorded a “reduce render-blocking resources: save 2,330 ms” opportunity on a page whose real users' 75th-percentile LCP was 2,784 ms: a simulated saving nearly the size of the entire real-user experience. The two figures share a unit and nothing else — and that is the trap: a work order would happily subtract them and promise an impossible page. The honest reading compares the saving to the simulator’s own lab baseline, and treats the field effect as an open question for Predict, Prove, Confirm (Section 5.5). Whether these promised savings materialize at all is an empirical question, and we have tested it directly: on clean, controlled pages the predicted milliseconds did appear, and were if anything conservative — which makes the wild over-estimates above all the more diagnostic of a broken chain.
(c) The tool refutes some of its own flags. Since Lighthouse attached machine-readable
metricSavings estimates to audits (visible in the PageSpeed Insights API; Google, n.d. b), a
flag can arrive carrying Google's own evidence against its materiality. We have recorded “Reduce unused
JavaScript — 909 KiB” raised with the tool's own estimated savings at zero on the metrics it modeled: the
audit fired on byte count while the modeling engine found no positive modeled saving. Read that zero
precisely: for byte-efficiency audits Lighthouse simulates only the network-path effect on FCP and LCP,
clamps negative modeled results to zero, and rounds to 10 ms — so a zero means no reportable modeled
network-path benefit for those two metrics, in this trace, at that resolution. It does not say that
removal changes nothing: interaction cost, memory, data transfer and later-route work are outside the
model, and the savings field is not attached to every audit. The zero is therefore strong admissible
evidence toward Trivial — the tool's second opinion of itself — but the verdict still requires the
judgment layer: what the bytes are for, and whether any declared objective beyond the modeled metrics is
at stake (in the recorded case the bytes were reCAPTCHA — security-owned, interaction-path — and the
verdict rested on that combination, not on the zero alone).
(d) One synthetic run generalizes poorly. Google's guidance is explicit that scores fluctuate with underlying conditions and that “it might be more useful to think of your site performance as a distribution of scores, rather than a single number” (Chrome Developers, n.d. a). We have recorded the same URL scoring 73 and 55 minutes apart, with no deploy in between. Any adjudication discipline must therefore refuse to treat two single lab runs as before/after proof — including, symmetrically, our own; we have quantified how many runs it actually takes to prove a change and built a required-runs calculator so the number is not guessed.
(e) The lab cannot know intent. Load-time coverage counts interaction-, route-,
consent-, and security-path code as “unused”; the 909 KiB in the example above was substantially
reCAPTCHA — code whose entire purpose is served after load, on a form the lab never submits. The same
intent-blindness flags font-display: block on icon fonts (where blocking is the correct
behavior), correctly art-directed responsive images as “improperly sized”, and legally mandated consent
tooling as removable third-party cost. The flag is technically well-formed; the verdict requires knowing
what the resource is for — context the raw analyzer does not have. Sadowski et al. (2018) show how
much of an analyzer's usefulness rides on exactly that kind of context: actionability, project-specific
configuration, checks contributed by domain experts, and a low effective-false-positive rate. We draw
the practical conclusion for this setting and keep the judgment with a human.
(f) Lab CLS is not field CLS. The lab loads a cold cache, cold fonts, and whatever page variant a datacenter IP receives; real users' layout shifts happen on interaction, on scroll, after consent choices. We have recorded a lab CLS of 0.122 flagged as failing on a page whose field 75th-percentile CLS was 0.00. One caution before stamping such a flag no-action: a green p75 speaks for at least three of four measured page views and says nothing about the rest — so the question is settled by the distribution, not the headline percentile. And it must be settled against the right bin. Google's bands are good ≤ 0.10, needs-improvement 0.10–0.25, poor > 0.25, so a lab CLS of 0.122 sits in needs-improvement, not poor. An essentially zero poor share therefore does not close the remaining quarter: that quarter can sit entirely in needs-improvement, which is exactly where the lab number is. With p75 = 0.00 and no poor tail, all that follows is that the good share is at least three quarters and the needs-improvement cohort is at most one — so what decides the flag is the good share, and only an essentially all-good distribution (or first-party RUM granular enough to resolve the tail) supports a no-action verdict. A real needs-improvement or poor cohort behind the green p75 means the lab may be faithfully reproducing exactly that segment, and the verdict is Real for a segment (Section 7, step 4).
The second failure direction is structural absence — and it is more dangerous than noise, because an absence cannot annoy anyone into skepticism. Google's own documentation states the division plainly: “The lab data is based on a simulated load of a page on a single device and fixed set of network conditions”, and lab data “may not capture real-world bottlenecks” (Google, n.d. a). Four silences recur.
The lab can sit network-adjacent to the origin while real users cross continents. Evidence: field or RUM TTFB.
A load-only run cannot report INP; TBT is a proxy, not a substitute. Evidence: field INP.
CrUX samples opted-in Chrome users; iOS Chrome, WebViews and other browsers are excluded. Evidence: audience-specific RUM.
One logged-out, pre-consent, single-geography state cannot represent A/B, login, consent and regional variants.
Origin-proximity blindness. The lab fetches from datacenter infrastructure that is frequently network-adjacent to the site's origin. We have recorded lab TTFB near 1 ms — the server-response-time audit passing with a perfect score — on an origin whose real users' 75th-percentile TTFB was 1.6 seconds: double the 0.8-second guideline Google's own documentation sets for server response (web.dev, n.d. b). On that site, the number-one field bottleneck appeared nowhere in the flag list. No amount of diligence applied to the 21 flags that were present could have found the problem, because the report's silence is not visible inside the report.
Interactivity blindness. INP, the responsiveness Core Web Vital, is measurable only when interactions occur; Google's documentation notes that lab tools observing “the loading of a page without any interactions” will not report INP, and offers TBT as “a reasonable proxy metric for INP, but... not a substitute” (web.dev, n.d. a). A site failing INP in the field can present a clean lab interactivity story, and vice versa — we have recorded a simulated “Time to Interactive: 19.4 s” on a page whose real-user INP was a near-good 219 ms. When lab and field diverge like this is itself a researchable question, and we have mapped when lab actually predicts field.
Population blindness. CrUX field data itself samples only opted-in Chrome users on desktop and Android; Chrome on iOS, WebViews, and all other browsers are excluded (Chrome Developers, n.d. b). For a Safari-heavy audience, even the “ground truth” half of the report is silent about most of the audience — a limitation the adjudicator must carry into every field-anchored verdict rather than discovering once and forgetting.
Variant blindness. The lab audits one URL, once, from one place, in one state: logged out, no consent choices made (or a bot-served variant of the page entirely), no A/B assignment, one geography. Whatever real users experience across templates, regions, consent states, and sessions is aggregated invisibly into field percentiles the lab run cannot decompose. The bot-served-variant case is not hypothetical — we measured how many sites serve PageSpeed a different page than their users, and you can check your own with the free PageSpeed cloaking test.
Noise wastes the effort you spend; silence wastes the effort you don't know you should be spending. A framework that only de-noised the report would still fail its user. This is why the framework has two words in its name.
3 · The method
The unit of analysis shifts. A conventional audit examines the page and produces a second report beside Google's; the Noise & Silence audit examines Google's report about the page and produces verdicts on it — then goes looking, separately and field-first, for what the report omitted. PSI's output is neither competitor nor gospel: it is the case file. And the case file deserves respect without deference: PSI applies the same heuristics on every run — including the same wrong-for-this-site heuristics, every time. Consistency is not validity.
Every flag the instrument raises leaves the audit decided — with exactly one of the four verdicts — or, when the discriminating evidence cannot be obtained, held Unresolved with the concrete test that would decide it. Unresolved is a decision status, not a fifth verdict: the framework’s own rules (no artifact, no verdict; weak-refutation survivors stay hypotheses) forbid forcing an unknown through binary gates. The verdicts are reached in a fixed order of tests, so that any two competent adjudicators confront the same decisions in the same sequence:
Each flag runs the three gates in order; the first gate it fails decides the verdict. Pick a recurring claim and watch it move:
Pass. The bytes exist in the load-time coverage artifact.
Stop — on a combination. The tool’s own metricSavings are zero on the modeled metrics (strong evidence, never sufficient alone: the model simulates only the FCP/LCP network path), AND the intent check finds the bytes are reCAPTCHA — security-owned, interaction-path, with no declared objective the removal would move.
Not reached because Materiality already decided the case.
Trivial — decided by the zero PLUS the intent-and-objective check of Section 3c, never the zero alone. The tool’s second opinion opens the argument; the judgment layer closes it.
Read top-down: each test either exits with a verdict or passes the flag to the next. A gate that cannot be answered with obtainable evidence exits sideways instead: Unresolved, with the named test that would answer it.
Each flag runs the three gates in order; the first gate it fails decides the verdict.
metricSavings is admissible supporting evidence, never sufficient alone)
✗ no → Trivial (often refuted in the tool's own numbers)Read top-down: each test either exits with a verdict or passes the flag to the next. A gate that cannot be answered with obtainable evidence exits sideways instead: Unresolved, with the named test that would answer it.
| # | Test (in order) | If it fails | Verdict |
|---|---|---|---|
| 1 | Truth — is the claim factually correct for this site, after a documented attempt to falsify it? | Falsified by direct evidence | Wrong |
| 2 | Materiality — would fixing it plausibly move the declared objective? The default objective is the field p75 of a failing or near-threshold metric; tail percentiles, distribution shares, affected-traffic fraction and resource cost are admissible where declared. (The tool's own metricSavings is admissible supporting evidence; a comfortably green field p75 argues against p75-level materiality without settling segment or tail materiality — Trivial is always relative to the declared objective.) | True but immaterial | Trivial |
| 3 | Jurisdiction — is the fix within the site operator's control on this platform (theme, content, code, apps), or does it belong to the platform (server, edge, protocol)? | True, material, but outside operator control | Locked |
| 4 | All three passed | — | Real |
Real flags — typically a minority — are the only ones that proceed to root-cause
analysis, a platform-native fix, and an impact prediction. Wrong flags are published
with their falsifying evidence, because an unexplained dismissal teaches the reader nothing and
would not survive scrutiny. Trivial flags are, wherever possible, argued from Google's
own numbers — reading a flag's metricSavings: 0 back at it is the shortest opening
argument in the genre, the model's own confession that it found no network-path benefit; the verdict
is then completed with the intent-and-objective check of Section 3c, never rested on the zero alone. Locked flags convert wasted effort into redirected effort: the verdict names the
controllable equivalent (for a fully hosted platform, the merchant-side lever) or explicitly licenses the
reader to stop trying.
Three rules of evidence bind every verdict. First, verbatim evidence: the actual header, the actual byte count, the actual markup — a verdict with no artifact is not a verdict. Second, a documented falsification attempt: before a claim is asserted, the adjudicator records the check that could have disproved it and did not — the audit's epistemology is conjecture under attempted refutation, not accumulation of confirmations (Popper, 1959). Third, a confidence grade: findings that survive weak refutation attempts are published as hypotheses with a concrete next test, never as conclusions.
The kinship with security-operations triage is intentional and acknowledged: the SOC literature's central finding is that most dismissed alarms are “true alarms, explained by legitimate behavior” — unactionable rather than incorrect (Alahmadi, Axon and Martinovic, 2022). Trivial and Locked are the performance-audit names for exactly that category — true, yet owed no effort — and they are the two verdicts conventional web audits do not have words for.
The adjudication table compresses into two numbers, each falsifiable by re-running the same procedure.
The share of decided flags that should receive no engineering effort — the recommended-no-action share.
The binding field constraint absent from the automated flag list.
Noise Rate. For a report whose decided flags number F, of which W are Wrong, T Trivial, and L Locked:
NR = (W + T + L) / F
— the recommended-no-action share: the fraction of decided flags an adjudicated report says should receive no engineering effort. It is a per-site, per-run quantity: the same flag can be Real on one site and Trivial on the next, which is precisely why site-blind flag lists cannot be work orders. Three companion figures keep it honest. W / F is the technical false-discovery share — the flags that are factually wrong, the only component that is a false positive in the statistician's sense. The unresolved share — Unresolved ÷ (decided + unresolved) — is disclosed beside NR, giving a lower and upper bound on the true no-action rate. And a claim-weighted variant weights each flag by the tool's own estimated savings, measuring how much of the report's promised improvement evaporates under adjudication.
What F counts. The number is reproducible only if the counting rule is frozen, so here it is: F is the number of unique failed performance audit or insight IDs raised by one PSI run — one strategy, one Lighthouse version, keyed to the final URL. Passed, not-applicable, manual, informative and errored results are excluded; resource rows inside an audit are evidence within one flag, not separate flags; where Lighthouse lists a legacy audit as replaced by a newer insight, the pair counts once. Every published rate carries the Lighthouse version, strategy and collection timestamp that produced it.
NR's intellectual home is the actionability tradition of Sadowski et al. (2018), whose team measures effective false positives — “developers did not take positive action after seeing the issue” — and holds shipped checks to an effective-false-positive rate under 10%. The kinship is deliberate; the difference is disclosed just as deliberately: Sadowski's quantity is behavioral, observed from what developers did, while NR is adjudicative, an auditor's evidence-backed recommendation. The under-10% bar is the standard of the tradition NR lives in — the sting is that performance reports face no such gate at all — but an 81% NR is not the same measured quantity and is never scored against that bar as if it were.
The Silent Bottleneck. Independently of the flag list, the audit decomposes the failing field metric toward its binding constraint — the phase or factor that dominates the user-experienced number, in the critical-path sense of Wang et al. (2013) and the constraint sense of Goldratt and Cox (1984). One honesty rule governs the decomposition: an aggregate percentile can be a mixture — cohort A server-bound, cohort B discovery-bound — and CrUX's own subpart data is aggregated per-subpart, so subpart p75s indicate relative importance and do not sum to the metric. The legitimate outputs are therefore: one dominant constraint with evidence; several cohort-specific constraints; or an explicitly unresolved constraint naming the segmentation or RUM attribution that would decide it. The Silent Bottleneck is the finding that the dominant constraint (or every candidate constraint) is not in the flag list: the report's Type II error, named. Its canonical instance is the passing server-response-time audit over a 1.6-second field TTFB; its verdict-line form is one sentence: “PSI raised 21 flags — and the number-one field bottleneck appears in none of them.”
A report can be mostly noise and still miss the point; the two metrics are deliberately of opposite polarity so that neither can masquerade as the other.
Select a stage — its operational rule appears below it:
4 · Verification
Every recommendation that survives adjudication owes the reader three successively stronger tests.
Predict. State the expected movement as an arithmetic range against field data — bytes over plausible bandwidth, round trips over measured latency — never as the simulator's point estimate (Section 3b). Ranges carry confidence grades. A performance-budget calculator and a speed-to-revenue calculator turn those arithmetic ranges into budgets and dollars.
An arithmetic range with a confidence grade — never the simulator’s point estimate.
Prove. Before deployment, demonstrate the delta in a controlled lab A/B — the page with and without the change, medians of repeated runs, because single runs differ by double-digit point swings under pure variance (Section 3d).
Medians of repeated runs must clear the noise floor.
After deployment, confirm in field percentiles on the 28-day window rule — the full rule, and why a percentile may drift, hold flat and then step, is stated below the ladder.
The lab shows the step on deploy day; the field window needs full washout — and the good/needs-improvement/poor shares can move when p75 cannot.
Confirm. After deployment, confirm in field percentiles — subject to the 28-day
window rule: field data aggregates a trailing 28-day collection window (Google, n.d. a), which a
deployment's traffic replaces only gradually. But the reported number is a percentile of that
window, not an average — so p75 may drift smoothly, sit flat and then step once post-deploy traffic
crosses the percentile's share, or move while only the good/poor fractions shift. Two consequences
follow. Declaring a fix failed — or victorious — from a partially washed-out window is misreading the
instrument's clock. Collection needs 28 days to wash out — but you cannot see that window the moment it
closes: the CrUX API “is approximately two days behind today's date since it waits for completed data
for the day, and there is some processing time involved” (Chrome Developers, n.d. c). So the first
fully clean read is not a fixed calendar day; it is the first report whose
collectionPeriod.firstDate falls on or after the deploy, which in practice lands nearer
day 30 than day 28. Read the dates the instrument returns rather than
counting on your own calendar, and interim reads must name their contamination. And the distribution shares are watched alongside the headline percentile, because they
move when p75 cannot. Claiming victory from a lab re-run alone is the same misreading from the other
side: lab proof and field confirmation answer different questions, and neither substitutes for the other.
Move the slider: when does a field verdict become trustworthy? (Collection time — add ~2 days for CrUX to publish it.)
The lab can prove the immediate step today. The trailing window still holds almost entirely pre-deployment traffic, so the field cannot confirm anything yet.
Dots on or above the diagonal delivered at least what was promised.
1.00× 1.02× 1.05× 1.30× 1.32× 1.53× 1.71× 1.91× predicted saving →realized saving →The table below is an illustrative composite assembled from adjudications recorded during the framework's development; it compresses the recurring row types into one view, with audit labels preserved as recorded under the Lighthouse 12-era interface. (PSI has since moved to Lighthouse 13, which consolidates several of these audits into Insights; the verdicts attach to the underlying evidence, not the label, and every live report records the engine version it adjudicated. Individual client reports carry the full table with verbatim evidence per row.)
Only green items receive engineering effort. The missed field constraint enters the roadmap independently — it never came through the report.
The verdict distribution of the example below — only the green segment receives engineering effort.
| PSI flag | Evidence consulted | Verdict | Rationale |
|---|---|---|---|
| Reduce render-blocking resources — “save 2,330 ms” | Field p75 LCP = 2,784 ms | Real (impact recomputed) | The chain is real — but the saving is a lab-graph counterfactual, and subtracting it from the field p75 (implying a ~450 ms LCP) is arithmetic across incompatible baselines (Section 3b); honest range recomputed against field data |
| Image elements do not have explicit width and height | Lab CLS 0.122; field p75 CLS 0.00 with an essentially all-good CLS distribution | Trivial | The shift appears under cold-cache lab conditions; the field distribution — checked past p75, since a green p75 alone speaks for three of four measured views — shows no materially affected cohort. Note which gate that turns on: field CLS answers materiality, never truth. It cannot show the attributes were present, so it cannot carry Wrong; that verdict would need the element itself inspected |
| Properly size images | srcset/sizes present and correct; flag fired on 2x density at emulated DPR | Wrong | Correct responsive art direction misread as oversizing |
| Ensure text remains visible during webfont load | Icon font with font-display: block | Wrong | Blocking is the correct behavior for icon fonts; swap would flash raw ligature text |
| Reduce unused JavaScript — 909 KiB | The flag's own metricSavings: zero on the metrics modeled; bytes attributed to reCAPTCHA | Trivial | Zero modeled savings and security-owned, interaction-path code — the verdict rests on the combination (Section 3c), never on the zero alone |
| font-display — “est. savings 10 ms” | Savings an order of magnitude below single-run variance | Trivial | Below the instrument's own noise floor |
| Serve static assets with an efficient cache policy | Assets served by the platform's CDN; TTLs not merchant-controllable on this plan | Locked | True and material — and owned by the platform; effort redirected to the controllable equivalent |
And then the row that is not in the table — because it was never a flag:
Silent Bottleneck. Initial server response time: passing (lab TTFB ~1 ms from the datacenter). Field p75 TTFB: 1.6 s — double Google's 0.8 s guideline. The number-one field problem produced zero flags. It is found by decomposing the field metric, not by reading the report harder.
Aggregated to the verdict line a client sees first: “PSI raised 21 flags: 4 Real, 6 Wrong, 9 Trivial, 2 Locked — a Noise Rate of 81% — and the number-one field bottleneck (TTFB, p75 1.6 s) appears in none of them.” Adjudication compresses the roadmap: what arrived as 21 tickets of equal apparent urgency leaves as 4 fixes worth shipping, one discovered bottleneck worth escalating, and 17 documented permissions to do nothing — each carrying the evidence a stakeholder needs to believe it.
5 · Apply it
The framework is not proprietary in its mechanics — only in its depth. Here is the self-serve version, using nothing but pagespeed.web.dev, a browser, and our free tools.
The timed steps are 2–6: 5 + 5 + 10 + 5 + 2 ≈ 27 minutes. Steps 1 and 7 take as long as your PSI run and your fixes take.
What this self-serve pass cannot do — and where the professional version of the framework spends its time — is reconstruct multi-resource causal chains, attribute main-thread cost to named scripts, write the fix in your platform's own mechanism, and quantify each prediction against your stack's real constraints. The verdicts, however, are yours to reach with no invoice attached.
This worksheet runs entirely in your browser: it stores nothing and sends nothing. Add your report’s warnings, assign evidence-backed verdicts — or hold a flag Unresolved when the deciding evidence is out of reach — and it computes the Noise Rate over decided flags, with the unresolved share reported beside it, exactly as Section 5.3 defines them.
No artifact, no verdict — record the evidence beside every stamp.
What the professional audit adds: complete artifact collection, causal-chain reconstruction, named script ownership, platform-native fixes, falsification notes, confidence grades and quantified impact ranges — plus the Silent Bottleneck investigation itself. See everything the audit includes →
6 · Boundaries
It is the opposite pole from both camps of Section 1: the report is treated as a competent screening instrument used correctly — as input to diagnosis, with follow-up, exactly as screening theory has always required (Wilson and Jungner, 1968).
The framework produces verdicts about reports, not a rival number about pages. Field Core Web Vitals remain the ground truth of user experience for the population they measure (Section 9); nothing here replaces them.
Some of the evidence mechanizes cleanly (a flag's own zero savings estimate is a machine-readable fact). But the tests that matter most — intent, ownership, materiality at the margin — are judgments about what a resource is for and who controls it — context a raw analyzer does not carry. Sadowski et al. (2018) make the case that analyzer value depends on that context being supplied, whether by configuration, domain experts or workflow; here we supply it with an adjudicator rather than assume the flag arrived with it. The framework's discipline is not automation; it is rules of evidence binding the judge.
It is stated here for PSI because PSI is the screening instrument of record for the open web, but the two failure directions and the four verdicts apply unchanged to any automated performance report — a Lighthouse CI gate, a commercial scanner, an in-house dashboard.
Five limitations bound the framework's claims, and stating them is part of the method.
Two competent adjudicators can disagree at the materiality margin. The mitigation is procedural, not rhetorical: verbatim evidence, a recorded falsification attempt, and a confidence grade on every row make any disagreement inspectable — a reader can re-run the same tests against the same artifacts.
CrUX excludes iOS Chrome, WebViews, and non-Chrome browsers, and requires opt-in (Chrome Developers, n.d. b); its window is a trailing 28 days (Google, n.d. a). Field-anchored verdicts inherit these boundaries, and for Safari-heavy audiences the framework requires saying so rather than treating CrUX as the whole population. Where no field data exists at all, every user-impact claim is capped at medium confidence and labeled lab-derived.
It is not a property of the tool in general, and any aggregate published across sites must disclose its sampling frame. Our own audit base skews toward sites that suspected a problem — a selection bias any future “noise index” must carry on its face.
The framework finds the silences its decomposition looks for. It cannot certify the absence of problems that both the instrument and the auditor miss; it can only make the search for them explicit, field-first, and repeatable.
Lighthouse renames, merges, and re-scopes audits across major versions — the Lighthouse 13 engine consolidated many long-standing audits into Insights, with explicit replacement mappings — so a flag count, and with it F and the Noise Rate, is comparable only within one engine version and strategy. Every adjudication therefore records the Lighthouse version, strategy, and timestamp it judged, and any cross-version comparison deduplicates replaced audits before counting (Section 5.3).
No — the framework is field-first by construction. CrUX percentiles decide what is broken before any flag is read; the verdicts only decide which proposed work deserves effort. A site failing its field vitals leaves the audit with more urgency, not less: a named binding constraint instead of a to-do list.
Possibly neither. Half the lab score's weight sits on TBT, Speed Index, and FCP — the first two don't exist in field data at all (Section 3a). Check your field Core Web Vitals; if they are green, rule out the mundane explanations first — a fresh regression the trailing 28-day field window has not caught up with yet, or a lab run that hit a different page variant or population than your field traffic — and what remains is usually metric weighting. Either way, Google's own guidance is to treat the score as a distribution, not a grade (Chrome Developers, n.d. a).
A lab 100 is silent about INP (no interactions in the run), about your server's latency to real users (origin-proximity blindness), and about every browser CrUX excludes. Check field percentiles — including TTFB against the 0.8 s guideline — before concluding anything (Sections 4, 7).
Google's documentation says “Core Web Vitals are used by our ranking systems” — that is field data — and in the same breath that good results in reports “doesn't guarantee that your pages will rank at the top” (Google Search Central, n.d.). No Google documentation makes the lab score itself a ranking input. Chasing the score for SEO is therefore doubly misdirected: it optimizes the wrong number for an exaggerated reward.
There is no universal constant, and the framework's honesty about this is load-bearing (Section 9): NR is a per-site quantity, and our observed rates come from a self-selected population of sites that suspected problems. What we can say: in our adjudications it is common for the majority of flags to fall to Wrong, Trivial, or Locked. Screening theory predicts the direction of that skew for a sensitivity-tuned instrument — never the number, which moves with how many real problems a site actually has, how specific the instrument is on that stack, and where the auditor draws materiality. Treat any published rate, ours included, as one site's reading rather than a constant.
Partially. The evidence harvest mechanizes — a flag's own metricSavings is machine-readable (Section 3c) — and so do some truth tests. But intent and ownership are judgments about context the flag does not carry, and Sadowski et al. (2018) is a sustained argument that an analyzer is only as useful as the context and actionability around it — measured by whether developers act, not by warnings emitted. That is a design lesson, not a proof that such judgments can never be mechanized; our choice, in this framework, is to keep them human. Automate the evidence collection; never the verdict.
Real-user monitoring strengthens the field anchor and covers CrUX's excluded populations (notably iOS). It does not adjudicate the flag list — teams with excellent RUM still receive the same screening-grade reports and still burn sprints on them. The two compose: RUM sharpens what broken means; the framework decides what work means.
After any material change, and on the field data's own clock: a fix ships, the lab A/B proves it, and the field confirms it across the following 28-day window (Section 5.5). Re-adjudicating an unchanged site monthly produces no new verdicts — re-adjudicating after a platform migration, a redesign, or a new tag manager almost always does.
Noise and silence descend from the two error directions of detection theory (Neyman and Pearson, 1933), in words a site owner already owns: silence is the classical Type II miss — the report says nothing about what matters most — while noise is deliberately broader than the Type I false alarm, taking in every flag whose evidence-backed disposition is “no action”, true ones included. Verdict — rather than “finding” or “recommendation” — because a verdict closes a case: every flag leaves with a verdict, or with Unresolved and the named test that would decide it; none is left ambient to become next quarter's wasted sprint. The debts are acknowledged deliberately: screening medicine contributed the stance, signal detection the error structure, alarm-fatigue research the cost of ignoring it, and Google's own static-analysis program the standard — actionability, not technical correctness — by which flags deserve to be judged. What is new is where the instrument points: the audit of the report about the page.
Every audit we deliver is this framework executed end to end: every flag adjudicated, both metrics computed, every surviving fix predicted, proven, and confirmed on the field data's own clock.
Every PageSpeed flag adjudicated with evidence, the Silent Bottleneck hunted in your field data, and every surviving fix predicted, proven and confirmed.
collectionPeriod carries the window's firstDate and lastDate. Available at: developer.chrome.com (Accessed: 31 August 2026).Free 5-day email course
You've just read the method. The course drills it — one short email a day, each teaching one move on the worked example above:
The course lives in email only — it isn't published anywhere on the site.