SLOs and error budgets give engineering teams a practical way to discuss reliability without turning every product decision into an argument. This guide explains how to define useful service level objectives, estimate error budgets with simple inputs, avoid common mistakes, and revisit targets as your system, team, and customer expectations change. The goal is not to chase perfect uptime. It is to create a shared decision-making framework that helps developers, platform teams, and managers balance reliability work with feature delivery.
Overview
If your team has ever debated whether to pause releases after an incident, whether a slow endpoint counts as an outage, or whether reliability targets are realistic, you are already dealing with SLO questions. A service level objective is a target for a user-facing level of service over a defined period. An error budget is the amount of unreliability you can spend before missing that objective.
That sounds straightforward, but many teams make SLOs harder than they need to be. They start with infrastructure metrics that users never see, set targets based on guesswork, or define so many objectives that nobody can remember them. A better approach is collaborative and simple: choose a service, define what good user experience means, measure it consistently, and express the acceptable failure allowance in a way the whole team can use.
For example, an API team might define an availability SLO such as: 99.9% of valid requests to the checkout API complete successfully over 30 days. That remaining 0.1% is the error budget. If the service exceeds the allowed failure threshold, the team may slow risky changes, focus on reliability work, or tighten deployment controls. If the service is comfortably within budget, the team may decide it can safely ship more aggressively.
The real value is organizational. SLOs and error budgets create a common language between software engineers, SREs, support, security, and product. Instead of abstract conversations about quality, the team can point to a clear target and discuss tradeoffs. That is why this topic fits squarely within developer collaboration and engineering teams: an SLO program succeeds less through tooling alone and more through shared understanding, consistent review habits, and clear ownership.
It also helps to keep terms distinct:
- SLI: the indicator you measure, such as request success rate, latency under a threshold, or job completion rate.
- SLO: the target for that indicator over time.
- SLA: an external commitment, often contractual. Many teams should define internal SLOs before making formal SLA promises.
- Error budget: the allowed amount of failure within the SLO window.
Used well, SLOs are not a reporting exercise. They are a way to make release decisions, prioritize reliability work, shape escalation policies, and improve incident learning. If you already use observability tools, incident reviews, and deployment automation, SLOs can connect those practices into a clearer operating model. Teams building that model may also find it helpful to align reliability goals with broader workflow standards, onboarding expectations, and incident procedures.
How to estimate
You do not need a complex platform to estimate an initial SLO and error budget. Start with a repeatable worksheet. The purpose is not mathematical precision on day one. The purpose is to arrive at a target that is measurable, relevant to users, and specific enough to guide team behavior.
Use this five-step method:
- Choose the service or journey. Pick one service boundary that matters to users or internal developers. Good examples include login, checkout, build pipeline completion, deployment success, or DNS change propagation inside a platform workflow.
- Define the “good event.” Be explicit. A request is good if it returns a successful response code within a chosen latency threshold. A CI run is good if it completes without platform-induced failure within a target duration. A deployment is good if it reaches healthy status without rollback.
- Select the time window. Common rolling windows are 7, 28, or 30 days. Shorter windows react faster; longer windows smooth out noise.
- Set the target. Choose the percentage of good events required during that window.
- Calculate the error budget. Error budget percentage = 100% minus the SLO target. Error budget events = total eligible events multiplied by the error budget percentage.
The simple formula looks like this:
Error budget events = total events in period × (1 - SLO target)
Examples:
- 99.9% SLO over 30 days means 0.1% of events may be bad.
- If you process 1,000,000 eligible requests in 30 days, your budget is 1,000 bad requests per 30 days.
- If a deployment platform handles 5,000 deployments per month with a 99.5% SLO, the budget is 25 failed or excessively delayed deployments.
For latency SLOs, define the threshold first. If your SLO is “99% of requests under 300 ms,” then any request above 300 ms counts against the budget, even if it technically succeeded. This is often more useful than pure uptime because users experience slowness as failure.
For engineering teams, there are usually two good starting points:
- User-facing SLOs for production services.
- Internal platform SLOs for developer workflows such as CI pipelines, artifact retrieval, secrets injection, or Kubernetes deployment paths.
The second category is often overlooked. Internal developer platforms are products too. If builds fail because shared tooling is unstable, or if deployment pipelines are slow enough to block safe releases, you are spending developer time and trust. Teams interested in standardizing this area may want to connect SLO work with platform team practices and workflow design, especially when defining reliable defaults for CI/CD and internal tooling.
Once you have an initial estimate, tie it to decision rules. An error budget without an action policy becomes a dashboard number. Keep the first policy simple:
- If budget consumption is low, continue planned releases.
- If budget burn is rising quickly, increase review on risky changes.
- If budget is exhausted, pause high-risk launches and prioritize remediation.
That policy does not have to be punitive. It should clarify what the team agreed to do before the next incident creates pressure.
Inputs and assumptions
Most SLO problems come from weak inputs rather than weak formulas. Before you publish a target, inspect the assumptions behind it.
1. What population counts?
Not every event should be included. Decide which requests, jobs, or operations are eligible. You may want to exclude clearly invalid client requests, maintenance windows you explicitly communicate, or synthetic traffic used only for testing. Be careful with exclusions. If you exclude too much, the SLO stops reflecting real experience.
2. What matters to users?
A healthy database node is not a user outcome. A low CPU graph is not a user outcome. Infrastructure metrics are useful for diagnosis, but the SLO itself should usually represent the service someone consumes. For a platform team, that may be “a deployment completes successfully within 15 minutes,” not “the control plane stays under a CPU threshold.”
3. What time window fits the service?
A weekly window can help teams react faster in high-change environments. A monthly window is easier to manage for many services because it balances responsiveness and stability. Internal tooling with bursty usage may need care here: a 30-day window can smooth out team-specific spikes, while a shorter window can reveal painful periods hidden by monthly averages.
4. What target is realistic?
A common mistake is choosing a number that sounds impressive but does not match system design, staffing, or customer need. Higher targets shrink the error budget dramatically. The difference between 99.9% and 99.99% is not cosmetic. It changes what kinds of failures are tolerable and often changes architecture, operational burden, and release process. If your team is early in its reliability practice, it is often better to start with a defensible target and tighten later than to publish a heroic one nobody can support.
5. How will you measure it?
Your measurement path matters as much as the target. Use one clearly documented data source for each SLO where possible. Define how events are counted, how missing telemetry is handled, and how duplicate signals are prevented. If you use observability tools, keep the implementation understandable enough that engineers can validate it during incident review.
6. Who owns it?
Ownership should be explicit. That does not mean one person carries all accountability. It means one team curates the definition, measurement, review cadence, and policy response. Shared ownership without a clear maintainer usually leads to stale dashboards and unclear escalation paths.
7. What behavior should the SLO encourage?
This is the collaboration question teams often skip. A good SLO changes behavior in a useful way. It should help teams prioritize reliability fixes, justify automation work, and set expectations for releases. It should not reward metric gaming. If people can make the number look better while the service still feels worse, the SLO needs revision.
To keep assumptions visible, document each SLO in a short standard format:
- Service name
- User or consumer
- Good event definition
- Bad event definition
- Data source
- Target percentage
- Window length
- Error budget in percent and event count
- Review owner
- Actions when budget burn is high or exhausted
This document can live beside runbooks, incident response notes, release checklists, or platform standards. If your team already uses formal onboarding and workflow documentation, adding SLO definitions there helps new engineers understand what reliability means in practice.
Worked examples
The easiest way to make SLOs useful is to work through concrete cases. Here are three examples that show how the same framework applies across different engineering teams.
Example 1: Public API availability
Service: Checkout API
Good event: Valid request returns success within 1 second
Window: 30 days
SLO: 99.9%
Assume the API handles 2,000,000 valid requests in 30 days.
Error budget percentage = 0.1%
Error budget events = 2,000,000 × 0.001 = 2,000 bad events
This means the team can spend up to 2,000 failed or over-threshold requests in the rolling month before missing the SLO. If one bad deployment causes 1,500 requests to fail, the service has already consumed most of its budget. That should change release posture immediately. A sensible response might include tighter deployment guards, more canary analysis, or pausing risky changes until the service stabilizes.
Example 2: Internal CI platform reliability
Service: Shared CI runner platform
Good event: A pipeline starts within 2 minutes and completes without platform-caused failure
Window: 28 days
SLO: 99.5%
Assume the platform processes 12,000 pipeline runs in 28 days.
Error budget percentage = 0.5%
Error budget events = 12,000 × 0.005 = 60 bad events
This is a strong example for platform engineering teams because the service consumer is another engineer. If queueing delays, flaky runners, or artifact outages push more than 60 runs into failure or unacceptable delay, the team has evidence that reliability work should outrank convenience features. It also turns subjective complaints into actionable review data.
This kind of SLO pairs well with release automation and secure CI practices. If you improve runner isolation, secrets handling, or deployment safety controls, you should also watch whether the reliability target remains achievable and whether the user experience changed in a meaningful way.
Example 3: Kubernetes deployment workflow
Service: Internal deployment path to production
Good event: A standard application deployment reaches healthy state within 20 minutes without rollback
Window: 30 days
SLO: 99%
Assume teams perform 1,500 deployments per month.
Error budget percentage = 1%
Error budget events = 1,500 × 0.01 = 15 bad deployments
Now the SLO gives the platform and application teams a shared frame for deciding where to invest. If 10 of those 15 bad events come from misconfigured manifests, maybe the right response is stronger templates, policy checks, or onboarding improvements. If most failures come from cluster instability or DNS propagation issues, the platform backlog should reflect that. The number itself is not the answer. It points the team toward better conversations.
Across all three examples, the same pattern holds: define a meaningful event, count it over time, translate the target into a finite budget, and attach clear operating rules. Once the team sees the budget as a planning tool rather than a blame mechanism, the discussions improve quickly.
When to recalculate
SLOs and error budgets should not be frozen forever. They are durable, but they are not permanent. Recalculate or review them whenever the underlying inputs move enough that the current target no longer reflects real service expectations.
Revisit your SLOs when:
- Traffic or usage volume changes materially. More events can make the same percentage target much stricter in practice, especially if your architecture or support model did not scale with demand.
- User expectations change. A service that once tolerated slower responses may now sit on a critical user path where latency matters more.
- The architecture changes. A move to Kubernetes, a new edge layer, a multi-region design, or a major dependency change can all alter what is realistic and what should be measured.
- Incident patterns change. Repeated incidents of one type may show that your current good-event definition misses important user pain.
- Release velocity changes. If your team deploys far more often, error budget policy may need refinement so it still guides safe delivery rather than blocking it indiscriminately.
- Tooling quality improves. Better observability, tracing, and platform telemetry often make it possible to define a more accurate SLO than the first draft.
- Ownership changes. If a new platform team or service team takes over, review the assumptions so the SLO stays understandable and maintainable.
A practical cadence is to review each SLO after major incidents, during quarterly planning, and whenever the service crosses an important adoption threshold. Treat the review as an engineering team exercise, not a paperwork task. Ask:
- Does this SLO still describe user experience?
- Does the budget still drive sensible release decisions?
- Are we hiding pain behind exclusions or weak definitions?
- Is the target too strict, too loose, or simply unclear?
- What changed since the last review?
If you want to make this operational, end with a lightweight checklist:
- List your top three user-facing and internal developer services.
- Define one good event for each.
- Estimate monthly event volume.
- Choose an initial target and calculate the budget.
- Write one action policy for high budget burn.
- Review after the next significant incident or planning cycle.
That is enough to start. You can add sophistication later with burn-rate alerts, multiple windows, or more advanced observability integrations. But most teams get more value from one clear SLO that people use than from a large catalog nobody trusts.
For teams building a broader reliability practice, it can help to connect SLOs with adjacent processes: incident handling, safer release automation, platform standardization, and observability tooling. If you want to deepen those pieces, see Incident Response Checklist for DevOps Teams: Detection, Escalation, and Recovery, Release Automation Checklist for Safer Production Deployments, Internal Developer Platform Examples: What Mature Platform Teams Standardize, and Best Observability Tools for Modern DevOps Teams. Teams improving collaboration around CI/CD and secure delivery may also find value in GitHub Actions Examples That Scale: Reusable Workflows, Matrices, and Deployment Guards and DevSecOps Best Practices Checklist for CI/CD Pipelines.
The lasting benefit of SLOs and error budgets is not the percentage on a dashboard. It is the habit of revisiting assumptions before they become friction, incidents, or avoidable team conflict. When the system changes, the target should be reviewed. When the target changes, the policy should follow. That rhythm is what makes SLOs useful over time.