SLOs & Error Budgets
Turn a vague 'make it reliable' goal into hard numbers: convert nines into real downtime and dollars, define SLIs and SLOs a team can measure and enforce, write an error-budget policy that settles the ship-versus-stabilize fight without a meeting, and design multi-window multi-burn-rate alerts that page a human only when it matters.
Availability Math & the Nines
Convert nines to downtime minutes, remember serial dependencies multiply (lowering the ceiling) while redundancy combines as 1 - (1-a)^n, each nine costs about 10x more, and keep measured, SLA, and SLO as three separate numbers.
SLI / SLO / SLA Hierarchy
SLI is good/valid events, SLO adds a target and window (99.9% over 28 days), SLA is the external promise with penalties; the measurement point (LB vs server vs client) changes the number, and latency SLOs use percentiles because averages hide the tail.
Error Budgets & Policy
Error budget = 1 - SLO and it is permission to fail that you spend, not hoard; the policy pre-agrees consequences (freeze at zero) with security carve-outs and shared accountability so the ship-versus-stabilize call is depoliticized before the incident, not fought during it.
Burn-Rate Alerting (Multi-Window, Multi-Burn-Rate)
Burn rate is multiples of sustainable spend (1x uses exactly the budget, 14.4x burns ~2% of a month in an hour); require a long window for significance and a short window for fast reset; page on fast burn and ticket on slow burn; and always alert on the SLO-burn symptom, never on causes like CPU.
Observability
Instrument any service or resource with the minimal, high-signal metric set (the four golden signals plus RED and USE), and design end-to-end observability across a multi-service request path by choosing correctly between metrics, logs, and traces and tying them together with OpenTelemetry and propagated trace context.
The Four Golden Signals & RED/USE
Instrument latency, traffic, errors, saturation on every service; use RED for request-driven services and USE for resources; split success vs error latency; treat saturation as your early warning; and guard cardinality by keeping unbounded ids out of metric labels.
Three Pillars & OpenTelemetry
Metrics for cheap aggregates and alerting, logs for structured per-event detail, traces for the causal cross-service path; propagate W3C trace context and share the trace id across all three; standardize on OpenTelemetry SDKs plus a Collector to decouple apps from backends; and control cost with bounded cardinality, trace sampling, and tiered log retention.
Resilience Patterns
Design the client-side defenses that stop one slow dependency from taking down a whole fleet: timeout and retry policies with propagated deadlines, backoff, jitter and retry budgets; circuit breakers, bulkheads and fallbacks that isolate and contain a failing dependency; and load shedding plus graceful degradation that keep a system serving useful work under overload instead of collapsing.
Timeouts, Retries, Backoff & Jitter
Connect plus request timeouts on every call, propagate a shrinking deadline down the chain, exponential backoff with full jitter, a retry budget capping retries to a small fraction of traffic, retry only idempotent operations, and retry at one layer to avoid multiplicative amplification.
Circuit Breakers, Bulkheads & Fallbacks
Circuit breakers move Closed to Open to Half-Open to fail fast and let a sick dependency recover; bulkheads give each dependency a bounded pool so one cannot starve the others; fallbacks serve stale, default, or omitted content, but only for non-critical dependencies.
Load Shedding & Graceful Degradation
Maximize goodput not throughput by discarding doomed work early; shed cheaply at the edge with 429/503 and Retry-After; prioritize by request class; use admission control and bounded concurrency instead of unbounded queues; and break metastable failures with aggressive shedding plus client backoff, because autoscaling is too slow.
Redundancy, DR & Multi-Region
Hunt down and eliminate single points of failure across a stack, set defensible RTO/RPO targets and pick a matching disaster-recovery strategy per tier, design a multi-region deployment with an honest story about replication and consistency, and shrink blast radius with cells, shuffle sharding, and static stability so a single failure never takes everyone down.
Redundancy, Failover & Health Checking
Eliminate every SPOF (LB, DB primary, DNS, config) with N+1/N+2 redundancy, pick active-active for instant failover or active-passive for simpler state, gate traffic with liveness/readiness/deep checks, and use quorum election plus fencing and hysteresis to avoid split-brain and flapping.
Disaster Recovery: RTO/RPO & Strategies
RTO is tolerable downtime, RPO is tolerable data loss, both set per tier; pick the cheapest rung on the backup -> pilot-light -> warm-standby -> active/active ladder that meets the tier's numbers; handle corruption and ransomware (not just region loss) with immutable/air-gapped backups; and prove it with restore drills and game-days.
Multi-Region & Multi-AZ Architecture
Multi-AZ is cheap synchronous HA within a region; multi-region is expensive async protection against region loss; sync gives RPO~0 but latency and stall risk while async gives speed but lag/loss; active-active forces a consistency choice (single-writer-region, CRDTs, or a Spanner-class store); steer with health-based failover and actually test region evacuation.
Blast Radius Reduction: Cells & Static Stability
Cells give independent isolated stacks so one failure hits ~1/N of users, shuffle sharding gives each customer a unique worker combination to isolate noisy tenants, apply blast-radius thinking to deploys/data/dependencies, separate control plane from data plane, and use static stability so the data plane keeps serving last-known-good state when the control plane is down.
Deploy, Release & Chaos
Pick and defend a safe rollout strategy (rolling, blue-green, canary) with real health gates and a tested rollback path, decouple release from deploy using feature flags while migrating a live schema with zero downtime, design a chaos experiment that has a hypothesis and a bounded blast radius, and run an incident plus write the blameless postmortem that stops it from recurring.
Deployment Strategies: Blue-Green, Canary, Rolling
Rolling is cheap but slow to reverse, blue-green buys instant rollback for double the fleet, canary gives the smallest blast radius but needs automated analysis and bake time, and every strategy runs two versions at once so never ship a destructive schema change inside a code deploy.
Progressive Delivery, Feature Flags & Zero-Downtime Schema Changes
Flags decouple release from deploy and give you a per-feature kill switch and targeting, expand/contract migrates schema in individually-safe reversible steps, everything in flight must be backward and forward compatible, and never pair 'add new' with 'drop old' in a single deploy.
Chaos Engineering & Fault Injection
State a steady-state hypothesis, inject a realistic fault into the smallest blast radius, measure against the hypothesis, always run with an error-budget-tied auto-abort, and test in production with guardrails because staging never reproduces real conditions.
Incident Management & Blameless Postmortems
Objective severity levels drive the response, separate the Commander from the fixers, mitigate before you diagnose, and run a blameless postmortem that targets the system (never 'human error') with owned action items tracked to completion.