Reverting a 4-month refactor in 29 minutes (and shipping it again a week later)

A 138-file permissions refactor we’d worked on since June merged at 12:28. By 12:57 it was reverted. The bug was small. The revert was the right call. The version we re-shipped a week later was the same diff plus one fix — and a different way of proving it was safe before the merge button.

November 10, 2025 · 7 min · Lars Evald Andersen

Rector without the level sets: upgrading PHP 7.3 → 8.4 the boring way

Rector ships with version ‘sets’ that bundle hundreds of rules to take your code from PHP X to PHP Y. We didn’t use any of them. Here’s the 20-rule cherry-pick we used to upgrade a multi-repo PHP 7.3 codebase to 8.4 — and why hand-picking turned out to be the smaller risk.

September 15, 2025 · 6 min · Lars Evald Andersen