Andrea Bozzo | Blog

👋 Welcome to my technical blog!

I write about Data Engineering, Rust, Go, Python and open source technologies.

Exploring lakehouse architectures, real-time streaming and the modern data world.

A seed tray with 24 cells of uneven seedlings, a few bare and one bent, beside a seed packet showing an impossibly perfect plant

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.

November 9, 2026 · 10 min · 2075 words · Andrea Bozzo
An open toolcase with every tool in its own cut-out, and one oddly shaped empty slot in the middle with a blank paper tag tied to it

Where Should the Library Stop?

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.

October 20, 2026 · 11 min · 2296 words · Andrea Bozzo
A calm, uniform green dot; under a magnifying glass its inside is a tangle of gears, threads, loose papers and one cracked cog

Green Is a Policy, Not a Fact

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.

October 5, 2026 · 9 min · 1805 words · Andrea Bozzo
A half-cleaned PS5, a Raspberry Pi 5 and an external SSD on a desk at night

When a Weekend Raspberry Pi Project Became Infrastructure

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.

September 19, 2026 · 10 min · 2039 words · Andrea Bozzo
Writer A checks epoch 1 against base A, the transaction is rebased onto base B, and the premise the check established is lost before the commit lands

I tried to put data quality inside the commit. One pub(crate) stopped it.

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.

September 4, 2026 · 16 min · 3319 words · Andrea Bozzo
Two friends preparing their Fantacalcio auction together during a summer holiday

I Built a Model for Fantacalcio. The Useful Part Is When It Says No.

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.

August 20, 2026 · 9 min · 1820 words · Andrea Bozzo
dbt Core v2: 77 Rust crates, 18 Python files, no Python runtime

dbt rewrote itself in Rust. The speed is the boring part.

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.

August 4, 2026 · 16 min · 3408 words · Andrea Bozzo
Nephtys on a Raspberry Pi 5: 19.51 MB against 128.47 MB, 3.610 W against 3.584 W

Nephtys on a Raspberry Pi: 6.6× less memory, exactly the same watts

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.

July 25, 2026 · 11 min · 2227 words · Andrea Bozzo
Zerobus Ingest, Rust producer, Unity Catalog sink

Zerobus Ingest: when Unity Catalog becomes the sink

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?

July 5, 2026 · 12 min · 2374 words · Andrea Bozzo
dlt + dbt on one Unity Catalog

dlt + dbt on One Unity Catalog (and Why It's Not 'Two DLTs')

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.

June 22, 2026 · 9 min · 1740 words · Andrea Bozzo