<!-- Generated from blog.html at build time. Do not edit. -->

> Canonical: https://antifailure.dev/blog

> Notes on shipping schema changes without taking production down: what staging cannot measure, and what a test environment should do with an outbound call.

# Notes on shipping schema changes without taking production down.

What staging cannot measure, what masking has to prove, and what a test environment should do with an outbound call. Written from the parts of the system that already work.

- August 29, 2026 · Postgres Staging cannot tell you how long a lock is held A migration that runs instantly against a seeded table can hold an exclusive lock for minutes against a real one. The difference is row count, and staging does not have it. Read it →

- August 28, 2026 · Postgres Masking data is easy. Proving it worked is the product. Any UPDATE statement can overwrite an email column. The hard part is showing that nothing identifying survived anywhere, and that nobody can skip the check. Read it →

- August 27, 2026 · Testing There are five useful answers to an outbound HTTP call in a test environment Most environments have two: let it through, or break. Neither is right for a payment processor, and the gap is where test runs charge real cards. Read it →

There is a feed .

## Know what happens before you deploy.

Create a disposable production twin for every risky change. Catch migration failures before they reach customers.
