08 Jan 2026 - 1 min read
Performance budgets only work when they are tied to release criteria.
We set a hard budget for JavaScript, image weight, and layout shift. Any change over budget required a visible tradeoff note in the pull request.
Budget checks
- JavaScript budget: route-level client bundle under 170 KB compressed.
- Image budget: hero image under 180 KB and all thumbnails under 60 KB.
- Runtime budget: interaction-ready in under 2.5 seconds on mid-range mobile.
By making performance a product metric, not just an engineering metric, it stayed healthy over time.
