2026-07-28
The anatomy of a silent drift
A payments column changed meaning on a Tuesday. Nothing failed, every test passed, and the number was wrong for nineteen days. Here is the whole timeline.
9 min
2026-07-09
Why row counts are the worst drift signal
Volume is the metric everyone monitors because it is the easiest to collect. It is also the last one to move.
6 min
2026-06-22
Calibrating PSI so one threshold works everywhere
A stability index means nothing until a 0.6 in one column means the same as a 0.6 in another. The calibration we ended up with.
11 min
2026-06-03
Alert fatigue is a modelling failure, not a discipline problem
If your team has learned to ignore a channel, the channel is wrong. Treating dismissals as training data.
7 min
2026-05-14
Data contracts are necessary and not sufficient
Contracts catch the breaks you predicted. Something still has to watch the ones you did not.
8 min
2026-04-30
Sketching a billion rows into four kilobytes
HyperLogLog, t-digest, and the practical limits of profiling data you are not allowed to read.
12 min
Only the first post is written — the rest are titles, on a demo site.
Get the next one by email.
Roughly monthly. Methods and post-mortems, no product announcements.