A live incident timeline records an alert, a timeline keeper, a rollback that leaves the error rate at eight percent, and a failover decision. The expected effect by 10:20 is hollow and dashed because it is not an observed recovery.

Incident response needs a timeline

During an incident, memory is unreliable, and clocks can disagree too. A timeline — who was paged, what was observed, what was tried, when the change landed — is what makes a response recordable and later reviewable. Times and actors are transcribed from the inert source fixture. The shared date and UTC offset are display shorthand; underlying entries require full timestamps. Vertical spacing is schematic, not elapsed-time scale. A planned effect is not shown as a confirmed fix; no validator or incident system was run. Write as it happens Memory is the least reliable instrument in an incident, so record while the alert is fresh. Capture the timestamp of the first alert, the initial symptoms, each action tried and its observable result, and the moment the fix actually took effect. That running record is what keeps a team from repeating a failed fix during the response, and what later makes an honest postmortem possible instead of a plausible story. Make the timeline a live document from the minute the page fires: note the tool that alerted, the metric, the suspected and the confirmed cause, and record ‘same as before, did not help’ rather than silently re-trying. ...

March 1, 2027 · 6 min · XB Field Notes
Three sequential states show a writable, then neither a nor b writable after fencing, then b writable after promotion. The writer counts are 1, 0, 1; the safe transition allows zero.

Failover is a practiced switch

A standby helps only if the promotion path works and the old writer cannot corrupt the new history. Failover is a decision, a procedure, and a rehearsal. A healthy-looking replica is not proof that clients can reach it or that it contains every acknowledged write. Define the required recovery time and acceptable data loss before deciding when to switch. ...

February 25, 2027 · 6 min · XB Field Notes
Three zones each contain eight nodes; one zone is crossed out. Sixteen survivors at the example planning rate of 140 requests/s provide 2240 requests/s, above the 2000 forecast.

Capacity planning is a number, not a guess

Capacity planning turns a demand forecast into a provisioned operating envelope. The useful question is not how many requests a machine can accept before crashing, but what workload the service can sustain while meeting its latency and correctness requirements. That answer depends on request cost, dependencies, and failure assumptions. A spreadsheet becomes useful when each of those assumptions has a source and an owner. ...

February 21, 2027 · 5 min · XB Field Notes
A runtime flag chooses the old or new path inside already deployed code. It does not undo existing effects.

Feature flags decouple release from exposure

Deploying code and exposing it are different acts. A feature flag can select a runtime path after the code is deployed. This supports gradual exposure and fast disablement, provided the old path remains compatible and the configuration reaches the processes that evaluate it. The flag controls a decision; it does not reverse everything the deployment or the new behavior has already done. ...

February 9, 2027 · 6 min · XB Field Notes
The required dependency fails in one instance. /livez still returns 200 because its handler answers; /readyz returns 503. A large not-equal sign separates the two decisions.

A purpose-built health check is worth keeping

A health endpoint is a contract with a consumer that will take action. Returning 200 because a handler ran does not prove that an instance can serve useful traffic. Before writing the endpoint, identify the decision it supports: allow initialization, admit requests, or restart a process that cannot recover. Different questions need different evidence. ...

December 31, 2026 · 6 min · XB Field Notes
A full baseline, increment 1, and increment 2 form a required chain leading to a restored database. Keep every required input.

Full versus incremental backups

A full backup provides a baseline without depending on an earlier backup from the same method. An incremental backup stores changes relative to a specified reference and depends on the material needed to reconstruct the omitted content. That distinction describes recovery dependencies, not a universal promise about speed or bytes transferred. A large changed working set can make an incremental backup substantial too. ...

December 27, 2026 · 5 min · XB Field Notes
A retained named volume spans stop/start and container replacement. The writable layer survives only the same container; tmpfs contents disappear at stop.

Give durable state and scratch space different lifecycles

Durable application state and disposable scratch files need different retention, capacity, and recovery policies. Separating their paths makes those policies easier to express, but directories alone do not create persistence or isolate disk capacity. The storage backing each path determines what survives process restart, container replacement, host failure, or cleanup. A reliable layout connects each class of data to an explicit lifecycle. ...

December 3, 2026 · 5 min · XB Field Notes
Successful-request mean is 89.47 ms, compared with the five fast failures at a 5 ms mean. Proportional bars show why adding failures can lower the combined mean without improving useful service.

The golden signals of health

Latency, traffic, errors, and saturation are four complementary ways to ask whether a service is serving users well. They are a starting set of questions, not four universal counters that prove health by themselves. Their usefulness depends on where they are measured, which work they describe, and how their time windows align. A fast response can still be a failed operation. ...

November 29, 2026 · 5 min · XB Field Notes