Most teams have an uptime number on a slide that nobody can explain the calculation for. SLOs exist precisely to remove that ambiguity.
Three terms, plainly
- SLI (indicator): the thing you measure. For example, "the proportion of requests answered in under 300 ms".
- SLO (objective): the value you want for that indicator. For example, "99% over any 30 days".
- SLA (agreement): the contractual commitment, usually with a penalty. Always looser than the internal SLO.
The key point: your SLO should be stricter than your SLA. If you promised a customer 99.5%, your internal target should be 99.9% so you have room to react.
Choosing your first SLO
Start with one thing: the path that, if it breaks, the customer notices immediately. Usually login, the main product screen, or the payment flow.
For that path, two indicators are enough:
availability = non-5xx requests / total requests
latency = requests under 300ms / total requestsError budget — the genuinely useful part
If your SLO is 99.9% over 30 days, you are allowed roughly 43 minutes a month outside target. Those 43 minutes are your "error budget".
That number is a decision-making tool, not a stick to beat people with:
- Budget untouched? You can take more risk — ship faster, make bigger changes.
- Budget spent? Non-essential changes pause until stability returns.
An error budget turns "speed versus stability" from a matter of opinion into a decision backed by data.
Common mistakes
Targeting 100%. Impossible and expensive. Each extra nine multiplies the cost, and past a point the user can't tell the difference.
Measuring from the inside. If you measure from inside the cluster you won't see a DNS or CDN outage — which is exactly what the user does see.
An SLO for every service. Start with one. Ten SLOs nobody looks at are worse than one reviewed weekly.
After you've set it
Build a dashboard showing error-budget consumption, and alert on the burn rate rather than on the outage itself. If a month's budget is going to be gone in two hours, you want to know within those two hours — not at the end of the month.