Day 30 — Retrospective & NixOS Roadmap
Day 30 — Retrospective & NixOS Roadmap
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.
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.txtLab 1 — RETRO.md (required)
Write 1–2 pages covering:
- What worked in the 90-day path (specific days/practices).
- What hurt (time sinks, false starts, tool thrash).
- Capstone A scorecard — each of the requirements: pass/fail/waiver with one-line proof.
- Day 88 RTO and whether you’d trust it for real data.
- Day 69 restore — last proven date.
- Surprises about Nix (positive and negative).
- Habits you will keep weekly (from syllabus weekly review).
- 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 statusFinal 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.mdcomplete and honest
- Capstone A scorecard explicit
TEACH-1DAY.mdrunnable outline
ROADMAP.mdwith 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:
- Rest and use the lab for real work
- Execute upgrade runbook when 26.11 is ready
- Capstone B stretch (syllabus)
- Another 90DaysOfX volume (e.g. Go)
- Upstream contribution
You now own a rebuildable NixOS story. Keep the freeze tag, the keys, and the runbook closer than any blog post.