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.
Subjects
Five subjects. Each one a hub with a place to start.
How APIs outgrow the design they shipped with, and what to fix first.
Architecture44 articlesRecognising the pattern you already live inside, and pricing the exit.
PHP & Laravel52 articlesThe language got good. Most code has not caught up with it.
Shipping & Tooling34 articlesDeploys, local environments, CLIs, and where agents actually help.
Engineering Leadership31 articlesThe job changes from writing code to deciding what gets written.
Series
Longer arguments, read in order.
Master the tools, habits, and operating models needed to ship high-quality software in a day-to-day workflow shaped by LLMs, moving past outdated sprints and velocity metrics.
Series10 parts · 107 minEngineering ManagementScale your engineering organization and build a high-performing team culture. Learn modern leadership frameworks for managing remote engineers, technical debt, and team coaching.
Series10 parts · 71 minFrom Requirements to RealityTransition from writing simple code to designing complete architectures. Learn how to shape features, design database entity-relationship diagrams (ERDs), and plan before you build.
Series7 parts · 50 minWhy Is This Hard To Change?A diagnostic series for Laravel codebases that are clean, modern, well tested, and still expensive to work in. Each part starts from a symptom a team actually reports, works back to the structural cause, and prices the fix honestly, including the times the answer is to leave it alone.
Series6 parts · 50 minBuilding Modern Laravel APIsBuild and deploy production-ready Laravel 13 APIs using PHP 8.5. Design an opinionated, robust architecture that scales under real production load through a step-by-step complete application build.
Series10 parts · 128 minThe Second PatternNine architecture patterns that rarely get named in PHP, and one article on the ones that are not worth it. Each starts with the obvious move, finds the exact point it breaks, then reaches for the pattern that fits. Built in Tempest, aimed at anyone writing PHP REST APIs.
Reference
Patterns to look up, not read through.
Longer reference
The engineering career framework
Six levels from early career to company-wide technical leadership, with the expectations and growth signals for each, for individual contributors and for managers. Free to copy into your own company.
Topics
Or browse by topic.
- Agents 12
- AI 22
- API integration 15
- Authentication 7
- Career 9
- CLI 9
- Code organization 20
- Code quality 7
- Data objects 10
- Databases 10
- Deployment 11
- Design patterns 23
- Developer experience 6
- DevOps 14
- Distributed systems 7
- Docker 8
- Domain-driven design 14
- Eloquent 12
- Event-driven 8
- Feature flags 3
- Frameworks 6
- Frontend 8
- Go 9
- HTTP 9
- Laravel 114
- Linux 6
- MCP 6
- Multi-tenancy 4
- Object-oriented design 9
- Obsidian 5
- Open source 10
- OpenAPI 4
- Performance 6
- PHP 65
- Planning 14
- PSRs 6
- Queues 10
- Refactoring 10
- Remote work 6
- Requirements 4
- Resilience 4
- REST APIs 23
- Security 9
- Sevalla 17
- Specs 3
- Static sites 4
- Team culture 11
- Tempest 14
- Testing 14
- Webhooks 5
- Workflows 9
Archive
Everything, newest first.
Most of Your API Has Already Been Designed
Error formats, retries, lost updates, webhook signing: the IETF has already answered them. api-toolbox brings those answers to Laravel, one RFC per feature.
How to Write Specs, RFCs and ADRs
Spec driven development in practice: what an RFC, an ADR and a spec are each for, the templates I use, and one feature taken through all three from a blank page.
What Actually Constrains a Coding Agent
I had fifteen agents build the same Laravel and Slim API. Written decisions mattered most, the framework second, PSRs barely at all, and Laravel already ships the first.
Sending And Receiving Webhooks In Laravel
A webhook is a contract between two codebases that never meet. Both ends of it in plain Laravel: what to sign, how long to retry, and how the receiver avoids doing the work twice.
My business lives in my vault now
My clients, hours, invoices and articles moved out of FreeAgent, Upwork and my head into plain files in my Obsidian vault, kept by an agent, with Tabstack finding the next client.
My clients live in a folder now
Freelance tools are good at the books and bad at everything around them. mavis keeps clients, calls, time and invoices as Markdown files, run from one binary.
Building a home-education platform with Laravel 13, Inertia and React, and shipping it to Laravel Cloud
A Laravel 13, Inertia and React platform for home educating my son: an append-only learning record, a planner, AI kept on a short lead, and what Laravel Cloud asked of the code.
The Petstore scores 65
The most copied OpenAPI document in the world is a bad API for an agent, and it takes a third of a second to find out. So I built the check I was doing by hand.
Your endpoint, as an agent sees it
An agent never reads your API. It reads a flattened projection of it, and the flattening loses things you did not know were losable. Here is how to look at yours.
The UK is mandating e-invoicing in 2029, and your invoicing code is not ready
From 2029 every UK VAT invoice has to be structured data that passes about eleven hundred rules. What that means for the invoices table you already have, and the four fields that break first.
Digital sovereignty is written in PHP, and the UK just made it fundable
The PHP Foundation made the case for funding upstream maintenance through procurement. Their proposals are written against EU rules. The UK deleted the clause that was blocking them.
The Second Pattern: The Ones I Left Out
Five patterns I know well, that come up constantly, and would not reach for in PHP. Not because they are bad ideas, but because of what the runtime does and does not give you.