Service level objective (SLO)
Also known as: SLO
An internal target for how well a service should work, such as 99.9% of requests answered within a second over 30 days.
Draft - this entry has not been reviewed yet.
Formal
A target value for a measured sign of service quality, such as the share of requests that succeed or answer fast enough, over a set time window; the gap between the target and 100% is the error budget the team may spend.
In plain English
Like a bus company aiming for 98% of buses on time; the timetable it prints for passengers promises less, so it has room to spare before it owes anyone money.
In practice
The team behind a school communication portal allows itself 43 minutes out of service a month; after a bad release uses 40 of them, it pauses new features and spends the rest of the month on stability.
Why it matters
It turns availability from a vague wish into a number that guides the choice between speed and stability, and warns the team before it breaks the SLA it has given its own customers.
How to put it into practice
The usual steps, in order. Adapt them to your organisation.
- Pick the few critical user journeys for the service, such as logging in or submitting a form, and agree with the product owner what working means for users.
- For each journey define SLIs as a ratio of good events to valid events, such as successful requests or requests answered faster than 300 ms, measured as close to the user as practical.
- Set a target and a window from historical performance and user expectations - never 100%, and stricter than any SLA you have given customers.
- Work out the error budget (at 99.9% over 30 days, 0.1% of valid requests or 43.2 minutes) and show it on a dashboard the whole team sees.
- Agree a written error budget policy with product, development and operations - for example, pause feature releases except reliability and security fixes when the budget is spent, and hold a postmortem for any incident that uses a large share of it.
- Alert on the burn rate, over both a short and a long window, instead of on the instantaneous SLI.
- Declare the SLOs as code next to the service so they are reviewed and versioned like other changes.
- Review SLOs and the policy every quarter, and tighten or loosen targets based on user feedback and how the budget was spent.
Common pitfalls
- Setting 100% or wishful targets that freeze change and are quietly ignored in practice.
- Having an SLO without an agreed error budget policy, so it is just a dashboard nobody acts on.
- Measuring only on the server side and missing requests that never reach it.
- Defining dozens of SLOs, so nobody watches any of them closely.
Good guides
- Google SRE book - Chapter 4, Service Level Objectives(opens in a new tab) · Google
- Google SRE Workbook - Chapter 2, Implementing SLOs(opens in a new tab) · Google
- Google SRE Workbook - Error Budget Policy(opens in a new tab) · Google
- Google SRE Workbook - Chapter 5, Alerting on SLOs(opens in a new tab) · Google
Technical deep dive
An SLO has three parts: a service level indicator (SLI), a target and a compliance window. The SRE Workbook recommends expressing every SLI as a ratio of good events to valid events, so it ranges from 0 to 100% and has a uniform meaning: for availability, successful responses divided by all valid requests, excluding for example 4xx responses caused by clients; for latency, the share of requests served faster than a threshold such as 300 ms; and for pipelines, freshness, correctness or coverage. Latency SLOs are usually stated as a percentile target (99% of requests under 300 ms) rather than an average, which hides the tail. Time-based SLIs, which count good minutes instead of good requests, weight a quiet night the same as peak hour and so tend to misrepresent user impact.
The error budget is 1 minus the target applied to the window. At 99.9% over 30 days a service may fail 0.1% of valid requests, which is 1,000 failures per million requests or, for a time-based SLI, 43.2 minutes. Rolling windows (the last 28 or 30 days) reflect what users recently experienced and avoid the budget suddenly resetting on the first of the month; calendar windows align with business reporting and SLAs. Alerting should be driven by the burn rate, the speed at which the budget is being consumed, rather than by the instantaneous SLI.
The budget becomes a management tool through an error budget policy agreed in advance between product, development and operations: for example, when the budget is exhausted, feature releases pause except for reliability fixes and security patches until the service is back within target, and any single incident consuming more than a set share of the budget requires a postmortem. Without such a policy an SLO is just a dashboard. The corollary is that a large remaining budget is permission to take risk, such as faster rollouts or chaos experiments.
Targets should be set from user expectations and historical performance, not aspiration. 100% is the wrong target because users cannot distinguish it from very high availability behind their own imperfect networks, and pursuing it freezes change. An SLO also cannot realistically exceed the combined availability of hard dependencies, including third-party SLAs, without redundancy. Too many SLOs dilute attention; a few per critical user journey is typical. SLOs are best measured as close to the user as practical, at the load balancer or with client-side telemetry, because server-side metrics miss requests that never arrive. Specifications such as OpenSLO allow SLOs to be declared as code alongside services, and the SLO is then set stricter than any external SLA so that internal reaction precedes contractual breach.
What to learn first
Everything this builds on, foundations first.
- Metrics
- →Availability
- →Service level objective (SLO)
Relationships
- Requires
- MetricsAvailability
- Don't confuse with
- Service level agreement (SLA)Recovery objectives (RTO/RPO)
Sources & further reading
Reference works
Where this data comes from
This entry was drafted by an AI from the sources above and has not yet been checked by a person. Treat it as a starting point, and check anything important against the sources.
See the review queueSuggest a correction on GitHubThis term as JSON
Check yourself
Loading…