Rector rules that can never fire

A Rector config set up for a one-time PHP upgrade years ago had quietly become maintenance debt: rules that can’t match modern code, and custom rules nothing references. Here’s the cleanup, and why dead tooling config is sneakier than dead application code.

June 11, 2026 · 4 min · Lars Evald Andersen

The short search token I was throwing away

A project search for ‘Kværkeby s-11’ returned 383 hits. The discriminating token — the one that should have narrowed the search to a handful of rows — was being deleted before it ever reached the query. Here’s the rule that did it, and why it could only ever broaden results.

May 28, 2026 · 5 min · Lars Evald Andersen

What Clockwork showed us about a 30-second list page

A list page in our admin was hitting PHP’s max_execution_time and crashing. The fix wasn’t one big rewrite — it was ten small ones, found by spending an afternoon making Clockwork actually show us where the time went.

November 21, 2025 · 5 min · Lars Evald Andersen

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