FDEInterviews logo
System Design & Production Engineering / 03
easyVercelOpenAIMicrosoft

What do p50, p95, and p99 latency actually mean, and why do production engineers obsess over the tail?

Averages lie, and interviewers know most candidates quote them anyway. The fastest way to sound production-grade in any latency discussion is to reason about percentiles correctly, including the one trap almost everyone falls into.

Updated Aug 2026 · Grounded in real Forward Deployed Engineer interview loops and written to a senior-engineer editorial bar.

TL;DR: Use percentiles because latency is right-skewed and the mean hides the tail; the key insight is that fan-out makes tail latency hit far more users than 1 percent (20 calls at p99 means roughly 18 percent of page loads see it). And percentiles do not average across hosts, so merge histograms first.

How to approach it

Define percentiles in one sentence, then spend your time on the two things interviewers are actually listening for: why averages mislead, and why tail latency hits far more users than the percentile number suggests. This vocabulary underpins harder questions (p99 incident triage, SLOs, capacity planning), so nail it crisply.

A strong answer

p50 is the median: half of requests finish faster. p95 and p99 are the values 95% and 99% of requests beat. Latency distributions are heavily right-skewed (most requests are fast, a few are very slow), so the mean is nearly useless: one 30-second outlier drags the average while telling you nothing about typical experience, and a "200ms average" can hide a p99 of 8 seconds.

The non-obvious part that scores points: tail latency affects far more than the tail percentage of users. If a single page load fans out to 20 backend calls, the probability that at least one call hits the p99 is 1 − 0.99²⁰ ≈ 18%. Nearly one in five page loads experiences your "1%" latency. This is why Google-scale shops treat p99 (and p999) as the primary signal, and why "it's only 1% of requests" is the answer that fails the question. Worse, the slowest requests are often your heaviest users (biggest customers, largest payloads), so the tail is disproportionately where revenue lives.

rendering diagram…

The fan-out effect scales viciously, which one row of math per fan-out width shows (all values are 1 minus the per-call success rate raised to the call count):

Backend calls per pageHits p99 at least onceHits p999 at least once
11%0.1%
54.9%0.5%
2018.2%2.0%
10063.4%9.5%

A microservices migration that turns 5 calls into 100 turns "1% of requests" into the majority experience with no service individually getting slower. That right-hand column is also the argument for caring about p999 at scale: at 100-call fan-out, one page load in ten sees your 99.9th percentile.

Two production corollaries. First, percentiles don't average: you cannot take p99 from ten hosts and average them into a global p99. Two hosts are enough to prove it (computed, not asserted): host A serves 1,000 requests, all at 100ms, so its p99 is 100ms. Host B serves 1,000 requests, 900 at 100ms and 100 at 2,000ms, so its p99 is 2,000ms. Averaging the two per-host p99s reports 1,050ms. Merge the actual 2,000 requests and the true p99 is 2,000ms, because the 100 slow requests are 5% of combined traffic and sit entirely above the 99th percentile. The average understated the tail by nearly half, and it can just as easily overstate it with different weights; the number is not conservative, it is unrelated. Aggregate histograms (or use sketches like t-digest/HDRHistogram), then compute percentiles from the merged distribution. Second, define SLOs on percentiles over a window ("p99 < 500ms over 30 days") and alert on burn rate, not on instantaneous blips.

For an FDE this is daily-driver vocabulary: customers say "your API is slow," and your first clarifying question is "at which percentile, and for which endpoints?", which converts a complaint into a measurable claim.

What interviewers probe next

  • "Your p50 is flat but p99 doubled. What kinds of causes does that pattern suggest?" Something affecting a subset: GC pauses, a hot shard or hot key, connection-pool exhaustion under burst, one slow downstream dependency, cold caches for a subset of traffic.
  • "How would you instrument a service to get trustworthy percentiles?" Histograms at the source, exported to a system that merges them; measure at the client or load balancer too, since server-side numbers miss queueing and network time.
  • "Where does the LLM wrinkle come in?" For streaming, track time-to-first-token and inter-token latency separately from total time; a 20s total with 300ms TTFT feels fine, the reverse feels broken.

Common mistakes

Quoting averages, or saying "we'd monitor latency" without naming a percentile. Averaging percentiles across hosts: a flag interviewers specifically listen for. Dismissing the tail as "only 1%" without the fan-out math. And treating this as trivia rather than connecting it to action. A strong candidate ends with what they'd do: set a percentile SLO, alert on it, and segment by endpoint and customer before debugging.

Key takeaways

  • The mean hides the tail; report and alert on p95/p99, never the average.
  • Fan-out math: 20 calls at p99 means roughly 18 percent of page loads hit the tail.
  • Percentiles do not average; merge histograms or t-digests, then read the percentile off the combined distribution.
  • For streaming LLM responses, track time-to-first-token separately from total latency.
That one was free — and so are 10 answers per topic without an account. Signing in doubles that to 20, opens the Plus lessons in the courses, and remembers which topics you keep getting wrong.no card · Google sign-in · nothing to cancel
HOW DID IT GO?
0
READING SIGNED OUT

Signing in doubles your free answers, from 10 to 20 per topic, and the site starts remembering you: mastery per topic, bookmarks, and a next-focus recommendation. Free, no card.

Sign in free
UP NEXT ON YOUR JOURNEY
FEDITOR'S NOTE

If you offer the fan-out math (1 minus 0.99 to the 20th is roughly 18 percent), expect the interviewer to immediately ask how you'd actually aggregate p99 across hosts. Saying 'average the per-host p99s' is the single fastest way to fail this question; the right answer is merge the histograms or t-digests first, then read the percentile off the combined distribution. The same averaging trap reappears in SLO design, so it's worth over-learning here.

DISCUSSION · 0

No comments yet — be the first to share your approach.