
Writing code got faster. Why didn't the work?
AI didn't remove the bottleneck, it moved it: review, verification and integration. In an existing system, the real cost is finding and proving the rules.
Talks and infographics
Slides from my talks and one-page visual summaries will live here.

AI didn't remove the bottleneck, it moved it: review, verification and integration. In an existing system, the real cost is finding and proving the rules.

From number collisions to dual-write, from duplicate delivery to determinism: how an invoice moves on without being lost, issued twice or changing outcome.

Five breaking points from the working set to a separate data tier, the wrong diagnoses, and a Laravel production stack with a reason for every component.

Why start with a modular monolith, what microservices cost, the four measured signals that justify the move, and carving out one module with the strangler pattern.

Corporate or owner-run? Ten posts on decisions, process, roles, knowledge, pay, meetings, crisis and growth; and eight questions to ask in an interview.

Two phases of the same run measured the same service three times apart. What caught the error was a second method that measured the same thing.

Four index strategies for a queue table on Postgres 17: a 30-second benchmark, the generic plan cliff, and index size and autovacuum under 15 minutes of churn.

From resource and method to the OpenAPI contract: seven consistency decisions that keep an API from surprising its clients, with examples from the source posts.

From schema to delivery, from idempotency to DLQ replay: what to check at every stop so a message survives the queue intact.

Go, FrankenPHP and PHP-FPM on the same OAuth2 service: requests per core, CPU per request, PostgreSQL load and instance count.

If each of 800 tests fails for no reason 0.5% of the time, the suite is red on almost every run. Why retry isn't a cure, and what catches flakiness?

Three questions and a decision matrix for choosing between Gitflow, GitHub Flow, and trunk-based development by product shape, team size, and deploy tempo.

We measured sync.Mutex and channels in Go 1.27 across three scenarios and different goroutine and P counts: which is faster depends on G and P.

PHP's 2026 snapshot through W3Techs, Stack Overflow, JetBrains and Packagist data: five of six signals strong, one a warning; weaknesses included.

Blade, Alpine.js, Livewire, Inertia.js, and SPA: choosing the UI tool in a Laravel project by interaction density, SEO needs, and the team.

Cold request, load test, OPcache preload and the Laravel preload curve: the measured cost of seven PHP frameworks on a single page.

A partial index on a Postgres 17 queue table: 41 times smaller, a cliff on the generic plan, bloat under 15 minutes of churn, and an autovacuum that never came.

Timeout, retry and circuit breaker: how three lines of defense stop a slow external service from locking up your whole application.