Skip to content

Part 4 of 7 · Page speed watcher series ~5 min read

How a performance budget is set

The last post argued against fixed thresholds and this one is about the place they belong. A regression is a relative question — is this worse than it was? A budget is an absolute one — is this acceptable at all? Both are worth asking and they are not the same question.

Key takeaways

  • Budget bytes and requests, which you control, rather than seconds, which you influence.
  • A budget is per page, because a pricing page and an interactive tool are not comparable.
  • Breaching a budget is a monthly conversation, not an alarm and never a gate.
  • Set the initial budget from where the page is now, plus a little.
  • A page that has been over budget for six months has a wrong budget or a real problem.

Bytes, not seconds

Seconds depend on the device, the network, the CDN’s mood and three other companies. Bytes and request counts depend on what you shipped. Budgeting the second kind gives you a number that is stable, attributable, and actionable by the person who caused it.

BudgetTypical for a content pageWhy this one
Total transferred800 KBThe single best proxy for how a page feels on a phone
JavaScript180 KBThe most expensive bytes; parsing costs more than downloading
Images400 KBThe easiest to blow accidentally through a CMS
Fonts100 KBTwo weights, subset. Four weights is a decision.
Requests45Catches the thing byte budgets miss: dozens of tiny files
Third-party bytes150 KBSeparated, because it is somebody else’s decision

Separating third-party bytes is the row that produces the most useful conversations. A page that is over its total budget entirely because of a chat widget is not an engineering problem, and presenting it as one wastes everybody’s time.

Setting the first one

How an initial performance budget is set for a pageA vertical chain of five steps entered by a box labelled A page with no budget, and three weeks of data. Step one asks where it is now, using the median bytes over twenty-one runs. Step two asks whether that is acceptable, which a person decides; if not it exits to Set below current, which is a stated intention. Step three sets the budget at current plus ten per cent, giving room to work but not to drift. Step four reviews quarterly against the actuals. Step five is a budget that means something. A note says a budget set from an aspiration rather than a measurement is over on day one.AWS ACCOUNTA page with no budgetand three weeks of dataWhere is it now?median bytes, 21 runsIs that acceptable?a person decidesSet below currenta stated intentionnoSet at current + 10%room to work, not to driftReview quarterlywith the actualsA budgetthat means somethingA budget set from an aspiration rather than a measurement is over on day one.
Fig 1. How a budget gets its first number. Starting from where the page actually is means the budget is meaningful immediately rather than being a permanently breached aspiration.
  • Machine learning
  • Analytics
  • Front-end & mobile
  • People

Current plus ten per cent

A budget set at an aspirational number is breached from the moment it is created, which makes it useless: everything is over budget, so being over budget carries no information. A budget set slightly above where the page actually is tells you the moment something meaningfully changes, which is what a budget is for.

If the current state is genuinely unacceptable, setting the budget below it is a legitimate choice — but then it is a stated intention with a person attached, recorded as such, rather than a permanent red mark that everybody stops seeing.

What a breach does

How a performance budget breach is handledA horizontal row of five boxes. Over budget: on one run. Recorded: rather than alarmed. Still over: a week later. In the monthly: with what pushed it over. A conversation: rather than a gate. A note says gating a deploy on a byte budget produces a bypass flag within a month.A BUDGET BREACH IS A PROMPTOver budgetone runRecordednot alarmedStill overa week laterIn the monthlywith what pushed it overA conversationnot a gateGating a deploy on a byte budget produces a bypass flag within a month.
Fig 2. What happens when a budget is exceeded. Deliberately less than an alarm, because a byte budget is a planning tool rather than a correctness check.
  • Management
  • Analytics
  • People

The temptation to gate is strong and the reasoning is sound — a budget you can exceed freely is not much of a budget. In practice, gating produces one of two outcomes: the budget is set loose enough to never fire, or it fires on a legitimate change at a bad moment and somebody adds a way to skip it. Neither is better than a monthly conversation with the numbers in front of it.

A permanently breached budget

A page that has been over budget every day for six months is telling you something, and it is one of two things: the budget was wrong, or there is a real problem nobody has prioritised. Both are worth resolving, and the resolution is either an edit or a piece of work — not another six months of a red row.

The quarterly review exists mostly to force that: any budget breached in more than half the runs of a quarter is raised explicitly with the question of which of the two it is.

Next: what the report says.

All posts