Archive
MJ Convento
-
Laravel 12: the release where almost nothing broke
Our internal ops app went from Laravel 11 to 12 in under an hour of real work. The only genuine breakage was Carbon 3, which quietly flattened a finance report. Notes from three months in.
-
Property hooks, and the three places they earn their keep
PHP 8.4 shipped in November. Three weeks of converting getter and setter pairs to property hooks got me to nine, and Doctrine ORM throws if you put one on an entity. Notes on where the feature actually pays.
-
Cache stampedes, and the Lock component doing the boring part
A Redis failover cost us four minutes of 9 second p99 because the lock I hand rolled in 2019 had two bugs. Replacing it with the Cache Contracts and the Lock component deleted 210 lines.
-
Laravel 11 and the missing Kernel.php
Notes from moving our internal ops app from Laravel 10 to 11: why we kept both kernel files, how per-second rate limiting fixed a courier webhook, and what the /up route is really doing.
-
json_validate and typed class constants, four months in
Measured numbers from validating a 24.7 MiB partner payload with json_validate instead of decoding and discarding it, the one case where it saves nothing, and what typed class constants caught in our code.
-
Symfony 7: the upgrade that took an afternoon, and the one that took a month
We went 6.4 to 7.0 in January. The version bump was an afternoon of deprecation cleanup; converting 704 route annotations to attributes took a month. Notes on both, plus the normalizer that broke in production.
-
The GitHub Actions workflow I keep copying into PHP projects
One CI workflow I have been pasting between PHP repositories for a year and a half, explained line by line: the PHP matrix, Composer caching, a MySQL service container, and the health check that lies.
-
Laravel 10 in an internal app: native types, the Process facade, and Pennant
Our internal ops app went 9 to 10 in nine hours, not the ten minutes the upgrade guide estimates. Notes on two silent breaks, replacing exec() with the Process facade, and the Pennant gotcha that bit us.