Capacity planning with extreme value theory.

Your p99.9 is a six-week event, not a rare one.

Teams size capacity off the worst thing in their retention window and then get surprised at a rate that feels random. It is not random. Tail fits the shape of your latency tail and tells you what a year actually contains.

No spam. One email when it is ready to try.

Heavy tailcheckout-apiGPD fit, 432 exceedances over 244ms
p99.9 of 90 days
1.02s
what capacity is sized off
Shape parameter
0.41
above zero: no ceiling
1 in 365 days
2.94s
2.9× the p99.9
p99.9 exceeded
every 23 d
28 replicas today, 79 needed

Ninety days of hourly peak latency for five services, drawn from tails with known shape parameters. Every fit runs in your browser.

The problem

A percentile of a sample cannot see past the sample.

The p99.9 of 90 days of data is, mechanically, close to the worst thing that happened in 90 days. It carries no information about the tail beyond it, because there is none in the sample to carry. So the capacity plan gets built on roughly the worst day anyone remembers, the plan holds until it does not, and the review calls the outage unprecedented. It was not unprecedented. It was unobserved, which is a different word.

1 in 42 days
What a p99.9 over hourly samples actually means: one hour in a thousand. Sizing to it means being over it roughly eight times a year, before any bad luck.
Definitional arithmetic, not a study
4.3×
Gap between the demo service's p99.9 and its modelled 1-in-1,000-day latency, both computed from the same 90 days of samples.
Computed live in the demo
ξ
The shape parameter. It decides whether a tail has a finite ceiling or none at all, and no percentile of any sample can reveal its value.
Pickands (1975); Coles (2001)

The insight

Tails have a mathematical form, so you can estimate what you have not seen.

Above a high enough threshold, exceedances of almost any distribution converge to a Generalised Pareto. That is a theorem, not a modelling choice, and it means the tail can be fitted from the exceedances you do have and then extrapolated past them. The whole answer lives in one number. A shape parameter above zero means the distribution is heavy-tailed: far worse events are not merely possible, they are expected on a long enough horizon. Below zero means there is a ceiling and you are probably already near it. Insurance prices catastrophe risk this way and hydrology sizes flood defences this way. Infrastructure engineering, which has the same problem, almost never does.

Method

Peaks-over-threshold with a Generalised Pareto fitted by probability-weighted moments, which stays stable at the exceedance counts a few months of data actually give you where maximum likelihood does not converge. Return levels at operational horizons, inverted to give the recurrence interval of whatever level you are currently provisioned at. Latency converted to capacity by Little’s Law, so the output is a replica count rather than a chart.

How it works

Four steps, no data science team

01
Point it at latency or queue depth you already keep

Hourly peaks per service from your metrics store. Ninety days is enough. It needs the samples, not the pre-aggregated percentiles, because the percentiles are the thing that threw the tail away.

02
It fits the shape of each tail

One shape parameter per service, with the exceedance count and threshold shown so you can see what the fit is standing on. Services split into the ones with a ceiling and the ones without.

03
Read the horizon you care about

Return levels at a month, a quarter, a year, three years. And the inverse: how often the level you are provisioned at today gets exceeded.

04
Get a replica count, not a chart

Arrival rate times latency is in-flight requests, and in-flight requests divided by per-replica concurrency is machines. The capacity artifact goes into the quarterly plan with the arithmetic attached.

Who it is for

The SRE or platform owner who signs off the capacity plan

Teams that have already had the incident where the graph went somewhere it had never been, and whose capacity plan is still a percentile with a multiplier bolted on.

Pricing

Free
$0
Open-source CLI and fitter
  • GPD fit and return levels
  • CSV or Prometheus input
  • Public, no account
Most common
Team
$400/mo
Up to 50 services
  • Continuous refits as data arrives
  • Shape-parameter drift alerts
  • Capacity artifacts for the quarterly plan
  • Declustering for correlated exceedances
Scale
$1,800/mo
Unlimited services
  • Self-hosted
  • Multi-service dependency tails
  • SSO and audit log
  • Review with a statistician

Competition

What exists, and what it does not do

WhoWhat they doThe gap
Datadog, Grafana, HoneycombCompute and chart p50 through p99.9 across every service you have.Every number they show is a summary of what happened. None of them extrapolates, and none of them will tell you that your p99.9 is a six-week event.
Autoscalers and HPAReact to load by adding capacity.React is the operative word. Scaling has a lead time measured in minutes and a tail event does not wait. Autoscaling also needs a target, and the target is usually a percentile.
A headroom multiplier in a spreadsheetTake the p99, double it, call it the plan. The actual state of the art in most companies.The multiplier is a guess at the shape parameter. Sometimes 2× is far too little and sometimes it wastes half the fleet, and the spreadsheet cannot tell you which.
Load and chaos testingPush the system to a chosen level and see what breaks.Answers what happens at a level. Does not answer which level, which is the question the capacity plan is actually asking.
How this fails

Two ways this dies. First, exceedances in real infrastructure cluster: one bad deploy produces forty consecutive bad hours, and treating those as forty independent observations inflates the shape parameter and over-provisions the fleet. Declustering is a real engineering problem and getting it wrong once is enough for a capacity owner to stop trusting the tool. Second, and more likely: the number is right and nobody can act on it. A platform lead who reads the 1-in-365 level, cannot get the spend approved, and quietly goes back to the percentile is a churned customer regardless of whether the math was correct.

Market

A line item inside the observability and capacity budget every infrastructure org already has

Companies large enough to have a named capacity owner already spend six figures a year on observability. This sits beside that at a fraction of the price and is sold to the same person. Two thousand teams on the Team tier is roughly $10M ARR, before the larger accounts that have hundreds of services and a formal capacity review.

Get early access

No spam. One email when it is ready to try.

Or just go look at the demo first →