The Maturity Path
Observability is adopted in rungs, and the order matters more than the speed. The ladder a healthy adoption climbs — structured logs and host metrics, then service RED metrics and dashboards, then symptom alerting, then tracing, then SLOs, then SLO-driven operations — is not arbitrary, even though this book covered tracing (Chapter 8) before alerting (Chapter 9) for teaching reasons. Each rung produces the baseline the next rung needs, and each rung's payoff funds the instrumentation cost of the one above it.
Skipping rungs is how teams end up with traces nobody reads and SLOs nobody believes. The failure mode is always the same shape: a signal was bought before the signal underneath it existed, so there was nothing to compare it against and no habit of using it. This topic walks the ladder rung by rung and names what each one requires from the one below.
Rung 1: Structured Logs and Host Metrics
node_exporter on every host and JSON logs flowing into Loki — Chapters 3 and 7 — cost near-zero code changes and immediately replace ssh, htop, and docker logs. Harborline climbed this rung first because it covers every service at once, including the ones you cannot modify. It also establishes what "normal" looks like on app-01 and app-02, and every threshold decision made later leans on that record.
Rung 2: Service RED Metrics and Dashboards
Rate, errors, and duration per service (Chapter 5), plus one owned overview dashboard per service (Chapter 6). This is the first rung that requires touching application code, and it is affordable precisely because rung 1 already proved the stack's value — the incident that host metrics shortened is the argument that buys RED-instrumentation time from the bookings team's sprint.
Rung 3: Symptom Alerting
Alerts on the RED signals users actually feel — checkout latency, checkout error ratio — routed through Alertmanager with a runbook per page (Chapter 9). Alerting cannot come earlier, because a threshold is a claim about abnormality, and without rung 2's weeks of baseline data every threshold is a guess. Guessed thresholds fire wrong, and wrong-firing alerts become the muted channel from topic 70 within a quarter.
Rung 4: Tracing
OpenTelemetry across the request path (Chapter 8). Tracing is fourth because it carries the highest per-service instrumentation cost: every hop must propagate context before the first trace is whole, and a half-propagated rollout produces orphaned spans that look like broken tooling. Its value is also dependent — a trace localizes a problem that metrics have already detected. Detection before localization is the ladder's core dependency.
Harborline's payoff came exactly in that order: the Saturday checkout complaint from Chapter 1 was quantified by metrics in Chapter 5, and only then did the Chapter 8 trace pin it to the Redis connection-pool ceiling in bookings. The trace without the metric baseline would have been a waterfall of numbers with nothing to say whether 340 ms in a span is a problem or a Tuesday.
Rung 5: SLOs
The checkout SLO — 99.9% availability over 28 days, 95% of requests under 500 ms (Chapter 10) — needs months of RED history to set a defensible target. An error budget declared without baseline data is either trivially safe or instantly bankrupt, and either way the team stops believing it. The 500 ms number was defensible because rung 2 had been recording checkout latency for months before anyone negotiated it.
Rung 6: SLO-Driven Operations
Burn-rate paging, error budgets gating release pace, blameless postmortems feeding instrumentation gaps back into the backlog (Chapters 10 and 12). The top rung is organizational, not technical — no new software gets installed, and the change is that reliability decisions now cite budget numbers instead of feelings. This is the rung where the August incident's 38-minute resolution stops being luck and becomes process.
Traces-first buys the deepest signal at the highest cost: every service needs SDK integration and context propagation before the first useful trace, and with no metric baseline there is nothing to say whether a 340 ms span is abnormal. Choose it only for a greenfield system with fewer than 5 services and auto-instrumentation available end to end.
Metrics-first — this book's order — buys broad, cheap coverage that detects problems and builds the baseline, then adds tracing to localize what the metrics detect. Choose it everywhere else, which in practice means almost everywhere.
- Starting with tracing because it demos best — three months of OTel rollout across 20 services with no metrics baseline yields beautiful waterfalls of requests nobody knows are abnormal, and the project is judged a failure.
- Declaring SLOs in the first month — without rung 2's history the 99.9% target is negotiated from ambition instead of data, the budget burns out in week one, and the SLO is quietly ignored thereafter.
- Writing alerts before dashboards exist — the responder gets paged into a system with no place to look, so every page starts with 20 minutes of ad-hoc PromQL. Harborline's Chapter 12 incident took 38 minutes because Chapter 6 preceded Chapter 9.
- Treating the ladder as a one-time climb — a new service enters at rung 0 and must climb the same rungs; a team "at rung 6" with three uninstrumented new services is at rung 6 for only part of its surface.
- Buying a platform at rung 0 and expecting the rungs to climb themselves — Datadog or Grafana Cloud collapses the tool-setup cost, but instrumentation, baselines, alert curation, and SLO negotiation remain human work at every rung.
- Climb in order and let each rung run for 4–8 weeks before starting the next — the baseline data and the team habit are the prerequisite, not the tool install.
- Cover every service at the current rung before advancing — breadth-first beats depth-first, because incidents do not respect which service got the deluxe treatment.
- Fund each rung with the previous rung's win: bring the incident that host metrics solved to the meeting where you ask for RED-instrumentation time, and the one tracing solved to the SLO negotiation.
- Re-run the ladder as an annual audit per service — logs structured, RED present, alerts symptom-based, hot paths traced, SLO current. The checklist takes an hour and catches the drift topic 70 catalogs.
Knowledge Check
Why must symptom alerting wait until RED metrics have run for weeks?
- Alertmanager needs weeks of uptime before it routes reliably
- Thresholds need a recorded baseline of normal to be anything but guesses
- Prometheus cannot evaluate an alert rule on any metric younger than a full calendar month
- The on-call rotation must exist before any alert may fire
Tracing has the highest per-service instrumentation cost on the ladder. What does it need from the rungs below to pay that cost back?
- A log store, because Tempo persists spans through Loki
- A declared SLO, so spans can be attributed to the error budget
- Metrics that detect problems, so traces have something to localize
- A Kubernetes cluster, since context propagation requires a service mesh
A team declares a 99.9% SLO in its first month of observability work. What happens to team trust?
- The budget proves trivially safe or instantly bankrupt, and the SLO gets ignored
- The error-budget math silently fails because a 28-day window needs a full 28 days of data first
- The SLO is too strict, which makes the team over-careful but safe
- Grafana rejects SLO dashboards for metrics with short history
Is the maturity ladder climbed once per organization?
- Yes — once the org reaches rung 6, new services inherit that maturity
- Yes, provided the org runs a managed platform that auto-onboards services
- No — each new service starts at rung 0 and climbs individually
- No — every new service forces the whole org back to rung 1
You got correct