SLOs, error budgets and alerts

Observability and operations Mid-level Python 3.13+ PostgreSQL 17+ Reviewed By Best Latest Apps

Predict the output

What do the two lines print?

Python 3.13
slo = 0.999
minutes_30_days = 30 * 24 * 60
budget = (1 - slo) * minutes_30_days
print(round(budget, 1))

error_rate = 0.0144  # observed over the last hour
burn = error_rate / (1 - slo)
print(round(burn, 1))

Options
Hint 1 of 1

1 − 0.999 = 0.001

Choose an answer, then open Show answer below to check it.

Show answer

Answer: A 43.2 then 14.4

Correct. 0.1% of 43,200 minutes, and an error rate 14.4× the allowed 0.1%.

A 99.9% SLO allows 0.1% failure: 43.2 of the 43,200 minutes in 30 days. Burn rate is the observed error rate divided by that allowance, and 14.4× would use a month's budget in about two days.

Why not the others?
  • B 43.2 then 1.4. 0.0144 / 0.001 is 14.4.
  • C 4.3 then 14.4. 30 days is 43,200 minutes.
  • D 432.0 then 144.0. The budget is 0.1%, not 1%.

30-second answer

An SLI is a measured ratio of good events, like the share of requests that succeed under 300 ms. An SLO is the target for it over a window, say 99.9% over 30 days. The error budget is what's left: 0.1% of requests, or about 43 minutes of full downtime in 30 days. Alert on burn rate, how fast you're spending the budget, using a fast window for sharp outages and a slow one for steady leaks, so pages mean users are hurting.

Practise saying it · 35 s. No recording, just a timer

Explain SLOs.

Say your answer out loud, then check which of these points you covered:

  • SLI ratio
  • SLO target + window
  • Error budget
  • Burn-rate alerts
  • Page on symptoms

Deep dive

A burn rate of 1 spends the budget exactly over the window; 14.4 spends 2% of a 30-day budget in an hour.

Page on symptoms users feel; send cause-based signals to dashboards or tickets.

An exhausted budget is a reason to pause risky launches.

SLOs below 100% on purpose: chasing 100% costs more than users notice.

Budget and burn rate for a 99.9% SLO Ran on Python 3.13.5 · mypy --strict
Python 3.13
slo = 0.999
minutes_30_days = 30 * 24 * 60
budget = (1 - slo) * minutes_30_days
print(round(budget, 1))

error_rate = 0.0144  # observed over the last hour
burn = error_rate / (1 - slo)
print(round(burn, 1))

Common mistakes

  • Paging on CPU or memory thresholds.
  • An SLO of 100%.
  • Alerts nobody acts on.

Senior take & follow-ups

Define SLI, SLO, budget with numbers, then burn-rate alerting and symptom-based pages.

Follow-up questions

Think of your answer first, then open the hint.

  1. What does burn rate 14.4 mean for a 30-day window?

    Show hint

    2% of the monthly budget gone in one hour.

  2. Why not alert on CPU?

    Show hint

    High CPU often hurts no one; users feel errors and latency.

Suggest a fix if something here is wrong or out of date.