skip to content

A team marks about a dozen of a page's requests as high priority. The page gets no faster and one metric drifts slightly worse. Why does promoting everything fail, and what would you do instead?

level: middleimportance: should knowfreq 36%

answer

  1. relative ranking, zero extra bandwidth
  2. if everything is first, nothing is
  3. defaults were demoting on purpose
  4. demotion is the cheaper lever
  5. budget of two or three per page

basics

~20 s

Priority is a relative ranking, not extra bandwidth. Marking twelve requests urgent flattens the ordering back to roughly what it was, while discarding the browser's own sensible demotions — so nothing is served sooner and some genuinely low-value work now competes with the critical path.

solid answer

~50 s

Two things go wrong. First, priority is purely relative: if everything is at the top, nothing is, and the browser falls back to other tiebreaks — which is close to the ordering you had before you started. You cannot promote your way to more bandwidth. Second, you have overridden defaults that were often correct. The browser deliberately demotes offscreen images, async scripts and background fetches; telling it those are urgent means they now contend with the resources the first paint actually waits on, which is how a metric gets *worse*. The discipline is to spend a very small budget: pick the one or two requests the first meaningful paint truly depends on, and then look hard at the opposite move — explicitly demoting the loud non-critical requests. Demotion is usually the cheaper win, because it frees capacity without you having to rank your important resources against each other.

go deeper

for a junior

Be able to say that priority reorders requests rather than adding bandwidth, so marking everything urgent leaves the order essentially unchanged.

for a middle

Explain both failures: the flattened ranking that carries no information, and the loss of the browser's deliberate demotions, which is what can actively make a metric worse.

for a senior

Show the discipline of a small budget — name the single resource the first paint waits on, prefer demotion as the cheaper lever, and verify under throttling by checking what got slower, not only what got faster.

for a principal

Own the decay problem: these annotations silently stop matching the page. Decide what convention makes each one justifiable and reviewable, and what evidence would make the team remove one.

## Priority is a ranking, not a resource The single sentence that explains the failure: **promoting a request does not create bandwidth, it borrows bandwidth from another request.** A page's connection carries what it carries. Ranking decides the order in which that fixed capacity is spent. So consider what "everything is urgent" actually produces. Twelve requests all sitting at the top rank must still be served in *some* order, decided by whatever tiebreaks remain — discovery order, connection availability, response size. That order is close to what you would have had anyway, minus the browser's own judgment. A flat ranking carries no information, exactly like a bug tracker where every ticket is P0. ## The second failure: throwing away good defaults The first failure is a no-op. The second is an actual regression, and it is why a metric can move the wrong way. The default model demotes things on purpose. Offscreen images, `async` scripts, background data fetches and next-navigation prefetches are ranked low *because nothing visible waits on them*. That demotion is doing useful work: it keeps the pipe clear for the handful of resources that gate the first paint. When a team sweeps through and marks everything urgent, those deliberate demotions vanish. A tracking script and a footer illustration now sit alongside the hero image and the critical stylesheet. On a fast connection you will not notice. On a mid-range phone on a busy network you will, and it will show up in whichever metric depends on the resource that got crowded out. ## How to spend the budget properly Treat priority signals as a budget of two or three per page, and spend them like this. **Find the one resource the first meaningful paint waits on.** Usually one image or one font, occasionally one data fetch. Not "the important resources" — *the* resource. If you cannot name a single one, you do not yet understand the page's critical path well enough to be tuning its ranking. **Check it is discovered early before you rank it.** Ranking a late-discovered request is wasted effort; the delay is upstream of the queue. Fix discovery first. **Then look for demotion candidates, which are usually more numerous and less contentious.** Good candidates: an above-the-fold image that is decoration rather than content; a script-issued fetch for something below the fold; an analytics or experimentation request that ranks respectably by type but is not needed for the first paint; a carousel's second through tenth slides. Demoting these does not require you to decide which of your important resources is *most* important — it just widens the pipe for all of them. **Do not restate what the defaults already get right.** Marking a render-blocking stylesheet urgent moves nothing, because it is already top-ranked and there is nothing above it to overtake. The line costs you nothing at runtime and something in review time — a future reader must work out whether it is load-bearing before touching it. ## Verifying, and the trap of local testing The reason bad priority changes survive is that they are invisible on a developer machine. Fast connection, warm cache, few competing requests — no contention, so no reordering effect in either direction. Both the intended win and the accidental regression are hidden. So evaluate under throttling, with a cold cache, and preferably on field data rather than a single lab run. Two checks are worth making explicitly: - Did the resource you promoted actually start transferring sooner? - Did anything else you care about start later? This is the check teams skip, and it is where the regression lives. ## Governance, because this decays Priority annotations rot faster than most performance work. The image someone marked urgent in March is below the fold after the April redesign; the fetch that gated the first render was moved to the server. Nobody notices, because nothing breaks — the page just quietly gets slower under load. Two cheap habits help. Keep the total count small enough that a reviewer can hold it in their head, and treat every added signal as requiring a one-line justification of *what it is beating*. "This image is the largest thing on screen and must beat the below-fold gallery" is a claim someone can later check and delete. "High priority — important" is not. The underlying principle generalises beyond this one attribute: any signal whose value comes from being scarce loses all of it when applied broadly. A page where everything is urgent has communicated exactly as much as a page where nothing is.

  • Why is demoting a request often a safer change than promoting one?
    Because it does not require ranking your critical resources against each other. Promotion forces you to claim one important thing should beat another, and you can get that wrong. Demotion just removes a known non-essential request from the competition, which helps everything above it. It also fails more gracefully: if you demote something that turns out to matter slightly, it still loads — a little later.
  • What would you check after shipping a priority change, beyond whether the promoted resource got faster?
    Whether anything else got slower. A promotion is a trade, so the regression is always somewhere else in the waterfall — and it will not appear in the one metric you were optimising. Compare the start and finish times of the other critical-path requests, and watch field data over the following days rather than trusting a single throttled lab run.
  • How would you keep priority annotations from rotting as the page changes?
    Keep the count small enough to review at a glance, and require each one to state what it is meant to outrank — a claim a future reader can check against the current design. When a layout changes, the annotations become part of the diff to re-examine rather than invisible legacy. Anything justified only as "important" should be deleted on sight.

saying these in an interview costs you the question

  • Believes marking more requests urgent increases total throughput
  • Thinks a flat high ranking is harmless because it cannot slow anything down
  • Overrides the browser's deliberate demotion of offscreen and async work
  • Adds a priority signal to already top-ranked render-blocking CSS
  • Judges the change on a fast local load where no contention exists

context