Reliability & SRE
SLI/SLO/SLA and error budgets, availability math, burn-rate alerts, the golden signals, toil, incident response and blameless post-mortems, chaos engineering and DR.
14 questions
JuniorTheoryVery commonWhat is an error budget, and how is it computed from an SLO?
What is an error budget, and how is it computed from an SLO?
An error budget is the unreliability an SLO permits: budget = 100% − SLO. A 99.9% monthly SLO allows 0.1% failure — about 43 minutes of downtime. It is a shared currency: while budget remains you ship fast; once spent you freeze risky releases. So 100% is the wrong target — you budget for failure.
Common mistakes
- ✗Confusing the budget with the SLO percentage instead of 100% minus it
- ✗Treating 100% reliability as the goal rather than a target you budget below
- ✗Not linking a spent budget to a freeze on risky releases
Follow-up questions
- →How much downtime does a 99.95% monthly SLO budget allow?
- →What should a team do the moment its error budget is exhausted?
JuniorTheoryVery commonWhat are an SLI, an SLO and an SLA, and how do the three relate?
What are an SLI, an SLO and an SLA, and how do the three relate?
An SLI is a measured signal of service health — good events over valid events, like the fraction of requests served under 300ms. An SLO is the internal target set on that SLI over a window, say 99.9% monthly. An SLA is an external contract promising customers a level, with consequences if missed; keep the SLO stricter than the SLA.
Common mistakes
- ✗Treating SLI, SLO and SLA as synonyms rather than signal, target and contract
- ✗Setting the SLO equal to or looser than the SLA instead of stricter
- ✗Thinking an SLA has no penalty clause — its consequences are the point
Follow-up questions
- →Why is 100% almost never the right SLO target for a service?
- →Why is the SLA usually looser than the internal SLO?
JuniorTheoryCommonWhat are the four golden signals of monitoring?
What are the four golden signals of monitoring?
The four golden signals from Google SRE are latency (how long requests take, split by success versus error), traffic (demand on the system, like requests per second), errors (the rate of failed requests), and saturation (how full the most constrained resource is). RED and USE are close cousins.
Common mistakes
- ✗Listing raw host resources (CPU/RAM) instead of the request-level signals
- ✗Dropping saturation or forgetting to split latency by success and error
- ✗Confusing the golden signals with the three-metric RED method
Follow-up questions
- →How does the USE method differ from the golden signals?
- →Why should latency be tracked separately for successful and failed requests?
MiddleTheoryCommon99.9% availability — how much downtime does that allow per year and per month?
99.9% availability — how much downtime does that allow per year and per month?
Availability is uptime over total time, so 99.9% permits 0.1% downtime: about 8.76 hours a year, 43 minutes a 30-day month, or 10 minutes a week. Each added nine cuts the budget roughly tenfold — 99.99% is about 52 minutes a year. This downtime budget is exactly the SLO's error budget.
Common mistakes
- ✗Confusing the downtime figure by a factor of 60 (minutes vs hours)
- ✗Thinking an added nine widens rather than tightens the budget
- ✗Not seeing the downtime budget is the SLO's error budget
Follow-up questions
- →How much monthly downtime does a 99.95% SLO allow?
- →Why is chasing an extra nine each time exponentially more expensive?
MiddleTheoryCommonWhat is a burn-rate alert, and why is it better than a static error threshold?
What is a burn-rate alert, and why is it better than a static error threshold?
Burn rate is how fast you spend the error budget versus the SLO window: rate 1 spends the whole budget over the window, 14x spends it 14× faster. A burn-rate alert fires on that speed, usually over a long window for signal plus a short one to confirm. Unlike a static threshold it tracks SLO impact: it pages on fast burns, ignores blips.
Common mistakes
- ✗Reading burn rate as a host metric rather than budget-spend speed
- ✗Thinking one window is enough instead of a long-plus-short pair
- ✗Assuming a static threshold detects SLO impact as well as burn rate
Follow-up questions
- →Why does a short secondary window reduce false pages on a burn-rate alert?
- →What burn rate would spend a monthly budget in a single hour?
MiddleTheoryCommonWhat do MTTR and MTBF measure, and how does incident severity fit in?
What do MTTR and MTBF measure, and how does incident severity fit in?
MTTR (mean time to recovery) is the mean time from incident to recovery; MTBF (mean time between failures) is the average uptime between incidents. Availability rises with MTBF, falls with MTTR. MTTR = detect + acknowledge + diagnose + fix, and faster detection via the golden signals wins most. Severity sets response urgency.
Common mistakes
- ✗Swapping the meanings of MTTR and MTBF
- ✗Treating MTTR as fix-time only, ignoring detection and diagnosis
- ✗Assigning severity without letting it drive response urgency
Follow-up questions
- →Which part of MTTR usually offers the biggest reduction, and why?
- →How would you define the boundary between a SEV1 and a SEV2?
SeniorDesignCommonA core dependency of your service — a recommendations backend — periodically becomes slow or unavailable, and today that takes your whole product down with it. Design graceful degradation so the product stays useful when the dependency fails. Cover what a reduced-but-useful experience looks like (fallbacks, cached or default responses, turning off non-critical features), how load shedding protects the core under overload, and the roles of timeouts, circuit breakers and bulkheads in stopping the failure from spreading. Explain how you decide what to shed or degrade first.
A core dependency of your service — a recommendations backend — periodically becomes slow or unavailable, and today that takes your whole product down with it. Design graceful degradation so the product stays useful when the dependency fails. Cover what a reduced-but-useful experience looks like (fallbacks, cached or default responses, turning off non-critical features), how load shedding protects the core under overload, and the roles of timeouts, circuit breakers and bulkheads in stopping the failure from spreading. Explain how you decide what to shed or degrade first.
Degrade instead of failing: serve a reduced but useful experience — cached or default responses, or hide the non-critical feature — when the dependency is down. Put a timeout on every call so a slow dependency cannot pin threads, a circuit breaker to fail fast (probing in half-open), and bulkheads to isolate its pool. Under overload, shed low-priority traffic early, prioritizing by user value.
Common mistakes
- ✗Failing the whole product instead of serving a degraded experience
- ✗Calling a dependency with no timeout, so slow calls pin all threads
- ✗Shedding critical traffic first instead of low-priority traffic
Follow-up questions
- →How does a circuit breaker's half-open state safely test recovery?
- →What makes a good fallback for a personalization feature that is down?
SeniorDesignCommonYou run a payments API. Product wants weekly feature releases, but last quarter's incidents hurt customers and trust. Design an SLO and an error-budget policy that keeps release velocity high while protecting reliability. Cover how you pick the SLIs, the SLO target and window, how the budget is computed and tracked, and concretely what happens to feature releases as the budget is consumed and once it is exhausted — including who decides and how a freeze is lifted. Explain why the target is deliberately below 100%.
You run a payments API. Product wants weekly feature releases, but last quarter's incidents hurt customers and trust. Design an SLO and an error-budget policy that keeps release velocity high while protecting reliability. Cover how you pick the SLIs, the SLO target and window, how the budget is computed and tracked, and concretely what happens to feature releases as the budget is consumed and once it is exhausted — including who decides and how a freeze is lifted. Explain why the target is deliberately below 100%.
Pick SLIs from user-facing success and latency, set an SLO like 99.9% over a rolling 28 days, and define the error budget as 1 − SLO. While budget remains, ship weekly; as it nears zero, slow risky changes; once exhausted, freeze feature releases (reliability and security fixes only) until it recovers, per a rule dev and SRE agreed up front. The target sits below 100% to budget for failure.
Common mistakes
- ✗Targeting 100% instead of an SLO you deliberately set below it
- ✗Making the internal SLO looser than the external SLA
- ✗Having no agreed rule for freezing releases when the budget is spent
Follow-up questions
- →How would you handle a single incident that burns most of the budget at once?
- →Should a security hotfix be exempt from the freeze, and why?
MiddleTheoryOccasionalWhat makes a postmortem blameless, and what should it contain?
What makes a postmortem blameless, and what should it contain?
A postmortem is the record after a significant incident: a timeline reconstructed from monitoring and the golden signals, the user impact, causes, and action items with owners. Blameless means it targets systemic and process gaps, not individuals — everyone acted reasonably given what they knew — so people report honestly and the team learns.
Common mistakes
- ✗Focusing the postmortem on who to blame rather than systemic gaps
- ✗Omitting action items with owners, so nothing is fixed
- ✗Skipping the timeline reconstructed from monitoring and signals
Follow-up questions
- →Why does blame make future incident timelines less accurate?
- →How do you make sure a postmortem's action items actually get done?
MiddleTheoryOccasionalWhat is toil in SRE, and how do teams cap and reduce it?
What is toil in SRE, and how do teams cap and reduce it?
Toil is manual, repetitive, automatable, tactical work that scales linearly with the service and adds no lasting value — like hand-running the same restart. Meetings are not toil. The SRE model caps it near 50% to fund engineering that removes future toil.
Common mistakes
- ✗Calling any disliked work toil, including meetings and planning
- ✗Leaving toil uncapped instead of near 50% of time
- ✗Never measuring toil, so the biggest sources go un-automated
Follow-up questions
- →Why does toil that scales linearly with the service eventually swamp a team?
- →How would you decide which toil source to automate first?
SeniorDesignOccasionalA marketing campaign will drive an expected 5x traffic spike to your service on a known date. Design a capacity plan so it stays within its latency SLO through the peak. Cover how you estimate the peak demand, how you turn that into a per-instance capacity model (load-testing to find max throughput at target latency), how much headroom you add and why, how autoscaling and its limits fit in, and which downstream dependencies (database, quotas, third parties) you must check. Explain how you would verify the plan before the event.
A marketing campaign will drive an expected 5x traffic spike to your service on a known date. Design a capacity plan so it stays within its latency SLO through the peak. Cover how you estimate the peak demand, how you turn that into a per-instance capacity model (load-testing to find max throughput at target latency), how much headroom you add and why, how autoscaling and its limits fit in, and which downstream dependencies (database, quotas, third parties) you must check. Explain how you would verify the plan before the event.
Estimate peak demand (baseline times the 5x multiplier plus growth), then load-test one instance for its max throughput at target latency — the per-unit model. Provision for the peak with headroom (N+1 plus room for a lost zone and spikes), not 100% use. Set autoscaling limits, confirm downstreams (DB, quotas, third parties) scale, and load-test before the event.
Common mistakes
- ✗Running at 100% utilization with no headroom for spikes or a lost zone
- ✗Sizing only the service while a downstream (DB, quota) bottlenecks
- ✗Not load-testing the plan at target scale before the event
Follow-up questions
- →How much headroom would you keep, and how does a possible zone loss change it?
- →Why can autoscaling alone fail to save you during a sudden 5x spike?
SeniorDesignOccasionalYour service runs in a single cloud region, and a regional outage would take it fully offline. Leadership wants it to survive the loss of an entire region. Design a multi-region reliability posture. Compare active-active versus active-passive (warm standby), and cover how traffic fails over (global load balancer or DNS with health checks), how data is replicated and the RPO/RTO that implies, the cost and consistency trade-offs, and how you would regularly test failover. Explain the main risks, such as split-brain and cross-region latency.
Your service runs in a single cloud region, and a regional outage would take it fully offline. Leadership wants it to survive the loss of an entire region. Design a multi-region reliability posture. Compare active-active versus active-passive (warm standby), and cover how traffic fails over (global load balancer or DNS with health checks), how data is replicated and the RPO/RTO that implies, the cost and consistency trade-offs, and how you would regularly test failover. Explain the main risks, such as split-brain and cross-region latency.
Run in at least two regions so one region's loss is survivable. Active-active serves from both behind a global load balancer with health-checked failover — highest availability, but needs replication; active-passive fails over to a warm standby — cheaper, with RTO and data loss up to the RPO. Sync replication tightens RPO, async adds lag; watch latency and split-brain, and rehearse failover.
Common mistakes
- ✗Confusing active-active with active-passive and their trade-offs
- ✗Ignoring data replication and the RPO/RTO it implies
- ✗Never rehearsing failover, so it fails when actually needed
Follow-up questions
- →How does synchronous versus asynchronous replication change your RPO?
- →What is split-brain, and how do you keep two regions from both acting as primary?
SeniorDesignOccasionalYour team is taking over 24/7 on-call for a growing set of services. Today it pages constantly, most alerts are not actionable, and engineers are burning out and starting to miss the real pages. Design an on-call and alerting model. Cover the rotation and escalation (primary and secondary), what earns a page versus a ticket or dashboard, how severities map to response expectations, the role of runbooks and an incident commander during a major incident, and how you keep alert quality high over time. Explain why alert fatigue is itself a reliability problem.
Your team is taking over 24/7 on-call for a growing set of services. Today it pages constantly, most alerts are not actionable, and engineers are burning out and starting to miss the real pages. Design an on-call and alerting model. Cover the rotation and escalation (primary and secondary), what earns a page versus a ticket or dashboard, how severities map to response expectations, the role of runbooks and an incident commander during a major incident, and how you keep alert quality high over time. Explain why alert fatigue is itself a reliability problem.
Page only on actionable, user-facing symptoms — SLO burn via burn-rate alerts — and route causes and low-priority signals to tickets or dashboards. Run a primary/secondary rotation with escalation, map severities to a response SLA, give each alert a runbook, and use an incident commander for major incidents. Prune noisy alerts, because fatigue makes on-call miss real pages and raises MTTR.
Common mistakes
- ✗Paging on causes and noise instead of actionable user-facing symptoms
- ✗Treating alert fatigue as morale only, not a reliability risk
- ✗No severities, runbooks or incident commander for a major incident
Follow-up questions
- →What signals tell you an on-call rotation is overloaded?
- →How would you decide an alert is not actionable and should be removed?
SeniorDebuggingOccasionalA partial slowdown turned into a full outage after clients retried — diagnose and fix it
A partial slowdown turned into a full outage after clients retried — diagnose and fix it
This is a retry storm. B lost a replica and slowed; A retried immediately with no backoff or jitter, and retries stacked across layers, so B's load jumped 5x (8k→41k QPS) — a thundering herd that saturated it and cascaded via a shared thread pool. Even after recovery, retry traffic kept it pinned. Fix: exponential backoff with jitter, a retry budget that caps and stops retries, and a circuit breaker (open on errors, half-open to probe), plus timeouts and bulkheads; retry only idempotent calls.
Open full question →Common mistakes
- ✗Blaming only the replica loss and missing the retry amplification
- ✗Fixing it by retrying harder or removing timeouts, worsening the storm
- ✗Forgetting jitter, a retry budget, or that retries need idempotency
Follow-up questions
- →Why does jitter matter on top of exponential backoff?
- →How does a retry budget differ from a per-request retry limit?