Blog


Your Memory Is Not a System

August 28, 2026

Your Memory Is Not a System

A few years back I pushed a release to production and broke the whole site for about twenty minutes. The code was fine, and the tests passed. The problem was that our deploy had a specific order to...

Read

Weekly Digest - August 24, 2026

August 24, 2026

Weekly Digest - August 24, 2026

Happy Monday All! On August 17th GitHub went down for almost eight hours and took a ton of services out with it. The root cause was that the load balancers saturated, and Copilot's retry loops...

Read

Your Side Project Doesn't Need to Be Perfect to Ship

August 21, 2026

Your Side Project Doesn't Need to Be Perfect to Ship

When I started building Unleashed Podcasts, I hardcoded a bunch of stuff that had no business being hardcoded. Values like XP for publishing an episode, streak rules, and the list of episode statuses...

Read

GitHub Goes Down for 8 Hours, and Your Whole Team Stoped. Here's My Fix.

August 19, 2026

GitHub Goes Down for 8 Hours, and Your Whole Team Stoped. Here's My Fix.

Like most of you, on August 17th I sat down to review the code that my team had pushed to GitHub. I opened GitHub in a browser to see the Unicorn letting me know there was a problem. Occasionally,...

Read

Weekly Digest - August 17, 2026

August 17, 2026

Weekly Digest - August 17, 2026

Three posts this week: a way to make an AI agent fix its own duplicated code, a deep look at how PHP's loose comparisons can hand attackers a login, and the email templates I use to book podcast...

Read

The Complete Guide to PHP Type Juggling and Comparison Gotchas

August 14, 2026

The Complete Guide to PHP Type Juggling and Comparison Gotchas

Years ago I inherited a login system that checked passwords with something close to this: Most of the time it worked, but occasionally a user reported they could log in with the wrong password,...

Read

Weekly Digest - August 10, 2026

August 10, 2026

Weekly Digest - August 10, 2026

Three posts this week. One PHP function I wasted years reinventing, a podcast about spotting duplicated code, and a system for finding podcast guests when your show is small. I spent years writing...

Read

Stop Parsing URLs Manually in PHP

August 7, 2026

Stop Parsing URLs Manually in PHP

A few years ago, I was doing a code review and came across something that stopped me cold. A colleague had written about 12 lines of strstr(), explode(), and regex to pull...

Read

Weekly Digest - August 3, 2026

August 3, 2026

Weekly Digest - August 3, 2026

Three this week: a lesson about feedback loops learned the hard way, a fast new static analysis tool for PHP, and a free tool for catching broken podcast feeds. Scott submitted a PR with a couple...

Read

The Importance of Small Feedback Loops

July 31, 2026

The Importance of Small Feedback Loops

A few years ago I submitted a pull request that felt pretty solid. A couple hundred lines of changes, some new business logic, a refactor or two baked in because I was already in there. I was proud...

Read