slides(tappaas): recast The Bad around amortisation, not personal cost
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 <noreply@anthropic.com>
This commit is contained in:
parent
485f53f48d
commit
a133efe3bf
1 changed files with 41 additions and 72 deletions
|
|
@ -104,7 +104,7 @@ Community repo: codeberg.org/TAPPaaS/Community.
|
||||||
## What I am actually going to do to you
|
## What I am actually going to do to you
|
||||||
|
|
||||||
1. **The Good** — it runs. Here is what "it runs" means, and one surprise.
|
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.
|
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.
|
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
|
## The quiet months are the honest part
|
||||||
|
|
||||||
```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.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Point at Sept/Oct 2025: six and nine commits. Two months of nearly nothing.
|
|
||||||
Be honest about why — the audience has all had that autumn.
|
|
||||||
TODO below is yours to fill in.
|
|
||||||
-->
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## The two dips are the honest part
|
|
||||||
|
|
||||||
**September–October 2025: 15 commits in two months.**
|
**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
|
The lesson I take from it: a self-hosted platform that needs *you* every week
|
||||||
is not a platform, it is a pet.
|
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.
|
Because updates, backups and tests do not need me to be enthusiastic.
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
@ -441,58 +409,59 @@ Source: src/STATISTICS.md, regenerated 2026-08-23.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What it costs in money
|
## It is a lot of work. That is the argument for sharing it.
|
||||||
|
|
||||||
| | |
|
Building this was not cheap, and I will not pretend otherwise:
|
||||||
|
**112,000 lines**, 1,507 commits, 24 ADRs, six unfamiliar stacks, a year of evenings.
|
||||||
|
|
||||||
|
But look at *where* that cost sits:
|
||||||
|
|
||||||
|
| Paid **once**, by whoever writes it | Paid by **you**, per site |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Hardware | `TODO: what you actually spent, be honest, include the mistakes` |
|
| the 8 foundation modules | a box and an afternoon |
|
||||||
| Electricity | `TODO: measured W → kr/year at current DK prices` |
|
| 145 test suites that gate every update | `module-manager module add <app>` |
|
||||||
| Satellite VPS | `TODO: kr/month` |
|
| every install, update and repair script | nothing — patches arrive tested |
|
||||||
| Domain + DNS | `TODO:` |
|
|
||||||
| Licences | 0 |
|
|
||||||
| **Versus the hyperscaler equivalent** | `TODO: the comparison, done fairly — include your time at 0` |
|
|
||||||
|
|
||||||
The honest framing: this is **not** cheaper if you value your time at anything.
|
A hyperscaler amortises a datacentre across a million tenants.
|
||||||
It is cheaper if you were going to tinker anyway, and it is *ownable* at any price.
|
**We amortise a platform across a thousand basements.**
|
||||||
|
|
||||||
|
Erik's 13 modules and Andreas's 6 cost me nothing and made my system better.
|
||||||
|
Yours would too. That is the economic case: not that self-hosting is cheap,
|
||||||
|
but that **the expensive part only has to happen once.**
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Do not oversell the economics. This audience will smell it instantly, and the
|
This is the slide that turns The Bad from a complaint into an invitation.
|
||||||
sovereignty argument does not need a fake cost argument propping it up.
|
The honest concession first — it IS a lot of work — then the pivot: almost
|
||||||
|
none of it is per-site work. Land on the last line and pause.
|
||||||
|
If someone objects "a thousand basements do not exist yet" — agree, and say
|
||||||
|
that is precisely why you are standing here.
|
||||||
|
TODO: your own hours-per-week number makes the concession land harder.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What it costs in things that are not money
|
## Did I get it all right?
|
||||||
|
|
||||||
- **Learning curve you cannot delegate** — Proxmox, NixOS, OPNsense, ZFS,
|
**No. There have been at least two large rewrites — and a whole system before this one.**
|
||||||
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.
|
|
||||||
|
|
||||||
`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: name the predecessor, and say how long you ran it`
|
||||||
|
|
||||||
`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*.
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The 05-/10-/30- → dependsOn story is a genuinely good, concrete lesson and it
|
This is the credibility slide. Do not soften the "No" — an audience that has
|
||||||
is in the repo history. Tell it properly if the other two are thin.
|
just been told you gave an AI root needs to hear that you rebuild things when
|
||||||
|
they are wrong. The ADR-007 and ADR-014 stories are both in the repo if
|
||||||
|
anyone wants to check.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue