Why Averages Lie and P95 Actually Matters
Why Averages Lie and P95 Actually Matters
For a long time, I looked at average latency and felt confident.
Dashboards were green.
Numbers looked healthy.
Nothing seemed broken.
And yet, users were complaining.
Pages felt slow.
Flows felt unreliable.
Support tickets kept coming.
That disconnect taught me an important lesson:
Users do not experience averages.
They experience the slow moments. The frustrating pauses. The one request that took far too long when it mattered.
That is why P95 and P99 matter more than the average.
The Problem With Averages
Average latency tells you how the system behaves most of the time.
But real user experience is shaped by the worst moments, not the common ones.
If 95 out of 100 requests are fast, but 5 are painfully slow, users will remember the slow ones. Those slow requests often happen during peak load, degraded dependencies, or edge cases. Exactly when users need the system most.
From a user’s perspective:
A single slow login feels broken
A delayed checkout feels risky
A hanging form submission feels unreliable
Averages hide these experiences.
What P50, P95, and P99 Really Mean
Here’s a simple way to think about it:
P50
This is the median. Half your requests are faster, half are slower.
This is what demos usually show.
P95
This represents the slowest experience most users will encounter.
This is where frustration starts.
P99
This is where incidents live.
These are the requests that cause retries, complaints, and escalations.
If P95 feels slow, users notice.
If P99 is unstable, teams get paged.
Why Teams Miss This
Most teams do not ignore P95 on purpose.
They miss it because:
Averages are easy to explain
P95 requires better instrumentation
Dashboards default to mean values
Performance work often starts too late
It is comfortable to say, “Average latency is fine.”
It is harder to say, “Five percent of our users are having a bad day.”
But that honesty is what leads to better systems.
A Practical Way to Improve What Users Feel
You do not need to optimize everything at once.
Start small and focused.
Pick one critical user journey
Login, search, checkout, registration. Something users care about.Measure P95 end to end
Not just backend. Include client time, network, and dependencies.Break it into segments
Frontend, API, database, external services. Find the real bottleneck.Fix the biggest contributor first
Do not spread effort thin. Focus where it hurts most.Re-check P95 after every change
Performance work is iterative, not one-time.
This approach keeps performance work grounded in real user experience instead of abstract metrics.
The Mindset Shift That Matters
Optimizing averages makes dashboards look good.
Optimizing P95 makes products feel good.
That difference shows up in:
Fewer support tickets
Higher trust
Calmer on-call rotations
More predictable releases
Performance is not just a technical concern. It is a product quality signal.
Closing Thought
If you only track averages, you are optimizing for the best-case user.
If you track P95 and P99, you are designing for reality.
And reality is where good engineering actually matters.
Question for you:
Does your team actively track P95 and P99 today, or do averages still drive performance decisions?
___________________________________________________________________________
Written by Sharath Chandra Odepalli

Comments
Post a Comment