Skip to main content
WritingVideosSpeakingCodeAbout

Writing

Everything I have written down

Articles, reference guides and multi-part series on API design, architecture, PHP and the work around them. All of it free, none of it behind an email form.

Aug 20268 min read
Architecture

It Was Fine Until We Added A Second One

Every trigger in this series has been a second something. That is not a coincidence, and it is the only signal in here reliable enough to act on.

Aug 20268 min read
Architecture

Nobody Wants To Touch That Model

Every Laravel codebase has a model people route around. Counting its lines is the least useful thing you can do to it, and extracting traits is how the count gets hidden rather than fixed.

Aug 20267 min read
Architecture

The Interface With One Implementation

You added it so the thing could be swapped out later. Later arrived and nothing was. Counting implementations is the wrong test, and where the interface lives tells you far more.

Aug 20267 min read
Architecture

The Job And The Controller Disagree

The same operation runs from two entry points and they have quietly drifted. In Laravel that drift has a predictable shape, because validation lives at the edge and only one edge has it.

Aug 20268 min read
Architecture

The Rewrite You Should Not Do

You have run the diagnostics and you have a list. Now price the three options honestly, including the one where you do nothing, which is right more often than the other two put together.

Aug 20268 min read
Architecture

Your Test Suite Is an Architecture Report

A slow Laravel test suite gets treated as a tooling problem. It is usually a coupling measurement, and the number worth watching is not how long the suite takes.

Aug 202614 min read
API Design

Accepting Data You Don't Control

Webhooks and callbacks you did not design. An ingest server in Laravel 13 that owns the envelope, stores the payload whole, and validates where failure means a retry, not data loss.

Aug 20269 min read
ArchitectureAI Draft

Queues you can pause and buckets you can walk away from

Two weeks of Laravel 13: a read-through filesystem driver for zero-downtime storage migrations, a global queue pause switch, debounced listeners, and Redis cluster fixes worth upgrading for.

Aug 202614 min read
Shipping & Tooling

Controlling Code Quality When an Agent Writes Your Laravel

Specs, ADRs and path-scoped rules. The three layers of context I build around an agent so it writes Laravel the way my codebase does, not the way every tutorial does.

Aug 202610 min read
Shipping & Tooling

Eighteen Files And One Nix Module: How My Brain Works

The Obsidian vault I use as a system of record for every project, why the checkouts inside it are gitignored, and why half of it is generated from my NixOS flake.

Aug 202612 min read
Shipping & Tooling

MCP Goes Stateless: What Changed and Why It Matters

The Streamable HTTP transport replaced HTTP+SSE and quietly made MCP servers stateless. Here is what that means, how the new transport works, and why it unlocks serverless and edge deployments.

Aug 202613 min read
Shipping & Tooling

One Host, Twenty-One Files: A NixOS Flake That Stays Out Of Your Way

How auto-imported flake-parts modules, wrapped desktop packages, and a single base16 palette file shape one NixOS config - and where each one bites.