
One Year, 24 Posts: What Held Up and What Didn't
My first post promised a revolution. My recent ones mostly report what failed. A plain-language look back at a year of writing about data tools, written for readers who have never used any of them.

My first post promised a revolution. My recent ones mostly report what failed. A plain-language look back at a year of writing about data tools, written for readers who have never used any of them.

My data profiler gives the same untouched file a lower score on New Year’s Day. I found that by using it as a dependency for the first time. On the glue a real pipeline needs, and the line between what a library should do and what it should leave to the caller.

My backup verifier passed 24 of 24 checks while the backup job sat in failed. It is not the only green thing I have built that answered a narrower question than the one I was asking. On what a green light actually proves, and the checks that earn it.

Saturday I cleaned a PS5. By Sunday evening a 4 GB Raspberry Pi was running my DNS, a password vault and offsite backups, and the lessons had spun off into Lares, a small public stack built around what happens when things fail. On Monday it bit back.

A falsification experiment with a written kill list and a negative result. Delta has a purpose-built idempotent commit; iceberg-rust rebases a transaction onto a base the caller never checked, so an external writer cannot make a commit conditional. The green concurrency test was a false pass — 0 of 40 rounds ever raced — and only a failpoint showed the duplicate.

I started with Milan in Championship Manager 03/04, went through an almost perfect auction and a season shaped by injuries, then built Fantabuddy on holiday: a system that turns player lists, history and APIs into an auditable auction report.

I opened a bug report against dbt and found a codebase nobody had told me about: 77 Rust crates where the Python used to be. This is what the rewrite is actually for, why the marketing undersells it, and what I broke loose while poking at it — two fixes, both for bugs that never printed an error.

I had never publicly written about Nephtys, and the first thing I have to report about it on real hardware is a null result: the memory advantage reproduced on a Raspberry Pi 5, the energy advantage never existed.

In the dlt+dbt post the contract was a Unity Catalog schema. With Zerobus Ingest I moved the same question to the producer edge: when the sink is already a governed Delta table, do you really need a bus in the middle?

Python-native ingestion with dlt (dlthub), SQL transformation with dbt, and a single Unity Catalog schema as the contract between them. Notes from wiring them together on a real Databricks workspace — including the naming collision that bit me in actual code.