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 202615 min read
Architecture

The Second Pattern: Specification

Nine optional parameters is the symptom. The problem is a business rule that has to run in SQL and in memory, written twice and quietly drifting apart.

Aug 202622 min read
Shipping & Tooling

Building Research

A desktop research workspace in Laravel and NativePHP. Streaming SSE into a queued job, distilling reports with a local model, and why cosine similarity cannot tell a paraphrase from a contradiction.

Aug 20264 min read
Architecture

Every Feature Touches Ten Files

Ten files open for a one line change is either layering working correctly or one idea smeared across a codebase. The count does not tell you which, and git history does.

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.