Back to archive

Projects & Notes

Reliability Has a Balance Sheet

A debit-and-credit model for pricing reliability decisions before they become invisible debt.

Reliability Has a Balance Sheet

Reliability decisions are often sold as pure improvement. Add redundancy. Add monitoring. Add stronger guarantees. Add a runbook. Each move can help, but none is free. Some costs show up later as complexity, staffing, latency, or fear of change.

The thesis

Reliability has a balance sheet. Every choice creates credits that reduce risk and debits that must be paid by the system or the organization.

This framing is useful because reliability work can become moralized. A proposal sounds responsible if it adds safety and irresponsible if it accepts risk. In practice, responsible engineering is not maximum safety at any cost. It is explicit pricing of risk, cost, reversibility, human load, and product promise.

The balance sheet does not make tradeoffs painless. It prevents them from becoming invisible.

The production pattern

A system becomes important, and the organization asks for more confidence. Engineers respond with familiar moves: more replicas, stronger consistency, additional monitors, stricter approvals, human review, change freezes, runbooks, queues, reconciliation jobs, and fallback paths.

Each move pays a credit. Replicas reduce local loss. Strong consistency reduces disagreement. Monitoring improves detection. Human review catches context-free automation. Runbooks reduce improvisation. Reconciliation repairs uncertain outcomes.

But each move also carries a debit. Replicas add coordination and cost. Strong consistency adds latency and coupling. Monitoring adds alert fatigue and interpretation burden. Human review adds queueing and inconsistent judgment. Runbooks drift. Reconciliation introduces delayed truth and repair ownership.

The system may become safer against one failure while becoming more brittle against change.

The model

I write reliability decisions as a balance sheet with six fields.

Risk credit: which concrete failure becomes less likely or less damaging? If the credit cannot be named, the change may only be reassurance.

Cost debit: what recurring cost appears in compute, storage, latency, throughput, developer time, support time, or opportunity cost?

Complexity debit: what new states, dependencies, alerts, modes, or recovery paths must humans understand?

Change debit: how does the decision affect deploy speed, schema evolution, migration safety, and reversibility?

Human debit: what work moves to operators, reviewers, support, or a small set of experts? Human review is not free reliability. It is a queue with judgment attached.

Evidence credit: what signal proves the control is working? A reliability control without observable evidence becomes a belief.

The model is deliberately plain. It gives engineering, product, and leadership a shared ledger. The point is not to reduce decisions to arithmetic. It is to expose the shape of the trade.

Where this goes wrong

The first mistake is counting credits and ignoring debits. A second region sounds safer until the team must handle data residency, failover testing, deploy sequencing, traffic steering, and divergent incidents. A stronger consistency model sounds safer until it turns partial dependency slowness into global user-visible delay.

The second mistake is treating alerts as free. Monitoring is a reliability credit only when it improves detection and action. An alert that wakes a person without a clear owner, impact, or next step is a human debit disguised as observability.

The third mistake is overvaluing manual approval. Human review catches some failures, especially domain-sensitive changes, but it can also create bottlenecks, normalize rubber-stamping, and concentrate risk in a few overloaded people.

The counterpoint is that some debits are worth paying. Critical systems often need redundancy, strong invariants, review gates, audit trails, and expensive recovery options. The balance sheet is not a case for minimalism. It is a way to make sure the organization knows what it bought and what bill will arrive later.

What I do now

I ask reliability proposals to name the specific failure class. "Make it more reliable" is too broad. Is the concern data loss, stale reads, slow recovery, silent corruption, overload, operator error, dependency failure, or audit exposure? Different risks require different controls.

I ask what new work the control creates on a normal week. Reliability that only works when people remember obscure procedures is fragile. The normal-week cost predicts whether the control will stay healthy.

I prefer controls that produce evidence. A backup should have restore verification. A runbook should have rehearsal or at least recent execution. A failover path should have traffic history. A reconciliation job should report unresolved cases, not just completion.

I also look for debits that land outside engineering. Support may inherit ambiguous statuses. Product may inherit slower decisions. Finance may inherit higher run rates. Leadership may inherit longer migration windows. Reliability decisions are organizational design decisions once the system matters.

Finally, I revisit old credits. A control that was rational when the system was young can become a drag after architecture, traffic, or ownership changes. The balance sheet should be updated when assumptions change.

Closing takeaway

Treat every reliability improvement as a trade: name the risk it reduces, the cost it creates, the humans it burdens, and the evidence that proves it works.