What Is an SLO? A Plain-English Guide With a Sheets Tracker

Summary

What is an SLO? A service level objective is a reliability target written as a number over a time window, like 99.9% of requests succeeding over 30 days. The gap between 100% and your target is the error budget: 43.2 minutes a month at 99.9%. This guide sorts out SLI, SLO and SLA, then gives you the Excel and Google Sheets formulas to track budget, burn rate and release status.

Golden retriever sitting next to a laptop showing a green availability chart

So, what is an SLO? A service level objective is a reliability target you set for a service, written as a number over a time window. "99.9% of requests succeed over 30 days" is an SLO. It tells your team how much failure is acceptable before you stop shipping and start fixing. The math behind it is plain division, which is why a spreadsheet handles it fine.

Biscuit has already fetched the formulas. You bring the numbers.

The three acronyms you keep seeing, sorted out

SLI, SLO, SLA. People mix them up in meetings, so here is the short version.

The cleanest test comes from Google's SRE book: ask what happens if you miss the target. If nothing contractual happens, you are looking at an SLO, not an SLA. Your SLO should be tighter than any SLA you have signed, so you get a warning before a customer gets a refund.

In spreadsheet terms: the SLI is a column of measurements, the SLO is one cell with the target, and the SLA is a PDF somebody in legal keeps.

Why 99.9% and 99.99% are very different promises

Every extra nine cuts your allowed downtime by a factor of ten. Over a 30-day month (43,200 minutes), here is what each target leaves you:

That last line is the trap. Four minutes a month means a human cannot even finish reading the alert before the budget is gone. Most internal tools, dashboards and small SaaS products do not need it, and chasing it costs real money in redundancy and on-call hours.

Skip 99.99% unless a customer is paying you specifically for it. Google's advice is blunt too: start with a loose target you can tighten later, because a strict one you have to relax teaches everyone to ignore the number.

Close-up of a fuel gauge needle, a picture of an error budget being spent

The error budget: the number your team actually argues about

The error budget is whatever the SLO leaves over. Target 99.9%, so the budget is 0.1%. Over 30 days, that is 43.2 minutes of "bad" time you are allowed to spend.

Think of it as a fuel gauge. Risky deploys burn fuel. A bad database migration burns fuel. An outage at 3 a.m. burns a lot of fuel. When the tank is full, ship faster. When it is empty, stop adding features and fix reliability.

Google's own sample policy is concrete about it: if a service blows its budget over a four-week window, all changes stop except P0 fixes and security patches until the service is back inside its SLO. The budget is a negotiation tool, not a punishment. It lets a product manager and an engineer argue from the same cell instead of from gut feeling.

Worth the trouble if you have more than one team touching the same service. Overkill if you are a solo founder with one landing page and a contact form.

Picking an SLI your users would recognize

The best SLIs describe a moment a person would notice. Three cover most services:

Write the SLI as a fraction: good events divided by valid events. That one habit makes every SLO calculable in a single cell, and it forces you to decide what counts as "good" before the incident, not during it.

For the window, a rolling 30 days is the usual pick. A calendar month is simpler to report but resets the budget on the 1st, which tempts teams to push risky releases at month end. In a sheet, a rolling window just means filtering the Incidents tab to the last 30 days with SUMIFS(Incidents!C:C,Incidents!A:A,">="&TODAY()-30).

Build an SLO tracker in Google Sheets or Excel in 10 minutes

You do not need a monitoring platform to start. You need two tabs: Incidents and SLO.

On the Incidents tab, log every outage with a start time in column A, an end time in column B, and the duration in column C:

=(B2-A2)*24*60

Works in both Excel and Sheets, all versions.

Now the SLO tab. Put these labels in column A and the formulas in column B:

B1: 0.999                         (your SLO target)
B2: 30                            (window in days)
B3: =B2*24*60                     (total minutes in the window)
B4: =B3*(1-B1)                    (error budget in minutes)
B5: =SUM(Incidents!C2:C)          (downtime so far)
B6: =1-B5/B3                      (actual availability)
B7: =B4-B5                        (budget left, in minutes)
B8: =B5/B4                        (share of budget burned)

With a 99.9% target, B3 returns 43200 and B4 returns 43.2. Log a 12-minute outage and B8 shows 27.8%. Voilà ce que ça donne dans une vraie cellule.

A note on C2:C in B5: the open-ended range is Sheets syntax. In Excel, use a fixed range like Incidents!C2:C500 or a table reference.

Add a status cell so nobody has to read the number:

=IF(B8>=1,"Freeze releases",IF(B8>=0.5,"Careful","Ship it"))

Pick your own thresholds. Fifty percent is a starting guess, not a law of physics.

Stuck on the syntax for your own version of this sheet? Describe it in plain English and let the tool write it.

Counting requests instead of minutes

Time-based tracking is easy to explain but crude. If your service is "down" for 5 minutes at 4 a.m. when nobody is online, that hurts less than 5 minutes at noon. Most serious teams define the SLI by requests instead.

Paste an export of your request log into a tab, with the HTTP status code in column B. Then:

=1-COUNTIF(B2:B,">=500")/COUNTA(B2:B)

The result is your availability SLI as a fraction. Compare it to the target cell and you have the whole SLO in one line. Excel 2016 and 365 both accept COUNTIF; just swap B2:B for a bounded range.

Two honest warnings. Spreadsheets choke on millions of rows, so export daily totals instead of raw logs. And a 4xx response is usually the user's mistake, not your outage, so decide that rule once and write it down.

Notebook, pencil, coffee and a stopwatch laid out for tracking uptime by hand

Burn rate: the formula that warns you before it is too late

Knowing you burned 27.8% of your budget is nice. Knowing you are burning it faster than the calendar is useful. That ratio is the burn rate.

=B8/(B9/B2)

A burn rate of 1 means you will finish the window with exactly zero budget left. Above 1, you are heading for a freeze. Below 1, you have room. If you are 10 days into a 30-day window and already burned 60%, the burn rate is 1.8. That is the number to put on a screen.

This is the same idea the big monitoring tools use for burn-rate alerts. A sheet will not page you at 3 a.m., though, so treat it as a reporting layer, not an alarm.

Here is a worked example with real numbers. Your SLO is 99.9% over 30 days, so the budget is 43.2 minutes. Day 1 to 8: a bad deploy takes the checkout page down for 14 minutes. That is 32.4% of the budget gone in a quarter of the window, a burn rate of about 1.2. Nothing is on fire, but the sheet now says "Careful", and the next risky migration gets a second look. Day 15: a provider outage adds 30 minutes. Total 44 minutes, 101.9% burned. The status cell flips to "Freeze releases", and the conversation about priorities happens with a number on the table instead of a feeling.

That is the whole value of the exercise. Not the nines, but the shared cell everyone can point at.

When the spreadsheet stops being enough

A tracker like this works for one or two services and a weekly review. It breaks down when you have dozens of services, need automatic data collection, or want alerts that fire in minutes rather than at the next Monday meeting.

Time to look at a proper observability tool. Datadog and Grafana both have native SLO features that pull the SLI straight from your metrics and draw the budget for you.

Pick Grafana if you want open source and already run Prometheus. Pick Datadog if you would rather pay to not run anything yourself. Either way, keep the sheet around for the monthly review deck, because everybody in the room can open it and nobody needs a login to a vendor.

If you want help drafting a first set of SLIs for a service, a general assistant is a decent brainstorming partner. Verify every number it gives you, since it will happily invent a plausible-sounding target.

Mistakes that make an SLO useless, and what to do on Monday

A few patterns that Biscuit has seen end badly:

Golden retriever asleep in a quiet home office at night while the dashboard stays green

Now the Monday part. Pick one service. Write down one SLI in a single sentence a non-engineer could follow. Set a loose target, 99.5% or 99.9%. Build the two tabs above, log last month's incidents, and see what the budget says.

If the answer is "we burned 300% of it", you just found out why everybody feels tired. If the answer is "we burned 4%", tighten the target or ship faster. Either way, you now have a number to argue about instead of a feeling.

Good boy. Now go and log those incidents.

Frequently asked questions

What is an SLO in simple terms?
An SLO (service level objective) is a reliability target for a service, such as '99.9% of requests succeed over 30 days'. It turns a vague goal like 'be reliable' into a number your team can measure and track.
What is the difference between an SLO and an SLA?
An SLO is an internal target. An SLA is a contract with consequences, usually refunds or credits, if the target is missed. If missing the number carries no contractual penalty, it is an SLO. Set your SLO tighter than your SLA.
What is an error budget?
The error budget is the amount of failure your SLO allows. A 99.9% SLO leaves a 0.1% budget, which is 43.2 minutes of downtime over 30 days. Teams spend it on incidents and risky releases, and slow down when it runs out.
How do you calculate an SLO in Excel or Google Sheets?
Compute total minutes in the window (days*24*60), multiply by (1 - target) to get the budget, then subtract logged downtime. For request-based SLIs, divide good requests by total requests, for example with COUNTIFS and COUNTA.
What is a good SLO target?
Start loose, then tighten. 99.5% or 99.9% fits most internal tools and small products. 99.99% leaves about 4 minutes of downtime a month and is rarely worth the cost unless a customer pays for it.
How many SLOs should a service have?
Two or three that map to what users actually feel, such as availability and latency. More than that and nobody remembers which one drives decisions.