The Framework

Noise & Silence

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

The framework in one view

Abstract

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.

The Noise & Silence framework on one card

The Noise and Silence framework on one card: premise, method, evidence rules, outputs and discipline
PremiseAn 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”.
MethodThe 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 rulesEvery verdict carries (1) a verbatim artifact, (2) a documented falsification attempt, (3) a confidence grade. No artifact, no verdict.
OutputsNoise 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.
DisciplineEvery surviving fix must predict (arithmetic range against field data), prove (repeated-run lab A/B), and confirm (field percentiles, on the 28-day clock).

1. Two wrong responses to the same report

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.

2. Foundations: screening instruments and their two errors

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

3. The instrument: where the noise comes from

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.

Six recurring PageSpeed noise mechanisms: what misleads the team, the best falsifying evidence, and the likely verdict
Failure mechanismWhat misleads the teamBest falsifying evidenceLikely verdict
Metric mismatchA 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 overreachSimulated 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 flagA 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 varianceOne synthetic before/after pair is mistaken for causal proof.Repeated-run distributions, confidence interval, noise floor.Inconclusive
Intent blindnessInteraction, consent, security or revenue code is labeled “unused”.Ownership, execution path, and what the resource is for.Wrong / Locked
Environment mismatchCold 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
Flag’s promised saving
Entire real-user LCP

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

(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

(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 — as evidence, never as a verdict

(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

(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.

73 same URL
minutes apart
no deploy
55 18 points of pure run-to-run noise
(e) The lab cannot know intent

(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

(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).

4. The silence: what the report cannot say

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.

01

Origin-proximity blindness

The lab can sit network-adjacent to the origin while real users cross continents. Evidence: field or RUM TTFB.

02

Interactivity blindness

A load-only run cannot report INP; TBT is a proxy, not a substitute. Evidence: field INP.

03

Population blindness

CrUX samples opted-in Chrome users; iOS Chrome, WebViews and other browsers are excluded. Evidence: audience-specific RUM.

04

Variant blindness

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

5. The framework

5.1 The stance: audit the report

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.

5.2 The Four Verdicts

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:

Claim under adjudicationReduce unused JavaScript — 909 KiB
1

Truth

Pass. The bytes exist in the load-time coverage artifact.

2

Materiality

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.

3

Jurisdiction

Not reached because Materiality already decided the case.

Trivial

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.

The three gates, in the framework’s own words

Each flag runs the three gates in order; the first gate it fails decides the verdict.

  1. 1 · Truth — factually correct for this site, after a documented attempt to falsify it? ✗ no → Wrong (publish the falsifying evidence)
  2. 2 · Materiality — would the fix move the declared objective? By default: a field metric failing or near threshold at p75 — with distribution shares, tail percentiles from first-party RUM, affected-traffic fraction, and data/CPU cost admissible where the engagement declares them. (the tool's own metricSavings is admissible supporting evidence, never sufficient alone) ✗ no → Trivial (often refuted in the tool's own numbers)
  3. 3 · Jurisdiction — is the lever inside the site operator's control on this platform? ✗ no → Locked (name the controllable equivalent)
  4. Passes all three → Real root cause → platform-native fix → predict, prove, confirm

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.

The three tests applied in order — truth, materiality, jurisdiction — and the verdict produced when each fails
#Test (in order)If it failsVerdict
1Truth — is the claim factually correct for this site, after a documented attempt to falsify it?Falsified by direct evidenceWrong
2Materiality — 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 immaterialTrivial
3Jurisdiction — 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 controlLocked
4All three passedReal

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.

5.3 The two metrics

The adjudication table compresses into two numbers, each falsifiable by re-running the same procedure.

Noise Rate

The share of decided flags that should receive no engineering effort — the recommended-no-action share.

Silent Bottleneck

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.

5.4 The procedure

Select a stage — its operational rule appears below it:

Resolve the subject. Follow redirects to the final URL; confirm the fetched page is what users receive (bot walls, geo variants, consent walls disqualify the evidence). Every downstream claim is keyed to the final URL.
Collect the case file. One PSI run per strategy (mobile first), capturing the lab audit list, the tool's own per-flag savings estimates, and CrUX field percentiles at page and origin level.
Anchor on field truth. Field 75th-percentile LCP/INP/CLS decide what is broken. If no field data exists, say so and cap every user-impact claim's confidence accordingly.
Adjudicate every flag through the four tests of Section 5.2, with evidence, falsification note, and confidence on each row. No flag may be omitted: an unadjudicated flag is future noise. A flag whose discriminating evidence cannot be obtained is recorded Unresolved with its deciding test — the one exit that is not a verdict.
Hunt the silence. Decompose the failing field metric toward its binding constraint — one dominant, several cohort-specific, or explicitly unresolved, as Section 5.3 allows — and check the result against the flag list. Divergence between lab and field on any metric is itself evidence about where the silence lies.
Compute and report the Noise Rate over decided flags, the unresolved share beside it, and any Silent Bottleneck alongside the verdict table.
Carry only Real flags and silent findings forward into root causes, platform-native fixes, and predicted impact ranges.

4 · Verification

5.5 The verification ladder: predict, prove, confirm

Every recommendation that survives adjudication owes the reader three successively stronger tests.

Forecast1

Predict

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.

Controlled evidence2

Prove

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.

User evidence3

Confirm

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.

Prove with the tool that operationalizes this stage. The Fix Simulator applies a client-side change, repeats the measurement, and compares PSI’s claimed saving with what was measured after the change.
Open the Fix Simulator →

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.

The 28-day clock, day by day

Move the slider: when does a field verdict become trustworthy? (Collection time — add ~2 days for CrUX to publish it.)

too early to judge the window still mixes old traffic deploy +28 days ✓ judge from here field p75 (lower = better)
Day 071421Day 28
0

Deployment just happened

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.

Window mechanics, not data: the trailing 28-day window mixes pre- and post-deploy traffic until day 28 of collection — and CrUX publishes about two days behind, so the clean window is normally visible around day 30. The p75 of that mixture may drift like the line drawn — or hold flat and then step once new traffic crosses the percentile — so the safe read is after full washout, with all three bin shares watched throughout. (The lab, by contrast, shows the step the day you deploy — that is what Prove is for.)

Predicted versus realized saving · n = 8

Each dot: one measured fix from the calibration pilot — what it delivered, as a share of what was promised. All 8 at or above 100%. Eight cases are a pilot, not a universal coefficient.

6. A worked example

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.)

The verdict distribution of the example below — only the green segment receives engineering effort.

Worked example: seven PageSpeed Insights flags adjudicated with the evidence consulted, the verdict and the rationale
PSI flagEvidence consultedVerdictRationale
Reduce render-blocking resources — “save 2,330 ms”Field p75 LCP = 2,784 msReal (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 heightLab CLS 0.122; field p75 CLS 0.00 with an essentially all-good CLS distributionTrivialThe 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 imagessrcset/sizes present and correct; flag fired on 2x density at emulated DPRWrongCorrect responsive art direction misread as oversizing
Ensure text remains visible during webfont loadIcon font with font-display: blockWrongBlocking is the correct behavior for icon fonts; swap would flash raw ligature text
Reduce unused JavaScript — 909 KiBThe flag's own metricSavings: zero on the metrics modeled; bytes attributed to reCAPTCHATrivialZero 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 varianceTrivialBelow the instrument's own noise floor
Serve static assets with an efficient cache policyAssets served by the platform's CDN; TTLs not merchant-controllable on this planLockedTrue 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

7. Run it yourself in under 30 minutes

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.

Apply the Four Verdicts to your own warning list

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.

Flag adjudication

No artifact, no verdict — record the evidence beside every stamp.

4 flags

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

8. What the framework is not

It is not “ignore PageSpeed Insights.”

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).

It is not a new score.

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.

It is not fully automatable.

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 not vendor-specific.

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.

9. Limitations

Five limitations bound the framework's claims, and stating them is part of the method.

Verdicts are judgments

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.

Field truth is itself sampled

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.

Noise Rate is a per-site, per-run quantity

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.

Silence detection is bounded by the auditor

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.

The instrument itself is versioned

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).

10. Questions we are asked

Is this just a sophisticated way to defend a slow site?

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.

My score is red but the site feels fast. Which is wrong?

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).

My score is 100 — am I done?

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).

Does the PageSpeed score affect my Google rankings?

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.

What Noise Rate should I expect?

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.

Can I automate the Four Verdicts?

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.

We have RUM — do we still need this?

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.

How often should this run?

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.

11. Why these names

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.

Turn the warning list into a defensible roadmap.

Every PageSpeed flag adjudicated with evidence, the Silent Bottleneck hunted in your field data, and every surviving fix predicted, proven and confirmed.

References

References · 25 sources, links verified
  1. Alahmadi, B.A., Axon, L. and Martinovic, I. (2022) ‘99% false positives: a qualitative study of SOC analysts' perspectives on security alarms’, Proceedings of the 31st USENIX Security Symposium. Boston, MA: USENIX Association. Available at: usenix.org (Accessed: 19 July 2026).
  2. Altman, D.G. and Bland, J.M. (1994) ‘Statistics Notes: Diagnostic tests 2: predictive values’, BMJ, 309(6947), p. 102. Available at: doi.org (Accessed: 20 July 2026).
  3. Chrome Developers (n.d. a) Lighthouse performance scoring. Available at: developer.chrome.com (Accessed: 19 July 2026).
  4. Chrome Developers (n.d. b) Chrome UX Report: methodology. Available at: developer.chrome.com (Accessed: 19 July 2026).
  5. Chrome Developers (n.d. c) CrUX API — “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 before it is available in the API”; the response's collectionPeriod carries the window's firstDate and lastDate. Available at: developer.chrome.com (Accessed: 31 August 2026).
  6. Deloitte (2020) Milliseconds make millions: a study on how improvements in mobile site speed positively affect a brand's bottom line. Available at: thinkwithgoogle.com (Accessed: 19 July 2026).
  7. Goldratt, E.M. and Cox, J. (1984) The goal: a process of ongoing improvement. Great Barrington, MA: North River Press.
  8. Google (n.d. a) About PageSpeed Insights. Available at: developers.google.com (Accessed: 19 July 2026).
  9. Google (n.d. b) PageSpeed Insights API: pagespeedapi method reference. Available at: googleapis.github.io (Accessed: 19 July 2026).
  10. Google Search Central (2023) Introducing INP to Core Web Vitals. Available at: developers.google.com (Accessed: 19 July 2026).
  11. Google Search Central (n.d.) Understanding page experience in Google Search results. Available at: developers.google.com (Accessed: 19 July 2026).
  12. GoogleChrome Lighthouse (n.d.) Lantern [design documentation]. Available at: github.com (Accessed: 19 July 2026).
  13. Green, D.M. and Swets, J.A. (1966) Signal detection theory and psychophysics. New York: Wiley.
  14. Heckman, S. and Williams, L. (2011) ‘A systematic literature review of actionable alert identification techniques for automated static code analysis’, Information and Software Technology, 53(4). Available at: doi.org (Accessed: 20 July 2026).
  15. HelpfulCrowd (n.d.) Why Google PageSpeed Insights don't reflect reality. Available at: helpfulcrowd.com (Accessed: 19 July 2026).
  16. Jariyal, H., Rasam, P., Humaira and Grogg, A.T. (2025) ‘Performance’, in The 2025 Web Almanac. HTTP Archive. Available at: almanac.httparchive.org (Accessed: 19 July 2026).
  17. Johnson, B., Song, Y., Murphy-Hill, E. and Bowdidge, R. (2013) ‘Why don't software developers use static analysis tools to find bugs?’, Proceedings of the 35th International Conference on Software Engineering (ICSE '13). San Francisco, CA: IEEE. Available at: doi.org (Accessed: 20 July 2026).
  18. Lyrical Host (n.d.) Why you should ignore Google PageSpeed Insights. Available at: lyricalhost.com (Accessed: 19 July 2026).
  19. Neyman, J. and Pearson, E.S. (1933) ‘On the problem of the most efficient tests of statistical hypotheses’, Philosophical Transactions of the Royal Society of London, Series A, 231, pp. 289–337. Available at: doi.org (Accessed: 20 July 2026).
  20. Popper, K.R. (1959) The logic of scientific discovery. London: Hutchinson.
  21. Sadowski, C., Aftandilian, E., Eagle, A., Miller-Cushon, L. and Jaspan, C. (2018) ‘Lessons from building static analysis tools at Google’, Communications of the ACM, 61(4), pp. 58–66. Available at: doi.org (Accessed: 20 July 2026).
  22. Sendelbach, S. and Funk, M. (2013) ‘Alarm fatigue: a patient safety concern’, AACN Advanced Critical Care, 24(4), pp. 378–386. Available at: doi.org (Accessed: 20 July 2026).
  23. Wang, X.S., Balasubramanian, A., Krishnamurthy, A. and Wetherall, D. (2013) ‘Demystifying page load performance with WProf’, Proceedings of the 10th USENIX Symposium on Networked Systems Design and Implementation (NSDI '13). Lombard, IL: USENIX Association. Available at: usenix.org (Accessed: 20 July 2026).
  24. web.dev (n.d. a) Interaction to Next Paint (INP). Available at: web.dev (Accessed: 19 July 2026).
  25. web.dev (n.d. b) Time to First Byte (TTFB). Available at: web.dev (Accessed: 19 July 2026).
  26. Wilson, J.M.G. and Jungner, G. (1968) Principles and practice of screening for disease. Public Health Papers No. 34. Geneva: World Health Organization. Available at: iris.who.int (Accessed: 20 July 2026).

Free 5-day email course

Read your PageSpeed report like an auditor

You've just read the method. The course drills it — one short email a day, each teaching one move on the worked example above:

  1. Day 1The 81% problem — 21 representative flags from real adjudications, and why only 4 deserved effort.
  2. Day 2The four verdicts — Real, Wrong, Trivial, Locked — and the test each flag must pass.
  3. Day 3Falsifying a flag — three places the disproof hides, starting with the tool's own numbers.
  4. Day 4Hearing the silence — the five-minute field-vs-lab drill that outranks every flag.
  5. Day 5Predict, prove, confirm — the sample-size math and the 28-day rule that make a fix provable.

The course lives in email only — it isn't published anywhere on the site.

Double opt-in: we email a confirmation link first. Five emails, then it stops — unsubscribe any time.