A website performance budget is a set of measurable limits your team agrees never to cross, covering load times, file sizes, and quality scores. It exists to catch regressions before they reach users, not after complaints roll in.
TL;DR:
- Setting a mobile-based performance budget of under 200 KB for JavaScript and a 2.5-second LCP at p75 ensures most visitors have a fast experience on variable networks.
- Only including timing (LCP, INP), quantity (file sizes), and rule-based (performance scores) metrics improves enforceability and tracks regressions effectively across different page types.
- Starting with a small number of core budgets and expanding once teams can enforce them creates sustainable performance discipline and prevents silent debt accumulation.
- Enforcing budgets through build-time checks, CI audits, and real user monitoring ensures issues are caught early, preventing slowdowns from reaching actual users.
- Regularly reviewing budgets every quarter and documenting exceptions prevent outdated or unrealistic targets from degrading performance standards over time.
Table of Contents
- Why a performance budget matters to product teams
- Which metrics belong in your budget
- How to set your first budget numbers
- Building enforcement into your build and CI pipeline
- Keeping budgets alive: monitoring and lifecycle
- What agency work on speed budgets actually looks like
- The case for making some budgets non-negotiable
- How Kukoocreative helps you turn a budget breach into a fix
- Where to go deeper on performance budgets
- Sources
- FAQ
Why a performance budget matters to product teams
Speed is not a technical nicety tucked away in engineering standups. It shapes whether visitors convert, whether they come back, and whether your brand feels trustworthy the moment a page loads. A performance budget turns that abstract concern into a number everyone can see and argue about at the right time, which is before a feature ships rather than after.
The real value is organisational, not just technical. Once a budget exists, a designer proposing a new hero carousel and an engineer adding a tracking script are working against the same constraint. Nobody gets to add weight to a page for free; every addition has to justify its cost against the budget. That single shift, from “does this look good” to “does this fit our budget”, is what stops performance debt building up silently over a dozen small decisions.
Mobile is where this discipline pays off fastest. Mobile devices account for more than half of global web traffic, which means a budget calibrated to a fast desktop connection is measuring the wrong reality for most visitors.
Why this matters for the business, not just the build:
- Slow pages lose visitors before they see your offer, especially on mobile networks with variable speed.
- Budgets create a shared vocabulary between product, design, and engineering, so trade-offs get discussed early instead of discovered in production.
- A documented budget gives you a concrete artefact to point to when a stakeholder asks for “just one more” animation or script.
Statistic callout: With mobile devices driving over half of all site visits, setting your baseline budget against a mobile connection, not a fibre desktop line, is the only way the number reflects what most visitors actually experience.
Which metrics belong in your budget
Not every metric deserves a place in your budget. The strongest budgets mix three distinct types, each catching a different kind of regression, and each meaningful for different page archetypes.
Timing metrics track what users actually feel. Largest Contentful Paint (LCP) measures when the main content appears; First Contentful Paint (FCP) measures the first pixel painted; Interaction to Next Paint (INP) measures how snappy the page feels once someone starts clicking or tapping. All three should be monitored at the 75th percentile (p75), not the average, because averages hide the slow experiences your worst-connected visitors have every day.
Quantity metrics are easier to enforce because they are static and checkable at build time:
- Total JavaScript size, gzipped, for the critical path
- Image weight per page, ideally with a per-image ceiling too
- Number of web fonts loaded (each one is a render-blocking request if not handled carefully)
- Total request count, since each request carries connection overhead
Rule-based metrics come from scoring tools rather than raw measurements. A Lighthouse performance score gives you a single number stakeholders understand instantly, while WebPageTest waterfall reports show exactly which resource caused a slowdown.
Page archetype matters more than most teams admit. A product listing page with dozens of images needs a tight image budget but can tolerate slightly more JavaScript for filtering logic. A checkout flow needs an aggressive INP budget because every extra tap delay costs revenue directly. A blog article can run leaner on JavaScript entirely. Median page weight across the web keeps climbing, so aiming below the median, rather than merely “average,” is the only way a budget keeps you ahead rather than just keeping up.
Following the official guidance on performance budgets, the three categories above (timing, quantity, rule-based) map cleanly onto how most tooling actually enforces limits, which makes the next step, setting numbers, far more concrete.
How to set your first budget numbers
Start narrow. Trying to budget fifteen metrics on day one guarantees nobody enforces any of them properly, so pick a small set and expand once the habit sticks.
- Choose two to four page archetypes that cover the journeys that matter most: your homepage, a product or listing page, and your checkout or lead-capture form are a common starting trio.
- Measure your current baseline honestly, using a lab tool on a throttled mobile profile, not your office Wi-Fi.
- Set the initial budget 10 to 20% above that baseline, not against an aspirational number pulled from a case study. A budget nobody can meet gets ignored within a week.
- Assign an owner to each budget line so a breach has a named person responsible for triage, not a vague “the team” that nobody follows up with.
- Define two levels for every budget: a warning threshold that flags a concern without blocking anything, and an error threshold that blocks a deployment because the impact is real.
Concrete starting numbers that hold up across most content sites and small to mid-sized commerce pages:
| Metric | Suggested starting budget |
|---|---|
| JavaScript, gzipped (mobile, critical path) | Under 200 KB |
| LCP at p75 | Under 2.5 seconds |
| Total critical-path resources | Around 200 KB |
| Lighthouse performance score | 85 or above (warning below 85) |
These figures come from practical guidance on setting achievable performance budgets, which recommends starting close to your measured baseline rather than an idealised target, then tightening the number in future review cycles once the team is consistently hitting it.
Pro Tip: Write your exception process before you need it. A one-page rule that says “an error-level breach needs sign-off from the budget owner and expires in 30 days” stops a single urgent release from quietly becoming the new normal.
Building enforcement into your build and CI pipeline
A budget written in a document gets ignored within a sprint. A budget enforced by tooling gets respected because it blocks work automatically, which is the entire point of having one.
The enforcement stack works in layers, each catching problems the previous layer missed.
Build-time checks come first. Tools like bundlesize or size-limit run as part of your local or CI build and fail immediately if a JavaScript bundle exceeds its budget. Webpack goes further with built-in performance hints that can be set to warn or to hard-error when an asset or entry point crosses a configured size threshold, catching a bloated dependency before it even reaches a pull request.
CI enforcement comes next. Lighthouse CI runs a full audit against every pull request and can fail the build if the performance score drops below a set threshold. Teams also use Sitespeed.io inside CI pipelines to run detailed timing checks and post results directly back to the pull request. A well-known pattern documented by CircleCI’s guide to enforcing budgets in CI/CD combines Sitespeed.io with a Slack webhook, so a breach posts straight into a team channel instead of sitting buried in a build log nobody reads until release day.
Production monitoring is the final layer, and it is the one teams skip most often to their own cost. Real User Monitoring (RUM) captures what actual visitors experience across every device and connection, which lab tools running from a single test location cannot replicate. Tracking p75 Core Web Vitals from RUM data catches regressions that only show up under real network conditions or on devices your test suite never covers.
A workable end-to-end flow looks like this:
- A developer runs a local build check before pushing, catching obvious bundle bloat immediately.
- The pull request triggers a CI job (Lighthouse CI or Sitespeed.io) that either fails the build on an error-level breach or adds a warning comment for a soft breach.
- CI artefacts, waterfall charts, and score history get attached to the PR so reviewers see the trend, not just a pass or fail.
- Once merged and deployed, RUM data validates that the change behaves the same for real users as it did in the lab.
Combining synthetic checks with field data, rather than trusting either alone, is the approach SpeedCurve’s guide to performance budgets recommends, and it is the difference between a budget that looks good in CI and one that actually protects the experience once real traffic hits the page.
Pro Tip: Route your CI failure messages to the same Slack channel your team already checks for deploy notifications. A budget alert lost in a channel nobody watches is functionally the same as no alert at all.
Keeping budgets alive: monitoring and lifecycle
A budget set once and never revisited decays into decoration within two quarters. The pages you budgeted for change, traffic patterns shift, and a number that was ambitious a year ago might now be trivially easy, or quietly impossible.
Three data sources each do a different job, and none of them replaces the others:
- Lab checks (Lighthouse, WebPageTest) give you consistent, repeatable numbers for comparing builds against each other.
- CI artefacts give you a historical trail showing exactly which pull request introduced a regression.
- RUM data tells you what is actually happening to real visitors, which is the number that ultimately matters to the business.
Slice your RUM data by release, device class, and geography before drawing conclusions. A regression that looks minor in an aggregate p75 figure can be severe for visitors on older Android devices or slower mobile networks in a specific region, and averaging that away hides exactly the users a budget is meant to protect.
Exceptions will happen, and pretending otherwise just drives them underground. Document every exception with three fields: who approved it, why it was necessary, and when it expires. A 30-day expiry forces a revisit rather than letting a temporary compromise calcify into the accepted baseline.

Review your budgets on a quarterly cadence. If a team consistently beats a budget by a wide margin, tighten it. If a budget gets breached every release and the exception process is being used as a workaround rather than a genuine safety valve, that is a sign the number was unrealistic from the start, not that the team is failing.
What agency work on speed budgets actually looks like
Turning a breached budget into a fix is a scoping exercise as much as a technical one. An agency reviewing a client site typically starts with a lab audit against agreed archetypes, isolates the specific assets or scripts pushing the page over budget, then quotes the remediation as a defined task rather than an open-ended retainer.
Pricing for this kind of focused work sits well below a full redesign; UK website redesign budgets run considerably higher than a targeted speed fix precisely because a redesign touches everything, while a budget breach usually traces back to a handful of oversized assets or a rogue third-party script.
The case for making some budgets non-negotiable
Not every budget deserves blocking power from day one. Decide by weighing conversion risk, how often you release, and whether your team has the capacity to triage breaches without grinding delivery to a halt.
Start by making only a small set of budgets error-level: JavaScript size, LCP at p75, and your Lighthouse score. Leave everything else as warning-level until the team proves it can act on those three consistently. Before flipping any budget from advisory to blocking, ask whether a breach genuinely threatens conversion, whether someone is actually named to respond to it, and whether your release cadence allows a quick fix without derailing the sprint.
— Kukoo
How Kukoocreative helps you turn a budget breach into a fix
An agency is the alternative to guessing at which script or image is slowing your site down: it scopes and prices the fix as a defined task, not an open-ended retainer. If a page has quietly drifted past its budget, the £25 Website Speed Improvement is a low-cost way to get a specific fix scoped and delivered without committing to a full engagement first.

For teams that need budgets enforced continuously rather than checked once, our Fix, Steady, Secure and Scale plans build ongoing monitoring and maintenance into a single relationship, so regressions get caught before a customer notices. If your site needs more than a speed fix, browse our full range of web design and development services to see how a rebuild or redesign might be scoped around the same performance standards. Get in touch to request a scoped speed audit and see exactly what a fix would involve before committing to anything.
Where to go deeper on performance budgets
- MDN’s guide to performance budgets for definitions and enforcement patterns
- WebPageTest for lab timing and waterfall analysis
- For broader KPI strategy beyond speed alone, Baby Love Growth’s guide to measuring website success covers the wider metric set worth tracking
Sources
FAQ
What is a performance budget?
A performance budget is a set of measurable limits, covering load times, file sizes, and quality scores, that your team agrees never to cross without sign-off. Its purpose, per MDN’s guidance, is to prevent regressions before they reach real users rather than reacting to complaints afterwards.
How can I measure the performance of my website?
Combine lab tools like Lighthouse and WebPageTest for repeatable, controlled testing with Real User Monitoring (RUM) to see what actual visitors experience. Lab checks catch issues before release; RUM confirms the fix worked once traffic hits the page in the real world.
What are the top three website performance metrics to monitor?
Largest Contentful Paint (LCP), Interaction to Next Paint (INP), and total JavaScript size for the critical path cover the three metric types that matter most: timing, quantity, and rule-based scoring. Monitor timing metrics at the 75th percentile (p75), not the average, since averages hide your slowest, worst-connected visitors.
What is a good budgeting website?
A workable starting budget sits close to your current baseline: under 200 KB of gzipped JavaScript on mobile, LCP under 2.5 seconds at p75, and a Lighthouse score of 85 or above. These figures follow practical starting-point guidance from web.dev, which recommends setting numbers achievable now and tightening them incrementally.
How much does a website speed fix cost with Kukoocreative?
Kukoocreative’s £25 Website Speed Improvement is a fixed-price entry point for a scoped fix. Ongoing enforcement runs through the Fix, Steady, Secure, and Scale plans, where current pricing is available on request via the site.