SLO and Error Budget Skill
Define Service Level Objectives (SLOs) and an error budget policy for a service.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/slo-error-budget. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit mohitagw15856/pm-claude-skills/skills/slo-error-budget#main ~/.claude/skills/slo-error-budgetFor one project only, change the path to .claude/skills/slo-error-budget.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Source of SLO and Error Budget Skill
Show the full text275 lines
| name | description |
|---|---|
| slo-error-budget | Define Service Level Objectives (SLOs) and an error budget policy for a service. Use when asked to write SLOs, define SLIs, calculate an error budget, set reliability targets, or create an error budget policy. Produces a complete SLO document with SLI definitions, target calculation, error budget policy, burn rate alerts, and review cadence. |
SLO and Error Budget Skill
Produce a complete, implementable SLO document for a service — covering what to measure, what target to set, how to calculate the error budget, and what to do when it burns.
A good SLO is not a target to hit. It is an agreement about what reliability means for your users — and a framework for making principled trade-offs between reliability and velocity.
Where this sits — the frame of the spine
This is the governor of the incident-response spine: slo-error-budget (frame) →
/debugging-log-analyser → /incident-postmortem → /oncall-runbook. It sets the
error budget the whole loop runs inside — the objective forcing function that later
decides whether a postmortem's action items get done now (budget spent) or deferred
(budget healthy). Shared terms (SLO, error budget, incident, action item) are defined
once in docs/craft/incident-response.md.
The loop
An SLO fails when it's aspirational instead of user-derived, or when the budget has no teeth. Phase 1 is load-bearing: a target picked from "100% minus a bit" defends nothing.
- Derive the target from users, not from 100%. Pick the SLIs that track what users actually feel (success rate, latency, freshness) and a target from what they need — the point where more reliability stops mattering to them. Done when: each SLO target traces to a stated user need, and none is 100% or a round number chosen for looking good.
- Turn the target into a budget with math. Compute the error budget (100% minus the SLO, over the window) as a concrete allowance — requests, minutes, or events — not a percentage nobody feels. Done when: the budget is expressed as a countable allowance for the window, and burn-rate alerts fire before it's spent, not after.
- Give the budget teeth — the policy is the point. Write what changes at each budget level: healthy → ship; at risk → slow and shore up; exhausted → stop feature work and fix reliability. A budget with no policy is a dashboard nobody obeys. Done when: each budget level names a specific, enforced consequence — including a real feature-freeze trigger — that a team would actually follow.
- Hand off as the loop's governor. State that this budget is what prioritises
/incident-postmortemaction items: budget spent makes them urgent, budget healthy lets them wait. Done when: the loop downstream could use this budget to decide action-item urgency without re-litigating the reliability target.
Required Inputs
Ask for these if not already provided:
- Service name and brief description of what it does
- Primary users — who depends on this service and how
- User-facing interactions to protect — e.g. API calls, page loads, transactions
- Current reliability data — error rate, latency, uptime (last 30–90 days if available)
- Existing on-call setup — who responds to alerts?
- Deployment frequency — how often does the team ship?
- Any existing SLAs with customers — these constrain SLO targets
Key Definitions
Always establish these before writing the SLO:
| Term | Definition |
|---|---|
| SLI (Service Level Indicator) | The metric being measured — e.g. "% of requests completing successfully in <500ms" |
| SLO (Service Level Objective) | The target for that metric — e.g. "99.5% of requests" |
| SLA (Service Level Agreement) | The contractual commitment to customers — must be looser than the SLO |
| Error budget | The allowed headroom below 100% — the budget for planned and unplanned downtime |
| Burn rate | How fast the error budget is being consumed |
Output Format
SLO Document: [Service Name]
Service: [Name] | Team: [Team name] Owner: [Name / role] | Approved by: [Name] Effective date: [Date] | Review date: [Date + 3 months] Version: [1.0]
Why This SLO Exists
[2–3 sentences. What reliability problem are we solving? What was happening before this SLO that made us need it? What decision-making does this SLO enable?]
Service Overview
What this service does: [One sentence] Who depends on it: [Internal teams / external customers / both — describe] Critical user journeys protected by this SLO:
- [Journey 1 — e.g. "User completes a payment"]
- [Journey 2]
- [Journey 3]
SLIs — What We Measure
Define one SLI per user journey or reliability dimension. Keep it to 3–5 SLIs maximum.
SLI 1: [Name — e.g. Request Success Rate]
| Field | Detail |
|---|---|
| What it measures | [e.g. "% of API requests that return a non-5xx response"] |
| Good event definition | [e.g. "HTTP response with status 2xx or 4xx, completed within 500ms"] |
| Bad event definition | [e.g. "HTTP response with status 5xx, or any response taking >500ms"] |
| Measurement source | [e.g. "Application load balancer access logs / Datadog APM / Prometheus"] |
| Measured over | Rolling 28-day window |
| Exclusions | [e.g. "Health check endpoints excluded / Requests during planned maintenance excluded"] |
SLI 2: [Name — e.g. Latency]
| Field | Detail |
|---|---|
| What it measures | [e.g. "P99 response time for the /checkout endpoint"] |
| Good event definition | [e.g. "Request completes in ≤500ms at P99"] |
| Bad event definition | [e.g. "Request takes >500ms at P99"] |
| Measurement source | [Source] |
| Measured over | Rolling 28-day window |
| Exclusions | [Any exclusions] |
SLI 3: [Name — e.g. Data Freshness / Queue Depth / etc.]
[Same structure]
SLO Targets
| SLI | Target | Window | Error Budget |
|---|---|---|---|
| [SLI 1 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] |
| [SLI 2 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] |
| [SLI 3 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] |
How targets were set:
- Historical baseline (last 90 days): [X]%
- Target is set [above / at] historical baseline to [improve reliability / reflect current reality while formalising the commitment]
- Rationale: [1–2 sentences]
What 100% is NOT the target: [Brief explanation of why targeting 100% is counterproductive — it discourages feature development and doesn't reflect user reality]
Error Budget Calculation
For SLI 1 ([Name]), at [X]% target:
Error budget = (100% - SLO target) × measurement window
= (100% - [X]%) × 28 days × 24 hours × 60 minutes
= [Y]% × [Z total minutes]
= [N] minutes of allowed failure per 28-day window
In plain terms: We can afford [N] minutes of [bad events] in any rolling 28-day window before we breach the SLO.
Burn Rate Alerts
Burn rate = how fast the error budget is being consumed relative to the budget window. A burn rate of 1 = consuming the budget at exactly the rate that would exhaust it over 28 days.
| Alert | Burn rate | Window | Severity | Response |
|---|---|---|---|---|
| Page (critical) | >14× | 1 hour | P1 | Page on-call immediately — budget exhausted in <2 hours |
| Page (high) | >6× | 6 hours | P2 | Page on-call — budget exhausted in <5 days |
| Ticket (warning) | >3× | 3 days | P3 | Create ticket — review at next team meeting |
| Info | >1× | 28 days | Info | Log only — budget on track to exhaust by end of window |
Alert implementation: [Link to alert config in monitoring tool — e.g. Datadog, Prometheus/Alertmanager, Grafana]
Error Budget Policy
This policy defines what to do with the error budget — both when it's healthy and when it's burning.
When budget is healthy (>50% remaining)
- Feature development and deployments proceed at normal pace
- The team may take on riskier experiments
- Reliability improvements are scheduled but not urgent
When budget is at risk (25–50% remaining)
- Deployment frequency reduced — team ships only well-tested changes
- One reliability improvement added to current sprint
- Weekly error budget review added to team standup
When budget is nearly exhausted (<25% remaining)
- Feature work paused in favour of reliability improvements
- No new deployments without explicit on-call approval
- Daily review of error budget burn rate
- CSM / support notified to manage customer expectations
When budget is exhausted (0% remaining — SLO breached)
- All feature work stops
- On-call engineer and engineering manager notified immediately
- Post-incident review (PIR) required within 5 business days
- SLO target may be temporarily relaxed (with stakeholder approval) while root cause is addressed
Dashboard and Reporting
SLO dashboard: [Link to Datadog / Grafana / etc. dashboard]
Metrics exposed:
- Current SLO compliance (rolling 28-day)
- Error budget remaining (% and minutes)
- Burn rate (current and trend)
- Incident count and MTTR this window
Reporting cadence:
| Audience | Frequency | Format |
|---|---|---|
| Engineering team | Weekly | Slack summary — #[service]-slo |
| Engineering manager | Monthly | SLO review meeting |
| Stakeholders / customers | Quarterly | SLO compliance summary |
Exclusions and Edge Cases
Planned maintenance: Error budget is not consumed during pre-announced maintenance windows. Maintenance must be communicated [X hours] in advance via [channel].
Dependency failures: If SLO breach is caused by an upstream dependency outside our control, document it — but it still counts against our error budget (our users don't distinguish between our failures and our dependencies' failures).
Force majeure: [Policy for cloud provider outages, major infrastructure events]
SLO Review Cadence
| Review | When | Who | Output |
|---|---|---|---|
| Error budget review | Weekly | Team | Budget health check — adjust if burning fast |
| SLO target review | Quarterly | Team + EM | Adjust targets if baseline has shifted significantly |
| Annual SLO audit | Annually | Team + Stakeholders | Review SLIs — are we measuring the right things? |
When to change the SLO target:
- Historical baseline has improved significantly and target no longer reflects real reliability
- User feedback indicates the target is misaligned with what users actually experience
- The SLO is being gamed (metric is healthy but users are unhappy)
Quality Checks
- SLIs are user-facing — they measure what users experience, not internal system metrics
- Good and bad events are precisely defined — no ambiguity about what counts
- Targets are based on historical data, not aspirational round numbers
- Error budget policy has clear triggers and clear actions — not "discuss as a team"
- Burn rate alerts have different windows to catch both fast burns and slow burns
- Exclusions are documented so they don't silently inflate the SLO number
Anti-Patterns
- Do not set SLO targets at 100% — this discourages feature development and does not reflect how users experience reliability
- Do not measure internal system metrics as SLIs — SLIs must reflect what users directly experience, not internal CPU or memory
- Do not write an error budget policy with vague triggers — "discuss as a team" is not an actionable policy; triggers must be specific percentages
- Do not base targets on aspirational round numbers — always derive from historical baseline data
- Do not configure only one burn-rate alert window — a single window misses both fast burns and slow burns that exhaust the budget quietly
| 1 | |
| 2 | name slo-error-budget |
| 3 | description "Define Service Level Objectives (SLOs) and an error budget policy for a service. Use when asked to write SLOs, define SLIs, calculate an error budget, set reliability targets, or create an error budget policy. Produces a complete SLO document with SLI definitions, target calculation, error budget policy, burn rate alerts, and review cadence." |
| 4 | |
| 5 | |
| 6 | # SLO and Error Budget Skill |
| 7 | |
| 8 | Produce a complete, implementable SLO document for a service — covering what to measure, what target to set, how to calculate the error budget, and what to do when it burns. |
| 9 | |
| 10 | A good SLO is not a target to hit. It is an agreement about what reliability means for your users — and a framework for making principled trade-offs between reliability and velocity. |
| 11 | |
| 12 | ## Where this sits — the frame of the spine |
| 13 | |
| 14 | This is the governor of the incident-response spine: **`slo-error-budget` (frame) → |
| 15 | `/debugging-log-analyser` → `/incident-postmortem` → `/oncall-runbook`**. It sets the |
| 16 | **error budget** the whole loop runs inside — the objective forcing function that later |
| 17 | decides whether a postmortem's action items get done now (budget spent) or deferred |
| 18 | (budget healthy). Shared terms (SLO, error budget, incident, action item) are defined |
| 19 | once in [`docs/craft/incident-response.md`]. |
| 20 | |
| 21 | ## The loop |
| 22 | |
| 23 | An SLO fails when it's aspirational instead of user-derived, or when the budget has no |
| 24 | teeth. Phase 1 is load-bearing: a target picked from "100% minus a bit" defends nothing. |
| 25 | |
| 26 | **Derive the target from users, not from 100%.** Pick the SLIs that track what users |
| 27 | actually feel (success rate, latency, freshness) and a target from what they need — |
| 28 | the point where more reliability stops mattering to them. |
| 29 | **Done when:** each SLO target traces to a stated user need, and none is 100% or a |
| 30 | round number chosen for looking good. |
| 31 | **Turn the target into a budget with math.** Compute the error budget (100% minus the |
| 32 | SLO, over the window) as a concrete allowance — requests, minutes, or events — not a |
| 33 | percentage nobody feels. |
| 34 | **Done when:** the budget is expressed as a countable allowance for the window, and |
| 35 | burn-rate alerts fire before it's spent, not after. |
| 36 | **Give the budget teeth — the policy is the point.** Write what *changes* at each |
| 37 | budget level: healthy → ship; at risk → slow and shore up; exhausted → stop feature |
| 38 | work and fix reliability. A budget with no policy is a dashboard nobody obeys. |
| 39 | **Done when:** each budget level names a specific, enforced consequence — including a |
| 40 | real feature-freeze trigger — that a team would actually follow. |
| 41 | **Hand off as the loop's governor.** State that this budget is what prioritises |
| 42 | `/incident-postmortem` action items: budget spent makes them urgent, budget healthy |
| 43 | lets them wait. |
| 44 | **Done when:** the loop downstream could use this budget to decide action-item urgency |
| 45 | without re-litigating the reliability target. |
| 46 | |
| 47 | ## Required Inputs |
| 48 | |
| 49 | Ask for these if not already provided: |
| 50 | **Service name** and brief description of what it does |
| 51 | **Primary users** — who depends on this service and how |
| 52 | **User-facing interactions** to protect — e.g. API calls, page loads, transactions |
| 53 | **Current reliability data** — error rate, latency, uptime (last 30–90 days if available) |
| 54 | **Existing on-call setup** — who responds to alerts? |
| 55 | **Deployment frequency** — how often does the team ship? |
| 56 | **Any existing SLAs** with customers — these constrain SLO targets |
| 57 | |
| 58 | ## Key Definitions |
| 59 | |
| 60 | Always establish these before writing the SLO: |
| 61 | |
| 62 | | Term | Definition | |
| 63 | |---|---| |
| 64 | | **SLI** (Service Level Indicator) | The metric being measured — e.g. "% of requests completing successfully in <500ms" | |
| 65 | | **SLO** (Service Level Objective) | The target for that metric — e.g. "99.5% of requests" | |
| 66 | | **SLA** (Service Level Agreement) | The contractual commitment to customers — must be looser than the SLO | |
| 67 | | **Error budget** | The allowed headroom below 100% — the budget for planned and unplanned downtime | |
| 68 | | **Burn rate** | How fast the error budget is being consumed | |
| 69 | |
| 70 | |
| 71 | |
| 72 | ## Output Format |
| 73 | |
| 74 | |
| 75 | |
| 76 | # SLO Document: [Service Name] |
| 77 | |
| 78 | **Service:** [Name] | **Team:** [Team name] |
| 79 | **Owner:** [Name / role] | **Approved by:** [Name] |
| 80 | **Effective date:** [Date] | **Review date:** [Date + 3 months] |
| 81 | **Version:** [1.0] |
| 82 | |
| 83 | |
| 84 | |
| 85 | ## Why This SLO Exists |
| 86 | |
| 87 | [2–3 sentences. What reliability problem are we solving? What was happening before this SLO that made us need it? What decision-making does this SLO enable?] |
| 88 | |
| 89 | |
| 90 | |
| 91 | ## Service Overview |
| 92 | |
| 93 | **What this service does:** [One sentence] |
| 94 | **Who depends on it:** [Internal teams / external customers / both — describe] |
| 95 | **Critical user journeys protected by this SLO:** |
| 96 | [Journey 1 — e.g. "User completes a payment"] |
| 97 | [Journey 2] |
| 98 | [Journey 3] |
| 99 | |
| 100 | |
| 101 | |
| 102 | ## SLIs — What We Measure |
| 103 | |
| 104 | Define one SLI per user journey or reliability dimension. Keep it to 3–5 SLIs maximum. |
| 105 | |
| 106 | ### SLI 1: [Name — e.g. Request Success Rate] |
| 107 | |
| 108 | | Field | Detail | |
| 109 | |---|---| |
| 110 | | **What it measures** | [e.g. "% of API requests that return a non-5xx response"] | |
| 111 | | **Good event definition** | [e.g. "HTTP response with status 2xx or 4xx, completed within 500ms"] | |
| 112 | | **Bad event definition** | [e.g. "HTTP response with status 5xx, or any response taking >500ms"] | |
| 113 | | **Measurement source** | [e.g. "Application load balancer access logs / Datadog APM / Prometheus"] | |
| 114 | | **Measured over** | Rolling 28-day window | |
| 115 | | **Exclusions** | [e.g. "Health check endpoints excluded / Requests during planned maintenance excluded"] | |
| 116 | |
| 117 | ### SLI 2: [Name — e.g. Latency] |
| 118 | |
| 119 | | Field | Detail | |
| 120 | |---|---| |
| 121 | | **What it measures** | [e.g. "P99 response time for the /checkout endpoint"] | |
| 122 | | **Good event definition** | [e.g. "Request completes in ≤500ms at P99"] | |
| 123 | | **Bad event definition** | [e.g. "Request takes >500ms at P99"] | |
| 124 | | **Measurement source** | [Source] | |
| 125 | | **Measured over** | Rolling 28-day window | |
| 126 | | **Exclusions** | [Any exclusions] | |
| 127 | |
| 128 | ### SLI 3: [Name — e.g. Data Freshness / Queue Depth / etc.] |
| 129 | |
| 130 | [Same structure] |
| 131 | |
| 132 | |
| 133 | |
| 134 | ## SLO Targets |
| 135 | |
| 136 | | SLI | Target | Window | Error Budget | |
| 137 | |---|---|---|---| |
| 138 | | [SLI 1 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] | |
| 139 | | [SLI 2 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] | |
| 140 | | [SLI 3 name] | [X]% | 28-day rolling | [100 - X]% = [Y minutes/month] | |
| 141 | |
| 142 | **How targets were set:** |
| 143 | Historical baseline (last 90 days): [X]% |
| 144 | Target is set [above / at] historical baseline to [improve reliability / reflect current reality while formalising the commitment] |
| 145 | Rationale: [1–2 sentences] |
| 146 | |
| 147 | **What 100% is NOT the target:** [Brief explanation of why targeting 100% is counterproductive — it discourages feature development and doesn't reflect user reality] |
| 148 | |
| 149 | |
| 150 | |
| 151 | ## Error Budget Calculation |
| 152 | |
| 153 | **For SLI 1 ([Name]), at [X]% target:** |
| 154 | |
| 155 | |
| 156 | Error budget = (100% - SLO target) × measurement window |
| 157 | = (100% - [X]%) × 28 days × 24 hours × 60 minutes |
| 158 | = [Y]% × [Z total minutes] |
| 159 | = [N] minutes of allowed failure per 28-day window |
| 160 | |
| 161 | |
| 162 | **In plain terms:** We can afford [N] minutes of [bad events] in any rolling 28-day window before we breach the SLO. |
| 163 | |
| 164 | |
| 165 | |
| 166 | ## Burn Rate Alerts |
| 167 | |
| 168 | Burn rate = how fast the error budget is being consumed relative to the budget window. |
| 169 | A burn rate of 1 = consuming the budget at exactly the rate that would exhaust it over 28 days. |
| 170 | |
| 171 | | Alert | Burn rate | Window | Severity | Response | |
| 172 | |---|---|---|---|---| |
| 173 | | Page (critical) | >14× | 1 hour | P1 | Page on-call immediately — budget exhausted in <2 hours | |
| 174 | | Page (high) | >6× | 6 hours | P2 | Page on-call — budget exhausted in <5 days | |
| 175 | | Ticket (warning) | >3× | 3 days | P3 | Create ticket — review at next team meeting | |
| 176 | | Info | >1× | 28 days | Info | Log only — budget on track to exhaust by end of window | |
| 177 | |
| 178 | **Alert implementation:** [Link to alert config in monitoring tool — e.g. Datadog, Prometheus/Alertmanager, Grafana] |
| 179 | |
| 180 | |
| 181 | |
| 182 | ## Error Budget Policy |
| 183 | |
| 184 | This policy defines what to do with the error budget — both when it's healthy and when it's burning. |
| 185 | |
| 186 | ### When budget is healthy (>50% remaining) |
| 187 | |
| 188 | Feature development and deployments proceed at normal pace |
| 189 | The team may take on riskier experiments |
| 190 | Reliability improvements are scheduled but not urgent |
| 191 | |
| 192 | ### When budget is at risk (25–50% remaining) |
| 193 | |
| 194 | Deployment frequency reduced — team ships only well-tested changes |
| 195 | One reliability improvement added to current sprint |
| 196 | Weekly error budget review added to team standup |
| 197 | |
| 198 | ### When budget is nearly exhausted (<25% remaining) |
| 199 | |
| 200 | Feature work paused in favour of reliability improvements |
| 201 | No new deployments without explicit on-call approval |
| 202 | Daily review of error budget burn rate |
| 203 | CSM / support notified to manage customer expectations |
| 204 | |
| 205 | ### When budget is exhausted (0% remaining — SLO breached) |
| 206 | |
| 207 | All feature work stops |
| 208 | On-call engineer and engineering manager notified immediately |
| 209 | Post-incident review (PIR) required within 5 business days |
| 210 | SLO target may be temporarily relaxed (with stakeholder approval) while root cause is addressed |
| 211 | |
| 212 | |
| 213 | |
| 214 | ## Dashboard and Reporting |
| 215 | |
| 216 | **SLO dashboard:** [Link to Datadog / Grafana / etc. dashboard] |
| 217 | |
| 218 | **Metrics exposed:** |
| 219 | Current SLO compliance (rolling 28-day) |
| 220 | Error budget remaining (% and minutes) |
| 221 | Burn rate (current and trend) |
| 222 | Incident count and MTTR this window |
| 223 | |
| 224 | **Reporting cadence:** |
| 225 | |
| 226 | | Audience | Frequency | Format | |
| 227 | |---|---|---| |
| 228 | | Engineering team | Weekly | Slack summary — #[service]-slo | |
| 229 | | Engineering manager | Monthly | SLO review meeting | |
| 230 | | Stakeholders / customers | Quarterly | SLO compliance summary | |
| 231 | |
| 232 | |
| 233 | |
| 234 | ## Exclusions and Edge Cases |
| 235 | |
| 236 | **Planned maintenance:** Error budget is not consumed during pre-announced maintenance windows. Maintenance must be communicated [X hours] in advance via [channel]. |
| 237 | |
| 238 | **Dependency failures:** If SLO breach is caused by an upstream dependency outside our control, document it — but it still counts against our error budget (our users don't distinguish between our failures and our dependencies' failures). |
| 239 | |
| 240 | **Force majeure:** [Policy for cloud provider outages, major infrastructure events] |
| 241 | |
| 242 | |
| 243 | |
| 244 | ## SLO Review Cadence |
| 245 | |
| 246 | | Review | When | Who | Output | |
| 247 | |---|---|---|---| |
| 248 | | Error budget review | Weekly | Team | Budget health check — adjust if burning fast | |
| 249 | | SLO target review | Quarterly | Team + EM | Adjust targets if baseline has shifted significantly | |
| 250 | | Annual SLO audit | Annually | Team + Stakeholders | Review SLIs — are we measuring the right things? | |
| 251 | |
| 252 | **When to change the SLO target:** |
| 253 | Historical baseline has improved significantly and target no longer reflects real reliability |
| 254 | User feedback indicates the target is misaligned with what users actually experience |
| 255 | The SLO is being gamed (metric is healthy but users are unhappy) |
| 256 | |
| 257 | |
| 258 | |
| 259 | ## Quality Checks |
| 260 | |
| 261 | [ ] SLIs are user-facing — they measure what users experience, not internal system metrics |
| 262 | [ ] Good and bad events are precisely defined — no ambiguity about what counts |
| 263 | [ ] Targets are based on historical data, not aspirational round numbers |
| 264 | [ ] Error budget policy has clear triggers and clear actions — not "discuss as a team" |
| 265 | [ ] Burn rate alerts have different windows to catch both fast burns and slow burns |
| 266 | [ ] Exclusions are documented so they don't silently inflate the SLO number |
| 267 | |
| 268 | ## Anti-Patterns |
| 269 | |
| 270 | [ ] Do not set SLO targets at 100% — this discourages feature development and does not reflect how users experience reliability |
| 271 | [ ] Do not measure internal system metrics as SLIs — SLIs must reflect what users directly experience, not internal CPU or memory |
| 272 | [ ] Do not write an error budget policy with vague triggers — "discuss as a team" is not an actionable policy; triggers must be specific percentages |
| 273 | [ ] Do not base targets on aspirational round numbers — always derive from historical baseline data |
| 274 | [ ] Do not configure only one burn-rate alert window — a single window misses both fast burns and slow burns that exhaust the budget quietly |
| 275 |
Discussion
Browse more free Claude skills or everything in Finance.


