Topic

Data quality & contracts

Validation, reconciliation, quarantine and tolerant readers — practical boundaries for imperfect producers and changing schemas.

“Fix it upstream” stops being useful advice when producers update at different speeds or belong to another team. Then the boundary has to do real work: null, type, range, and referential checks; quarantine that keeps bad records inspectable; reconciliation against expected volume; and readers that can survive a field arriving late or changing shape. These notes are about making failure visible without turning every imperfect record into data loss.

All writing

Essay Reference systems, measured Measured on my own hardware

Removing an optional field breaks consumers. Adding one breaks history.

Schema changes teams call safe still break someone. A JSON Schema contract checker, 51 labelled changes, an oracle, and no breaking change passed as safe.

  • Data quality & contracts

12 min read

Essay Reference systems, measured Measured on my own hardware

Exactly-once held through nine failures. The window counts did not.

Kafka, Flink, ClickHouse and Iceberg stayed exact through nine failures, yet 10-second window counts fell to 59.8% of on-time events. Why, and the fixes.

  • Kafka & streaming
  • Data quality & contracts
  • ClickHouse

13 min read

Essay Reference systems, measured Measured on my own hardware

Validation picked the fraud model that had read the future

A naively joined fraud model beat the point-in-time one on validation, 0.746 to 0.681 AUC-PR, then scored 0.363 to 0.941 on the next two weeks. Why it happened.

  • Applied ML & evaluation
  • Data quality & contracts

16 min read

Essay

Label the string, not the row: a short-text triage lab

A synthetic 20,000-row multilingual lab: normalize to distinct keys, cluster them for one LLM call each, and why a cosine threshold needs a margin.

  • Applied ML & evaluation
  • Data quality & contracts

15 min read

Essay Notes from production Observed in production

The Spark 4 upgrade that succeeded and wrote nothing

Spark 4.2 on hadoop-aws 3.5 read 9,029 records and wrote zero objects, and no task failed. Why the S3A committer was bypassed, and the tests that now catch it.

  • Apache Spark
  • Data quality & contracts

17 min read

Essay Agents in a real repository Operating model

Ten gates, and the failure behind each one

Every gate in this repository exists because something got through. Three of them because a suite reported success against a broken artifact.

  • AI agents in production
  • Data quality & contracts

10 min read

Tutorial The lakehouse spine Measured on my own hardware

Bronze, silver, gold on Iceberg: the dbt config that is silently ignored

Build a medallion pipeline with dbt-trino on Iceberg, orchestrate it with Airflow 3, and find the partition spec dbt accepts and discards without a warning.

  • Iceberg & the lakehouse
  • Data quality & contracts

~40 min, most of it waiting on two container builds

Essay

The data platform is part of the product

A practical operating model for reliable data and AI products: consumer-facing promises, typed decisions, idempotency, provenance, and repair.

  • AI agents in production
  • Data quality & contracts

11 min read