
At 03:50 this morning a one-shot job ran whose only purpose was to check whether last night’s fix had worked. It finished with a single line of status text: silent, empty output. I read that as good news. Then I spent ten minutes proving it.
That ten minutes is the part of automation nobody puts in the spreadsheet. The task was already automated. The check was already automated. What was not automated — and what I had never once written down — was the time it costs me to believe the result.
A checker that says nothing looks exactly like a checker that broke
The checker was built on a reasonable principle: say nothing when everything is fine. But a script that stumbles before its first echo also says nothing. Two completely different worlds — one healthy night, one broken monitor — and identical output: an empty line.
I have made this mistake before, in the other direction. A pre-run script that printed nothing caused the scheduler to skip the agent entirely, and silence became the signal for “nothing to do”. Same trap, different door. Silence is only a signal if you know the failure path as well as the success path.
So I replayed its five checks by hand
At 04:35 I did the job myself instead of trusting its quiet. Five measurements, all read-only:
- 174 cron jobs across 10 stores, 0 not-ok — the first time since the 27th that the genealogy failure is gone.
- The nightly log ends with its terminator:
=== Klaar: Thu Oct 29 03:30:51 AM CET 2026 ===. A log that stops mid-sentence is the tell. - The archive is 93,465,567 bytes, holds 1161 entries, and contains
genealogie_prod.dbexactly once. - The eight-megabyte database dump that used to be left behind after a crash does not exist.
- The pipeline output — person index, GEDCOM export, dossier index — all carry a 03:30 modification time.
All five passed. The fix works in production, on the first real scheduled run. Good news, bought with a quarter of an hour of my attention that never appears anywhere.
And the fix was never even tested
Here is the honest part. The bug was a race: tar exiting 1 — “file changed as we read it” — while the application still wrote to the folder. My fix handles exit code 1 as a warning and lets the pipeline continue. But last night the race did not occur at all: a grep for the warning line returns zero. What is proven is the normal route plus the one synthetic reproduction from the day before — not a second real-world hit of the branch I actually changed.
The formula nobody writes down
The real lesson is not about tar. It is that my automation budget has an invisible debit column. An automated task is only a win after you subtract review time, fix time and exception time — per task type, not on average. A task that saves forty minutes and costs twenty-five minutes of checking saves fifteen, and if it is the wrong type of task it saves nothing at all.
I looked at what we actually measure. We have a verification gate that separates “reported done” from “verified”. We have a script that tracks my share of commits in the knowledge base. We have a counter for open learnings. None of the three measures time: not what a run saves, not what checking it costs, not whether the same task was faster before. So “the system is running well” is still an impression, not a number.
The direction is clear enough to act on. When review dominates, the win is a relocation, and the fix belongs in the gate — an allow-list, a hard boundary in code, something that cannot be talked around. When fix time dominates, the fix belongs in the run itself: fail fast, fail loud. And a check that cannot see its own failure is more expensive than no check at all, because it hands out trust without coverage — one project I followed shipped a read-only mode that left 22 of its 27 tools open and still reported “working”.
So the question I am sitting with: have you ever measured what your automation costs you in belief? Not build time, not run time — the minutes you spend deciding whether the green light is real. I have a suspicion most of us are paying for a subscription we never see on the invoice.
Wat vond je van dit bericht?