From a133efe3bf305e4098f39a65b0b3e6ee52bce2fb Mon Sep 17 00:00:00 2001 From: Lars Rossen Date: Tue, 25 Aug 2026 17:44:40 +0200 Subject: [PATCH] slides(tappaas): recast The Bad around amortisation, not personal cost MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the commit-graph slide and the two cost slides. Replace all three with one argument: the platform is expensive to build, but that cost is fixed and per-site cost is near zero — so it only makes sense shared across many home labs and SMB sites. "What I got wrong" becomes "Did I get it all right?" — no, two large rewrites (ADR-007 numbering to dependsOn, ADR-014 zone tiers to checked state) plus a predecessor system run for years before this one. 36 slides; the agenda line and the quiet-months slide no longer refer to the graph that left. Co-Authored-By: Claude Opus 5 --- slides/tappaas/one-year-in/index.md | 113 ++++++++++------------------ 1 file changed, 41 insertions(+), 72 deletions(-) diff --git a/slides/tappaas/one-year-in/index.md b/slides/tappaas/one-year-in/index.md index 4275c89..bf4640d 100644 --- a/slides/tappaas/one-year-in/index.md +++ b/slides/tappaas/one-year-in/index.md @@ -104,7 +104,7 @@ Community repo: codeberg.org/TAPPaaS/Community. ## What I am actually going to do to you 1. **The Good** — it runs. Here is what "it runs" means, and one surprise. -2. **The Bad** — what this really cost. The commit graph is not pretty. +2. **The Bad** — what it really costs, and why that only works if it is shared. 3. **The Ugly** — the confession. I gave an AI root on every node. 4. **Your turn** — why you should build one, and how to start small. @@ -352,39 +352,7 @@ What it actually cost. --- -## The brutal commit graph of a side project - -```text -2025-05 99 ██████████ ← the honeymoon -2025-06 21 ██ -2025-07 53 █████ -2025-08 141 ██████████████ ← Sommerhack 2025 -2025-09 6 █ ← life -2025-10 9 █ ← still life -2025-11 41 ████ -2025-12 47 █████ -2026-01 66 ██████ -2026-02 141 ██████████████ -2026-03 33 ███ -2026-04 19 ██ -2026-05 190 ██████████████████ -2026-06 351 ██████████████████████████████████ ← something changed -2026-07 164 ████████████████ -2026-08 83 ████████ (to the 20th) -``` - -This is what a real side project looks like. Not a burndown chart. A heartbeat -with two near-death experiences in it. - - - ---- - -## The two dips are the honest part +## The quiet months are the honest part **September–October 2025: 15 commits in two months.** @@ -393,7 +361,7 @@ TODO below is yours to fill in. The lesson I take from it: a self-hosted platform that needs *you* every week is not a platform, it is a pet. -The dips are the real test. The services stayed up. +Those two months are the real test. The services stayed up. Because updates, backups and tests do not need me to be enthusiastic. --- -## What it costs in things that are not money +## Did I get it all right? -- **Learning curve you cannot delegate** — Proxmox, NixOS, OPNsense, ZFS, - VLANs, PKI, OIDC. Any one of those is a weekend. You need all six. -- **You are the on-call.** At 22:00. On holiday. -- **Family SLA.** The moment calendars are on it, downtime is a domestic matter, - not a technical one. -- **Decision fatigue** — which is precisely why the project reduces flexibility. -- **The "why don't you just" tax** — from every friend, every time. +**No. There have been at least two large rewrites — and a whole system before this one.** -`TODO: your best war story — the outage that taught you the most` +- **The predecessor.** I ran a hand-built setup for a few years before TAPPaaS + existed. Every design decision here is an argument I already lost once, at home. +- **Rewrite 1 — ADR-007.** Foundation modules used to be *numbered*: + `05-ProxmoxNode`, `10-firewall`, `30-tappaas-cicd`. The number **was** the + install order. Retired: order is now computed from `dependsOn`. +- **Rewrite 2 — ADR-014.** Zone tiers lived in prose in a README. Now `tier` and + `isolated` are state, and four invariants are machine-checked on every reconcile. ---- +Both times the same lesson: something I had encoded as a **convention** +had to become a **declaration**. -## What I got wrong - -`TODO: pick three, be specific, be unflattering — this slide buys credibility for everything else` - -Candidates from the graph and the repo: - -- Numbered foundation modules (`05-`, `10-`, `30-`…) — retired in the ADR-007 - refactor once ordering had to come from `dependsOn` instead -- `TODO:` -- `TODO:` - -The pattern: everywhere I encoded an ordering or a name as a *convention*, -I later had to make it a *declaration*. +`TODO: name the predecessor, and say how long you ran it` ---