SLIs, SLOs, and Error Budgets

"Is the system reliable?" is a useless question until you define reliability as a number. SLOs turn reliability from a vague aspiration into a measurable target, and the error budget — the small amount of unreliability you're allowed — turns it into a tool that settles the eternal fight between shipping features and keeping things stable. This is where telemetry becomes a way to run engineering, not just watch it.

The pillars and OpenTelemetry give you telemetry. This post turns that telemetry into reliability management using the Google SRE framework: SLIs (what you measure), SLOs (the target you commit to), and error budgets (the tool that operationalizes it). This is the shift from “we have dashboards” to “we manage reliability deliberately” — and the error budget idea is one of the most useful concepts in all of operations.

Why reliability needs a number

“The system should be reliable” is meaningless as stated — reliable enough for what? 100% reliability is impossible (things fail) and, crucially, not even desirable: chasing the last fraction of a percent costs exponentially more and delivers diminishing value users can’t perceive. The SRE insight is that reliability must be a defined, measured target — a specific number you commit to — so you can tell whether you’re meeting it and make deliberate trade-offs. That’s what SLIs, SLOs, and error budgets provide, building directly on the metrics from the earlier post.

The three concepts

They stack, each built on the last:

SLI  = what you measure   → "% of requests under 300ms" (a number)
SLO  = the target         → "99% under 300ms over 30 days" (your commitment)
SLA  = the contract       → "99% or we credit you" (external, looser)

The most important choice is picking user-centric SLIs: measure the things whose failure the user feels (requests succeeding, responses being fast enough), because reliability is ultimately about user experience, not internal metrics. An SLO on a metric users don’t care about is reliability theater.

The error budget: the powerful part

Here’s the concept that makes SLOs genuinely useful. If your SLO is 99.9% success, then you are explicitly allowing 0.1% failure — and that 0.1% is your error budget: the amount of unreliability you’re permitted to spend over the window before you’ve violated the SLO.

SLO 99.9% over 30 days  →  error budget = 0.1% of requests may fail
   (≈ 43 minutes of full downtime per 30 days, or the equivalent in errors)

Budget remaining → you can take risks (ship fast, experiment)
Budget exhausted → stop shipping risky changes, focus on reliability

This reframes reliability from “never fail” to “stay within budget,” and that reframing is transformative because the error budget becomes a shared, objective decision tool for the classic conflict between two forces:

The error budget settles this with data instead of politics:

Instead of an endless “ship vs. stabilize” argument decided by whoever’s loudest, the error budget gives an objective, agreed rule: the budget tells you which mode you’re in. This is why error budgets are considered one of SRE’s best ideas — they turn reliability into a resource you manage, aligning product and operations around a shared number rather than pitting them against each other.

Choosing SLOs well

Setting SLOs is a skill, and common mistakes undermine the whole system:

From telemetry to engineering management

SLIs/SLOs/error budgets are where observability stops being watching and becomes managing: your telemetry (metrics especially) feeds SLIs, the SLO defines the target, and the error budget drives concrete decisions about where engineering effort goes. This is also the foundation for good alerting (next post) — you alert when the error budget is at risk (burning too fast), not on every blip, which is how you escape alert fatigue. Reliability, defined as a number and managed as a budget, is the difference between an ops practice that’s deliberate and one that lurches from fire to fire.

Key takeaways

Further reading

Sources & References