Back to archive

Reliability Is a Number You Choose, Not a Vibe

Set a real SLO for checkout, track the error budget, and let Kubernetes reconcile infrastructure state while your team makes reliability decisions from numbers instead of opinions.

Production idea

SLIs, SLOs, SLAs, error budgets, and Kubernetes reconciliation.

1

The 2 A.M. Scene

Checkout is returning HTTP 500 errors. Someone asks in Slack, "Is this bad enough to page the VP?"

Nobody knows, because the team never wrote down what "bad enough" means. The loudest or most awake person decides, and everyone else guesses.

A better answer starts with an SLO: a clear target for how reliable checkout must be over a specific window.

On-call engineer reviewing checkout errors at 2 A.M.
No speech bubbles, fake UI text, or generated statistics inside the image.
2

Pick the Number, Then Spend It

"As reliable as possible" has no budget and no trade-off. Replace the vibe with arithmetic.

SLI: successful checkout requests / valid checkout requests. SLO: 99.9% successful checkout over 30 rolling days. SLA: 99.5% availability or success, with customer credits or legal terms attached.

That 43.2 minutes is your monthly error budget. It is not a failure count. It is the amount of unreliability you can spend before you stop taking more risk.

30 daysx24 hoursx60 minutesx0.001=43.2 minutes

30 days x 24 hours x 60 minutes x 0.001 = 43.2 minutes

99.9%43.2 minutes/month8.8 hours/year99.99%4.32 minutes/month52.6 minutes/year99.999%26 seconds/month5.26 minutes/year
3

How Kubernetes Helps Hold the Line

Kubernetes does not understand your business SLO by itself. What it does understand is desired state.

You declare desired state in a spec. Kubernetes observes current state, compares the two, acts to reduce the gap, and repeats.

Correct wording: Kubernetes controllers are level-triggered control loops. They keep reconciling the current state toward the desired state.

Desired state: replicas: 3selector: app=checkout
Observed state: readyReplicas: 2availableReplicas: 2
observediffactrepeat

Controllers keep reconciling until observed state matches desired state.

4

See It on Your Cluster

The ReplicaSet and Deployment are telling the same story: desired is 3, observed healthy capacity is 2, and the controller will keep reconciling until the gap closes.

$ kubectl get rs -l app=checkout
NAME                 DESIRED   CURRENT   READY   AGE
checkout-7d9f6fc8f6c 3         2         2       2m

$ kubectl get deploy checkout
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
checkout  2/3     3            2           2m
desired: 3observed: 2controller creates 1 replacement pod
5

Monday Morning Checklist

Write one explicit SLO per user-facing service. Define each SLI as a real ratio: good events / total valid events. Set the internal SLO stricter than the customer-facing SLA.

Compute the error budget in minutes, track burn against it, and write down what happens when the budget is exhausted: freeze risky changes, reduce deploy risk, and pay down reliability debt.

  • Write one explicit SLO per user-facing service.
  • Define each SLI as a real ratio: good events / total valid events.
  • Set the internal SLO stricter than the customer-facing SLA.
  • Compute the error budget in minutes and track burn against it.
  • Write down what happens when the budget is exhausted.

References

NeuBird 2026 Production Reliability and AI Adoption ReportKubernetes controllersGoogle SRE error budget policyGoogle SRE implementing SLOs