An error budget is spent by every outage, so it is only as accurate as the monitoring that records them. Hyperping records each confirmed outage per monitor with its duration, and the reporting dashboard adds up total downtime for any period. Compare that total with your budget: if a 99.9% SLO allows 43 minutes this month and the report shows 30, you have 13 minutes left.
error budget = (1 - SLO) x window
For request-based SLOs the budget is a count: at 99.9% and 10 million requests a month, 10,000 requests can fail.
It settles the argument between shipping fast and staying stable with a number both sides agreed to beforehand. While budget remains, the team ships at its normal pace and takes reasonable risks. When the budget is close to spent, reliability work comes first until the window recovers. A budget that's never touched is a sign the SLO is too loose, or the team is moving more slowly than it needs to.
Write down what happens at each level before you need it. A simple policy:
The policy only works if product and engineering leads both sign it. Otherwise the first freeze turns into a negotiation.
Burn rate is how fast the budget is being used compared to an even spend. A burn rate of 1 uses the whole budget exactly by the end of the window. A burn rate of 10 empties a 30-day budget in 3 days. Alerting on a high burn rate over the last hour catches serious incidents early, and a low but steady burn rate over days catches slow degradation.
Whatever your policy says. The usual answer is a release freeze for anything except fixes until the rolling window recovers, plus a review of the incidents that spent it.
Decide once and apply it consistently. Most teams exclude announced maintenance from the SLA but count it against the internal budget, because users still couldn't use the service.
Close, but they come from different targets. The SLA's allowed downtime is a contractual limit. The error budget comes from the internal SLO, which is usually stricter, so the budget runs out before the SLA is breached.