Lesson 5 of 30
A performance budget is only real if it's tied to a specific consequence someone cares about. An arbitrary round number is advice; a budget backed by a reason is a constraint the team will actually defend under deadline pressure.
11 min read
Every option explains itself — why the right one is right, and why each wrong one is wrong. Miss one and it comes back later on a spaced-repetition schedule.
Question 1 of 3
Which of these is most likely to survive being overridden under deadline pressure?
Hints without spoilers, and a plain explanation of why a wrong answer was wrong — answered only from this lesson. Free account, no card.
Sign up freeWhat interviewers actually ask about this, and what a strong answer has to cover.
A strong answer covers
Likely follow-ups
A performance budget is a concrete, agreed-upon limit on a measurable quantity, treated as a hard constraint rather than an aspiration. Examples of what gets budgeted: total JavaScript bundle size, LCP time, number of network requests on first load, total page weight. The word "budget" is deliberate: the same discipline that applies to a financial budget applies here, a number the team commits to not exceeding, not a vague direction to move in.
The part that actually matters is why the number was chosen. "LCP under 2.5 seconds, because that's the Core Web Vitals 'good' threshold and it directly affects search ranking" is a budget that survives contact with a deadline, because breaking it has a named, specific consequence. "Let's just try to keep things fast" isn't a budget at all — it has no number, and more importantly, no one can point to what breaking it actually costs. When a budget is arbitrary (a round number picked because it sounded reasonable), it's the first thing that gets waived when a feature needs to ship, precisely because no one can say what waiving it actually loses.
Budgets also apply at different points in the pipeline, and it matters which point you're constraining:
Bundle size budget (build-time): main JS bundle ≤ 170KB gzipped
Reason: this repo's own measurements showed bundles past this size
pushed Time to Interactive past 3s on a mid-tier Android device.
Enforced: build fails in CI if exceeded.
LCP budget (runtime): LCP ≤ 2.5s for the 75th percentile of real visits
Reason: 2.5s is the Core Web Vitals "good" threshold; missing it
affects search ranking and is Google's own stated cutoff.
Enforced: watched via field data (CrUX / RUM), not a build check.
These are two different kinds of constraint on two different quantities, checked at two different points, and each one is written with a reason a stakeholder outside the frontend team could actually understand and defend. That's what makes them enforceable rather than aspirational.
"How would you prevent this app's performance from regressing over time as more features get added?" is a common systems-thinking question, and naming specific, reasoned budgets tied to real thresholds (rather than a general "keep an eye on it") is what separates a process-minded answer from a vague one.