Reliability
Retry, backoff, timeouts, circuit breakers, bulkheads, rate limiting, graceful degradation, and the arithmetic of nines.
Timeouts, retries with backoff and jitter, circuit breakers, bulkheads, rate limits, fallbacks and graceful degradation each exist because of one specific failure — and each, applied without its budget, becomes a new way to turn a slow dependency into a full outage.
A circuit breaker watches the failure rate of calls to one dependency and, once it is clearly down, fails fast instead of spending a timeout on every request; Closed → Open → Half-Open → Closed is the state machine, and its thresholds decide whether it protects the system or trips on noise.
A rate limiter decides, per client, tenant or route, whether a request may proceed now; fixed windows are cheap and leak 2× at the boundary, sliding windows are exact or approximate depending on memory, and the token bucket is the default because it allows bounded bursts with O(1) state — enforced at the gateway with atomic counters in Redis and communicated with 429 + `Retry-After`.
An SLI is a measurement, an SLO is the target you set for it, an SLA is the contract with penalties; 99.9% availability is 8h 46m of downtime a year and 43 minutes a month, serial dependencies multiply their unavailability, and the error budget — the downtime you are allowed and have not yet spent — is the number that decides whether the next release ships.