{
  "id": 5810384,
  "title": "Your average latency is lying to you: p90, p95 and p99 explained",
  "url": "https://urgent.news/2026/09/05/your-average-latency-is-lying-to-you-p90-p95-and-p99-explained",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-05T18:06:18.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/lovestaco/your-average-latency-is-lying-to-you-p90-p95-and-p99-explained-48b"
  },
  "original_language": "en",
  "account": "Your average latency may be deceiving you, as percentiles such as p90, p95, and p99 provide a more accurate picture of your service's performance. Your dashboard might show an average of 42ms, but your support inbox might report that the app is unusably slow. Both of these observations are true simultaneously, and the reason is that averages can mask latency issues. The most misleading metric in observability is the average because it tends to always appear fine right up until customers churn. This article will explain the significance of p90, p95, and p99 percentiles, which actually reveal valuable insights into your service's performance.\n\nAverages conceal the impact of slow requests. For instance, if 10,000 requests hit your service, most of them finish quickly, while a few take considerably longer due to various factors like cache misses, garbage collection pauses, or network congestion. Computing the mean of all requests will dilute the impact of these slower requests, resulting in an average that looks good but does not accurately represent the user experience.\n\nThe concept of percentiles offers a different perspective. A percentile is a promise about a share of your traffic. For example, p90 = 400ms means that 90 out of every 100 requests finish in under 400ms, while the remaining 10 did not. Similarly, p95 = 900ms indicates that 95 requests finished under 900ms, and 5 did not. Finally, p99 = 3,100ms implies that 99 requests finished under 3,100ms, with just one exception.\n\nEach step up the percentile ladder reveals worse experiences for fewer users. While p90 shows what \"normal\" feels like, p99 illustrates what the worst hour looks like on a good day. To better understand your service's performance, it is crucial to consider all three percentiles—p90, p95, and p99—rather than relying on a single average.\n\nCalculating a percentile is straightforward. Sort the response times in ascending order and then read the value at the appropriate index. For example, with 100 requests, you would sort the list, and then p95 would be the value at index 95 (100 * 0.95 - 1), and p99 would be the value at index 99 (100 * 0.99 - 1).\n\nAn essential aspect of percentiles is that they are not a measurement of anything but rather a position in a sorted list. Consequently, p100, which would represent the worst-case scenario, does not exist because a value cannot be greater than 100% of itself. Instead, you should use the max metric to capture the absolute worst-case latency, or use higher percentiles such as p99.9 or p99.99 to gain deeper insights into tail latency.\n\nWhile the median (p50) is another useful metric, it is important to note that it is deliberately blind to the tail, focusing solely on the central tendency of the data. This property makes it a better choice for answering questions about typical user experiences but less effective when assessing the worst-off users. For comprehensive insights, it is essential to include both the median and higher percentiles in your observability toolkit.",
  "summary": "Hello, I'm Maneshwar, and I'm building LiveReview — a blast-radius aware AI code review built for your business-critical systems. Star us to help devs discover the project, give it a try, and share your feedback to help improve the product. Your latency dashboard says 42ms. Your support inbox says \"the app is unusably slow\". Both of these are true at the same time, and the reason is that you are…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}