The Daily
A note a day on APIs and the realities of shipping web applications. Stuff I've actually learned across 25 years of doing the work.
Roll Your Own Feature Flags vs. LaunchDarkly: The 12-Month Reckoning
I've built the DIY feature flag store twice. Here's the honest ops cost after 12 months that nobody talks about when they say 'it's just a database table'.
The first time I built a feature flag system from scratch, I was proud of it. Took maybe a day and a half. Fit neatly in one migration and a service class. The second time I built one, I knew better - and I still did it anyway, for a client who didn't want to pay $300/month for LaunchDarkly. Twelve months later I had…
Read the daily →Doppler vs. .env Files: What 'Simple' Actually Costs You
I ran .env files on single-server stacks for years. Doppler didn't sell me on features - it sold me on the operational debt I'd quietly been carrying.
I ran .env files on single-server stacks for a long time and told myself it was fine because the server was managed, the team was small, and a secrets manager felt like enterprise overhead for problems I didn't have. Then a client asked me to produce an audit trail of everyone who'd accessed their Stripe secret key…
Read the daily →Eager Loading Is Not Always the Answer in Laravel
Sometimes a 40-join Eloquent query is worse than lazy loading. Here's when I reach for chunked lazy loading instead.
The conventional wisdom in Laravel land is "always eager load your relationships." Avoid the N+1 problem. Use . Done. And most of the time, that advice is correct. But I burned a queue worker to the ground last year following it blindly, and I want to talk about what actually happened. The Setup I was building a…
Read the daily →Caddy as an nginx Drop-in on a Laravel VPS: Mostly Great, Sometimes a Fight
I swapped nginx for Caddy on a client VPS last year. Automatic HTTPS is genuinely magic. A few things will bite you if you're not ready.
I've been running nginx in front of PHP-FPM for so long that switching felt like switching hands for a handshake. But after helping a client migrate a Laravel app to a fresh Ubuntu VPS last year, I decided to give Caddy a real shot instead of reaching for my usual nginx boilerplate. The automatic HTTPS alone saved me…
Read the daily →Docker Compose Overrides Are the Env Layer You're Already Missing
Most teams fork their docker-compose.yml per environment and spend the next year keeping three files in sync. There's a better way.
Most teams I talk to have three versions of - one for dev, one for staging, one for prod - and they're all 80% identical. Someone changed the base image six months ago, updated dev and prod but forgot staging, and now staging has been silently running a different PHP version for half a year. I've seen this exact…
Read the daily →