advanced

Benchmark pitfalls

Avoid misleading results from warmup effects, unrealistic data, coordinated omission, caching artifacts, averages, and noisy environments.

Benchmarks lie easily. Common traps: cold JVM/Node warmup ignored, unrealistic data, coordinated omission, caching artifacts, comparing averages only, noisy shared CI machines, and micro-benchmarks that do not reflect system behavior.

| Pitfall | Effect | |---------|--------| | No warmup | First runs skew results | | Tiny dataset | Everything fits L1 cache | | Coordinated omission | Tool waits for slow responses, hides tail latency | | Average only | p99 disaster invisible | | Optimizing the loop | V8 dead-code elimination on unused results |

					// Benchmark hygiene: warmup + multiple iterations
for (let i = 0; i < 50; i++) run();
const samples = [];
for (let i = 0; i < 200; i++) samples.push(time(run));
reportPercentiles(samples);
				

Prefer **production-like** workloads and A/B deploys with field metrics over localhost micro-benchmark wins. When using `benchmark.js` or similar, prevent optimization from deleting work.

On interviews: coordinated omission explained; why p95/p99 matter; regression in lab but not field (or reverse); statistical significance with variance.

Common pitfalls: declaring victory from one Lighthouse run; benchmarking dev mode bundles; comparing different hardware without normalization.

The trade-off is fast local feedback versus trustworthy conclusions that survive production.

Checklist:

  • Warm up; report percentiles.
  • Use realistic data sizes.
  • Cross-check with traces and RUM.
  • Skeptically review micro-benchmark wins.