The reporting code had one caller and a six-hour test run. Finding the seam, dealing with the shared schema honestly, and routing traffic gradually rather than switching.
Scripts in composer.json run with vendor/bin prepended to PATH, so the tools do not need a path prefix — which is why “test”: “phpunit” works and the same…
PHP 7 turned most fatal errors into thrown objects, but they do not extend Exception — they extend Error, and both implement Throwable. Every existing catch (Exception $e)…
Composing generators without yield from means a wrapper loop that yields each item from the inner one, which works and costs a function frame per item on top…
A composer.json edited by hand and a lock file regenerated on a different machine drift apart quietly, and the first symptom is usually a deploy installing something nobody…
Sending the same event by email, SMS and a database record meant three call sites and three formats to keep in step. 5.3 makes the notification one class…