2026-09-05 08:11:00 +03:30
# Roadmap summary — all phases at a glance
*Part of `docs/roadmap/` — the one-page overview. Read [`intro.md` ](intro.md )
first for platform/background context; read the individual `phase-N.md` file
for the phase you're actually working on. This file exists so an agent (or
you) can check overall status and sequencing without loading every phase's
full detail.*
2026-10-09 15:38:29 +03:30
Twelve phases (0 through 11 — Phase 0 has two halves, 0a and 0b). Each phase
2026-09-05 08:11:00 +03:30
file follows the same shape: **Status** , **Message** (what's done, notes,
warnings), **Time-box** , **Concepts** , **Resources** , **Build** , **Done when** .
## Status and focus
| Phase | File | Status | Focus | Time-box | Main output |
|---|---|---|---|---|---|
| 0a | [`phase-0.md` ](phase-0.md ) | Done | Integration test suite (agent, tests only) | 1 evening | Red suite + `RED-BASELINE.md` |
| 0b | [`phase-0.md` ](phase-0.md ) | Done | Base project implemented to green (second agent) | 1– 2 evenings | Ledgerline running, list of frustrations |
2026-10-09 15:38:29 +03:30
| 1 | [`phase-1.md` ](phase-1.md ) | Done | Deployment: Compose + Traefik on a server | 1 evening | `https://ledgerline.vione.cloud` |
2026-10-12 20:55:31 +03:30
| 2 | [`phase-2.md` ](phase-2.md ) | Done | Concepts + first trace | 1 evening | One trace in Tempo |
2026-10-12 23:11:26 +03:30
| 3 | [`phase-3.md` ](phase-3.md ) | In progress | Distributed tracing | 2– 3 evenings | Connected trace across 7 services incl. the async hop |
2026-10-09 15:38:29 +03:30
| 4 | [`phase-4.md` ](phase-4.md ) | Not started | Structured logs | 1– 2 evenings | Two-way trace↔log correlation |
| 5 | [`phase-5.md` ](phase-5.md ) | Not started | Metrics | 2 evenings | RED per service, service map, exemplars |
2026-10-12 13:24:38 +03:30
| 6 | [`phase-6.md` ](phase-6.md ) | Not started | Dashboards as code | 2 evenings | `kubectl apply -k k8s/` restores all dashboards |
2026-10-09 15:38:29 +03:30
| 7 | [`phase-7.md` ](phase-7.md ) | Not started | k6 + percentiles | 1– 2 evenings | Baseline vs degraded load profiles |
| 8 | [`phase-8.md` ](phase-8.md ) | Not started | SLO / error budget / RTO / RPO | 1– 2 evenings | `docs/SLO.md` + burn-rate alerts |
| 9 | [`phase-9.md` ](phase-9.md ) | Not started | Bottleneck hunting | 2 evenings | `docs/INVESTIGATION.md` |
| 10 | [`phase-10.md` ](phase-10.md ) | Not started | Filebeat / Logstash / OTel judgment | 1– 2 evenings | `docs/PIPELINE-CHOICES.md` |
| 11 | [`phase-11.md` ](phase-11.md ) | Not started | Delivery | 1 evening | README + rehearsed demo |
2026-09-05 08:11:00 +03:30
## What each phase is, in one line
- **0 — Build the base project, test-first.** Write the black-box test suite,
then implement the seven-service system against it as a frozen contract.
**Done** — see `phase-0.md` for the full implementation report.
2026-10-09 15:38:29 +03:30
- **1 — Deployment.** Put Ledgerline on a server with Docker Compose behind
Traefik and a Let's Encrypt certificate, served at a real domain. Plumbing
only — no telemetry, no app changes. **Done** — see `phase-1.md` .
- **2 — The model, and one signal end to end.** Learn the OTel API/SDK/Collector
2026-10-12 13:24:38 +03:30
split and the M.E.L.T. vocabulary; deploy the real Grafana-stack platform
(the mentor's Ansible stack, ported to k3s as `k8s/` — already deployed on
2026-10-12 20:55:31 +03:30
`falken` ) and get one auto-instrumented trace into Tempo. **Done** — see
`phase-2.md` for what carries forward.
2026-10-09 15:38:29 +03:30
- **3 — Distributed tracing.** The heart of the task: auto- and
2026-09-05 08:11:00 +03:30
manual-instrument all seven services, and hand-propagate trace context
across the Redis Stream hop, which carries none by default.
2026-10-09 15:38:29 +03:30
- **4 — Structured logs, correlated to traces.** Replace prose logging with
2026-09-05 08:11:00 +03:30
structured events carrying a lowercase `trace_id` , so Loki and Tempo link
in both directions.
2026-10-09 15:38:29 +03:30
- **5 — Metrics.** Instrument RED metrics per service, understand cardinality
2026-10-12 20:09:38 +03:30
limits, and route app metrics to Prometheus given Alloy rejects OTLP metrics
(404 on `/v1/metrics` ). Tempo's metrics-generator already produces span metrics and the
2026-09-05 08:11:00 +03:30
service graph — don't duplicate it in the collector.
2026-10-09 15:38:29 +03:30
- **6 — Dashboards and alerts as code.** Generate dashboard JSON with the
2026-10-12 13:24:38 +03:30
Grafana Foundation SDK and ship it with the platform (`k8s/grafana/` ), so
"destroy and recreate in seconds" is a real, repeatable command.
2026-10-09 15:38:29 +03:30
- **7 — Load testing with k6, and percentiles.** Learn why percentiles can't
2026-09-05 08:11:00 +03:30
be averaged, what coordinated omission is, and drive Ledgerline with
arrival-rate executors to get a clean before/after load profile.
2026-10-09 15:38:29 +03:30
- **8 — SLI, SLO, SLA, error budgets, RTO, RPO.** Define Ledgerline's SLIs and
SLOs from the Phase 7 baseline (not from thin air), write an error-budget
2026-09-05 08:11:00 +03:30
policy, and wire multi-burn-rate alerts.
2026-10-09 15:38:29 +03:30
- **9 — Bottleneck hunting (the capstone).** Given a random, undisclosed set
2026-09-05 08:11:00 +03:30
of chaos flags, find the pathologies from telemetry alone using a top-down,
hypothesis-driven method, and write it up as an incident doc.
2026-10-09 15:38:29 +03:30
- **10 — Tool-selection judgment.** Reason through Filebeat vs Logstash vs
2026-09-05 08:11:00 +03:30
OpenTelemetry on six concrete axes, using the platform's real second stack
(Filebeat → Logstash → Elasticsearch → Kibana) as the counterpoint.
2026-10-09 15:38:29 +03:30
- **11 — Package the delivery.** README, a rehearsed five-minute demo, the
2026-09-05 08:11:00 +03:30
written deliverables (`SLO.md` , `PIPELINE-CHOICES.md` , `INVESTIGATION.md` ,
`CONCEPTS.md` ), and an honest "what I'd do differently in production"
section.
## If you have to cut scope
2026-10-09 15:38:29 +03:30
Cut Phase 10's build (keep the writing) and Phase 7's soak test first. **Do not
cut Phase 9** — it's the only phase that proves you learned anything.