How would you decide which font-display value to ship for a product's primary text font, and what is the case for choosing optional?
answer
- the role of the face comes first
- icons have no usable fallback
- how loud is the difference
- one value forfeits the first visit
- pair the aggressive choice with preload
basics
~20 sDecide from the role of the face and how visibly different the fallback is: swap for body copy, where readable text beats a restyle; block-like behaviour only for icon or symbol faces; optional when a mid-read restyle is worse for the product than some first-time visitors never seeing the brand font.
solid answer
~50 sThere is no single right value — the choice depends on three inputs. First, the role of the face: body copy must be readable immediately, which argues for a near-zero block period, whereas an icon or symbol face has no meaningful fallback and is better hidden briefly than rendered as wrong glyphs. Second, how visually different the fallback is; a face far from the fallback in width and weight makes the swap loud and disruptive. Third, the audience's real connections and how much traffic is repeat — a warm cache resolves nearly everything inside the block period. `optional` is the aggressive answer: it renders the fallback and never swaps on that load, so the page is typographically stable from first paint, and the file still lands in the cache so returning visits get the real face immediately. Pair it with a preload and it wins the tiny window often enough to be practical. Then verify the outcome with field data rather than a fast lab run.
go deeper
Know that swap is the common default for body text because readable content beats waiting, and that the right value depends on what the font is used for.
Be ready to justify a value from the timeline — which window you are shortening and what the reader sees during it — rather than repeating a default you inherited.
Argue from the product: name the trade you are accepting, tie optional to a preload so it can actually win its window, and say how you would confirm the result in real-user data.
Own it as policy — a documented default per font role, enforcement that stops faces shipping without one, and a clear statement of which experience the product is willing to give up.
## The choice is a product question, not a technical one Every `font-display` value is a trade between three things the reader experiences: how soon text is readable, whether the page changes under them while they read, and whether they ever see the brand face at all. No value gives all three. A principal-level answer names which one the product is willing to give up and why. ## Input one: what the face is for Body copy and headings carry meaning that a fallback can still convey. Latin text set in a system sans instead of the brand sans is *readable* — the reader loses aesthetics, not information. That is why a near-zero block period is the norm for text faces. An icon font is the opposite. Its code points map to symbols that no fallback family has, so painting the fallback produces letters or tofu boxes — visual noise that looks like a broken page and can be actively misleading when an icon means "delete". Here a short blocking period is defensible: a moment of nothing beats a moment of nonsense. The same logic covers symbol and math faces. ## Input two: how far the fallback is from the real face The visible cost of a swap scales with the difference between the two faces. If the fallback sets text at a similar width and weight, the swap is a subtle change of shape. If the brand face is much narrower or heavier, whole paragraphs re-wrap when it arrives, which is jarring for someone mid-sentence. The further apart the two faces are, the more attractive a policy that avoids swapping mid-read becomes. ## Input three: who the users actually are A team on office fibre sees every value behave identically. The decision belongs to the slower half of the real distribution — the visitors whose connections make the window matter at all — and to the share of visits that are repeat. High repeat traffic makes `optional` far cheaper than it sounds, because only the very first visit renders in the fallback and every subsequent one has the file cached. ## The case for optional `optional` says: paint the fallback almost immediately, and do not swap at all on this load. Two consequences follow. The upside is that the page is typographically final from its first paint. Nothing re-wraps under the reader's eyes, and the load has one text rendering rather than two. For a content product where people start reading at once, that stability is worth a great deal. The downside is honest and must be stated: some first-time visitors will complete their entire visit without seeing your typeface. If the brand face is the identity of the product — a marketing page whose whole job is the impression — that is a real loss, and `swap` is the better answer. What makes `optional` practical rather than theoretical is pairing it with a preload of the face. The block window is tiny, so with the file discovered only through the CSS chain the font essentially never wins it. Started early, alongside the stylesheet, a small woff2 on a decent connection frequently is ready in time, and the download that misses still populates the cache for the next navigation. Used this way, `optional` becomes "the brand face when we can get it there in time, and never a mid-read restyle when we cannot." ## Where fallback and block sit `fallback` is the hedge: readable straight away, a limited window in which a moderately slow font may still swap, and no swap at all if it is very late. It is a reasonable middle for a secondary face where the swap is mildly desirable but not worth allowing at any point in the load. `block`, and `auto` which behaves like it today, is only defensible when a fallback rendering would be wrong rather than merely plain. ## Make it a system, not a per-page decision At scale the failure mode is not choosing badly once; it is drift. New `@font-face` blocks appear without the descriptor and silently default to blocking behaviour, and one weight ends up with a different policy from another so headings and body text render out of step. The durable version of this answer is a documented default per font role, kept next to the font files, plus a check that fails when a face ships without an explicit value. ## Verify in the field Whichever value you pick, the lab will not tell you whether it worked — a fast machine with a warm cache resolves every font inside the block period. What you want from real users is the share of loads where the web font was actually applied and whether text-related instability went down after the change. That evidence is what turns the decision from a preference into a defensible call.
- What is the strongest argument against shipping optional on a marketing site?That the typeface is much of the point. On a page whose job is the first impression, letting a meaningful share of first-time visitors read it entirely in the system fallback gives up the thing the page exists to deliver. `swap` costs a restyle but guarantees the brand face eventually renders on every load.
- Why does optional make so little sense without a preload?Because its block window is tiny and the font is discovered only after the stylesheet is parsed and an element matches. Started that late, the file essentially never arrives in time, so `optional` degrades into "always the fallback on first visit". Preloading gives it a genuine chance to win the window.
- How do you keep a font-display policy from drifting across a large codebase?Treat it as a property of the font role, documented alongside the files, and enforce it: a check that fails when an `@font-face` block ships without an explicit value, and a single source for the faces so weights cannot end up on different policies. Left to per-component discipline it will drift.
- How would you know afterwards whether the choice was right?From field data, not a lab run — a fast local machine resolves every font inside the block period, so all values look identical. Look at the share of real loads where the web font was applied and whether text-related visual instability fell after the change.
saying these in an interview costs you the question
- Says swap is always the correct value
- Picks a value from a lab score on a fast connection
- Ignores that icon fonts have no usable fallback
- Thinks optional cancels the download entirely
- Applies one policy to every face regardless of role