A test that reaches into component state asserts on the implementation, and every refactor that changed nothing observable breaks it. Querying by role rather than by test id…
Numeric module ids in 4 shifted when a module was added, which changed the content of every chunk after it and invalidated caches for files that had not…
Forty gigabytes of logs a day and no answer to “is checkout slow”. Metrics, logs and traces answer different questions, and logs were doing all three badly.
PHP’s sorts were unstable before 8.0, so two elements the comparator called equal came out in an order that could differ between runs and between array sizes. The…
A report asking for the top quartile of customers by spend was a subquery computing a count, a second computing a threshold, and arithmetic in PHP. NTILE divides…
A five-year-old project has two hundred migrations, and every test run and every fresh install replays all of them in order. Forty seconds off every test run is…
Almost every MySQL tuning guide lists forty variables, and on a dedicated server the first one accounts for most of the difference. The rule of thumb is 60-70%…
Version 4 silently provided browser implementations of crypto, path and stream; 5 does not, and the first build after the upgrade does not compile. Adding the fallback works…
A long-running PHP process keeps everything the framework touched, so a worker that runs forever accumulates memory whether or not there is a leak. The three limits are…
Fifty PHP-FPM workers all waiting on one slow upstream is a site that is down because of a service most of its pages do not use. Rejecting immediately…