The AONE Handbook
Performance
Latency budgets, PostgreSQL under load, and measuring what users on mid-range devices actually experience.
Latency budgets that hold under loadHow to decompose a response-time target into per-service budgets, find the work that actually costs you, and stop a slow dependency taking the system down with it.11 min readPostgreSQL under loadIndexes that earn their write cost, reading a plan properly, pool sizing arithmetic, and the lock contention that only appears at peak.12 min readMeasuring performance where your users areLab scores and field data disagree for structural reasons. What to collect from real sessions, how to sample it, and how to hold a build to a budget.9 min readINP optimisationInteraction to Next Paint measures the tap that felt stuck. Its three phases, why React sites fail the middle one, and how to fix each.11 min readCLS preventionThe five causes of layout shift, the font metric override that fixes most of it, and how to attribute a shift to the element that caused it.9 min readTTFB optimisationTime to First Byte is five separate costs in one number. How to decompose it with Server-Timing, and what to do about each part.10 min readFID is retired — what replaced it, and what to doFID was removed from Core Web Vitals in March 2024. Why it flattered almost every site, and how to migrate a dashboard or a contract that still names it.6 min readThe HTML document requestEverything the browser can do depends on the first response. Document size, the SSR payload nobody measures, priority hints, and what to preload.10 min readImage optimisationFormat, sizing, priority and lazy loading — with the decisions that matter on mid-range Android handsets and metered connections.9 min readCSS, fonts and static assetsThe render-blocking chain nobody audits: stylesheet size and splitting, self-hosted fonts with matched fallbacks, and cache headers that survive a deploy.9 min readBundle sizeReading the analyser properly, the dependencies that quietly dominate a bundle, splitting that helps rather than fragments, and holding the size in CI.10 min read