Day 90 — Retrospective & roadmap

Updated

July 30, 2026

Day 90 — Retrospective & roadmap

Stage VIII · ~4h
Goal: Close the volume with an honest retrospective, a 1-day teach plan for a friend, and a personal roadmap (26.11, nixpkgs contribution, optional Capstone B)—without starting a new rewrite today.

Note

Day 90 is reflection and direction, not another feature. Protect the freeze tag, keys, and runbook—they outrank any blog post.

Why this day exists

Expertise compounds when you teach and schedule the next loop. Without a retrospective, 90 days of labs become a blur. Without a roadmap, Capstone B starts as thrash. Without a teach plan, you never test whether your mental model transfers.


Theory 1 — What you should now be able to do

By Capstone A completion you can:

Skill Stage roots
Explain store, generations, rollback I–II, VII, 89
Own a flake NixOS host II–III
Compose modules with types/assertions II, 72
Manage user or service identity II–III, 83
Keep secrets out of the store IV, 84
Front door proxy pattern IV, 84
Deploy remotely (deploy-rs/Colmena) VI, 85
Test with nixosTest VI, 76, 86
CI + cache discipline V–VI, 66, 85
GC/store hygiene 67
Backup/restore state 69
Read release notes / plan upgrades 79–80
Rebuild from zero 88
Debug with a playbook 81, 89
Steelman alternatives 78

If a row is weak, put it on the roadmap—not under the rug. Honesty is the skill.


Theory 2 — 1-day teach plan design

Constraints:

  • Audience: competent Linux user, new to Nix
  • Time: ~6–8 hours with breaks
  • Goal: mental model + one successful nix run + one tiny flake shell or tour of your lab host—not full Capstone

Suggested outline

Block Minutes Content
0 15 Three faces of Nix; honesty about learning curve
1 45 Install Nix (or use your VM); nix run nixpkgs#hello
2 60 Store paths + closures demo (nix path-info)
3 60 Language: attrsets + functions enough to read a flake
4 60 Flake devShell for their project
5 60 Optional: tour Capstone host + rollback story
6 30 What not to learn yet; resources; Q&A

Pedagogy rules from this volume

Do Don’t
Modern CLI default Start with nix-env -i archaeology
Flakes + lock story Channels-first fog
Eval vs realize Promise bit-identical forever
One successful win early Packaging stdenv in hour one
Show rollback if demoing NixOS Live-edit production

Theory 3 — Roadmap buckets

A. Currency

  • Execute Day 80 runbook when 26.11 lands
  • Re-read release notes method (Day 79)
  • Keep freeze tag as known-good while testing upgrade branch

B. Contribution

  • One nixpkgs PR (package bump, module fix, doc)
  • Or fix upstream issue you hit in Capstone
  • Or improve docs for sops-nix/deploy-rs footgun you hit

C. Capstone B (stretch — only if A solid)

From syllabus:

  • ≥3 nodes, Colmena + Disko
  • LUKS (+ TPM if available)
  • Secure Boot / Lanzaboote if feasible
  • Fleet observability
  • CI → cache → deploy automation

D. Ecosystem (optional)

  • Revisit Day 77 keep/drop with more data
  • devenv or nix-darwin as daily driver experiment—one at a time

E. Rest & hygiene

  • Delete abandoned experiments
  • GC old generations with policy (Day 67)
  • Backup key ceremony calendar (Days 69, 87)
  • Calendar reminder: “keys offline still exist?”

Theory 4 — Metrics that matter (personal)

Avoid vanity (“stars on flake repo”). Prefer:

Metric Why
Time to rebuild lab (RTO) Day 88 number—improve it
CI minutes / cache hit rate Days 74/85
Days since last untracked manual change on lab Drift discipline
Number of playbook entries used for real Ops maturity
Open P0 bugs on freeze tag Honesty
Restore drill age (Day 69) State half of DR

Write baseline numbers in RETRO.md so 90 days from now you can compare.


Theory 5 — Teaching as a test of understanding

If you cannot explain without jargon inflation, you do not own the concept yet. The teach plan forces:

Concept Plain sentence test
Store path “Software lives under hashed paths so versions coexist.”
Generation “A bootable system snapshot you can roll back to.”
Flake lock “The exact revisions we agreed to build from.”
sops-nix “Secrets stay encrypted in git; the host decrypts to a file path.”

Add three more sentences of your own for concepts you struggled with.


Theory 6 — What not to do today

Temptation Instead
Start Capstone B implementation Scope only (CAPSTONE-B-SCOPE.md)
Big flake restructure POST-FREEZE list
nix flake update for fun Currency bucket later
Delete freeze tag Keep it sacred
Victory-lap-only retro Include failures

Worked example — roadmap row

| Horizon | Items | Success test |
|---------|-------|--------------|
| 30 days | Run 26.11 dry-run branch on lab clone; re-read notes | toplevel builds; IMPACT updated |
| 30 days | Monthly key custody check | checklist signed in password manager |
| 90 days | One nixpkgs PR or module doc fix | opened PR URL |
| 180 days | Capstone B: 3 nodes or job project | demo notes + diagram |

Non-goals (30 days): no desktop ricing rewrite; no tool tourism; no second secrets system.


Lab 0 — Gather evidence

mkdir -p ~/lab/90daysofx/02-nixos/day90
cd /path/to/capstone-flake
cp docs/CAPSTONE-A.md docs/PROOF.md docs/DR-REPORT.md docs/FREEZE.md \
  ~/lab/90daysofx/02-nixos/day90/ 2>/dev/null || true
git rev-parse capstone-a-freeze 2>/dev/null \
  | tee ~/lab/90daysofx/02-nixos/day90/freeze-sha.txt || true
nix flake metadata | tee ~/lab/90daysofx/02-nixos/day90/metadata.txt

Lab 1 — RETRO.md (required)

Write 1–2 pages covering:

  1. What worked in the 90-day path (specific days/practices).
  2. What hurt (time sinks, false starts, tool thrash).
  3. Capstone A scorecard — each of the requirements: pass/fail/waiver with one-line proof.
  4. Day 88 RTO and whether you’d trust it for real data.
  5. Day 69 restore — last proven date.
  6. Surprises about Nix (positive and negative).
  7. Habits you will keep weekly (from syllabus weekly review).
  8. Baseline metrics from Theory 4.

Capstone A scorecard template

| Requirement | Status | Proof |
|-------------|--------|-------|
| Flake host rebuilds | pass/fail/waiver | |
| HM or service users | | |
| sops/agenix E2E | | |
| Reverse proxy | | |
| deploy-rs or Colmena | | |
| nixosTest/check | | |
| CI build (+ cache preferred) | | |
| Day 88 wipe/rebuild | | |
| Day 89 rollback + tests | | |

Lab 2 — Teach plan artifact

TEACH-1DAY.md with the outline filled in your words, including:

  • exact commands you’ll demo
  • what you’ll skip and why
  • one lab machine strategy (their laptop vs your VM)
  • glossary of five terms in plain language

Optional: record a 5-minute unlisted video intro—nice, not required.


Lab 3 — Personal roadmap

ROADMAP.md with 30/90/180-day sections:

Horizon 2–4 concrete items Success test
30 days e.g. 26.11 lab dry-run runbook executed
90 days e.g. one nixpkgs PR merged or reviewed
180 days Capstone B or job project demo notes

Include non-goals for the next 30 days to protect focus.


Lab 4 — Capstone B scope (optional sketch)

Only if Capstone A is honestly complete:

CAPSTONE-B-SCOPE.md — nodes, network diagram, secrets strategy, observability picks, SB/TPM track, out-of-scope list. Do not implement today.

If Capstone A is incomplete, write “Capstone A residual” instead of B.


Lab 5 — Housekeeping

# quarantine experiments
# update README of capstone repo for strangers
# ensure FREEZE tag still points at known-good
git tag -l 'capstone*'
git status

Final CAPSTONE-A checkboxes. Celebrate without redeploying production at 23:59.

Optional: create an encrypted archive inventory (paths only) of DR assets for future you.


Lab 6 — Letter to future you (optional, powerful)

One page LETTER.md dated today:

  • What you wish you knew on Day 1
  • What not to rewrite
  • Where the keys are
  • Which three days taught the most

Common gotchas

Mistake Fix
Retrospective as victory lap only Include failures
Roadmap of 40 items 2–4 per horizon
Starting Capstone B immediately Rest + currency first
Teach plan = full 90-day dump Ruthless cut
Forgetting key backup calendar Add to ROADMAP
Moving freeze tag to “latest” Keep freeze; branch for experiments
Metrics you won’t remeasure Pick numbers you’ll actually revisit

Checkpoint

  • RETRO.md complete and honest
  • Capstone A scorecard explicit
  • TEACH-1DAY.md runnable outline
  • ROADMAP.md with 30/90/180 + non-goals
  • Optional Capstone B scoped or deferred
  • Freeze tag still known-good
  • Volume artifacts committed
  • Three personal gotchas—then stop

Commit

git add .
git commit -m "day90: retrospective teach plan and roadmap"

Write three personal gotchas—then stop. Volume complete.


Tomorrow

No Day 91 in this volume. Options:

  1. Rest and use the lab for real work
  2. Execute upgrade runbook when 26.11 is ready
  3. Capstone B stretch (syllabus)
  4. Another 90DaysOfX volume (e.g. Go)
  5. Upstream contribution

You now own a rebuildable NixOS story. Keep the freeze tag, the keys, and the runbook closer than any blog post.