A budget must be bound to a specific device and network
Aliases: budget on a profile · device-class budget · network-conditioned budget
What it is
“Make the page fast” is not a budget until it has a measurement environment. A budget is a cap with units, pinned to a device class and a network: mid-range Android, 4G, cold start, script under this many kilobytes, or a named paint under this many seconds. The same bytes are not the same number on an office laptop and on an old phone on cellular.
What is bound is a measurement profile, not a slogan persona. The profile has to be reproducible: a device band or lab image, downlink and latency, cache warm or cold. Missing those, the number cannot be run a second time and compared.
Why it happens
Time and bytes are measured on a machine, on a link. A lab laptop, wired ethernet, and a warm cache hide cost that reappears on the audience’s link. Unbound, each person reports “fast enough” from their own box; the numbers cannot be compared and an overage cannot be judged. Bound, over budget means “this profile was crossed,” not “whose computer is slower.”
The same script can sit well under the cap on fiber desktop and already over on the target profile. The point of a budget is to put the ruler on that worse, actually occurring profile, not on whatever the developer happens to be using. Without the environment that gives the ruler its ticks, the cap is a sticky note.
Where it stops holding
Internal tools known to open only on specific office machines can use those machines as the profile; they need not pretend to be global 4G. When the audience is unknown, pick an agreed poorer percentile from live device mix, not a museum-piece worst phone that would freeze shipping. Server-only latency still needs a network assumption (which RTT band); an intranet number does not travel to users. Offline, preinstalled, and store binary size are a different volume profile and must not be merged with first-load on the network. A one-off demo off the product pipeline can skip a profile, and also cannot treat smoothness on the demo machine as a budget already in place.
Applying it
- Write every budget as metric + cap + device band + network band + cache state. Missing a field, it is not a budget.
- Build a reproducible lab for that profile (a real device or a matched emulation). A developer laptop’s private window is not a substitute.
- Re-pick the profile when the audience moves: desktop-majority to mid-range phone retires “pass” on the old profile.
- How to check: run the same build on the target profile and on a developer machine. If only the latter passes and the former crosses, and the written budget names no profile, the cap is unbound. A named profile with a lab running a different setup is unbound as well.
Related
- Same group: R3.04.2 A performance goal with no budget will not be executed · R3.04.3 A budget must be checked in the build pipeline
- Nearby: I2.07 Perceived performance · R3.15 First-paint metrics and interaction readiness
- Search terms:
performance budget profile·device and network budget·lab profile