The Second Pattern
Nine 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.
Series Curriculum
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.
The Second Pattern: Anti-Corruption Layer
Carrier B speaks GraphQL, so the response arrives shaped like your query and feels like it belongs to you. It does not, and their vocabulary is now load-bearing in your domain.
The Second Pattern: Transactional Outbox
Commit then notify loses messages. Notify then commit sends lies. The dual write problem has no clever solution, and Tempest ships more of the machinery than it advertises.
The Second Pattern: Idempotent Receiver
Select then insert handles the easy half of duplicate delivery and misses the concurrent case, which is the half that actually fires. This time the framework has already done it properly.
The Second Pattern: Claim Check
A payload that is 40KB almost always and 12MB occasionally cannot be sized for. Making it smaller is not the fix, because the problem is the channel it is moving through.
The Second Pattern: Bulkhead
Carrier B did not go down, it got slow, and every worker sat inside an eleven second call that returned a valid 200. Circuit breakers ask the wrong question about that.
The Second Pattern: Process Manager
Everyone calls it a Saga. Most of the time it is a Process Manager, and the muddle is why teams adopt the word and then never write the compensations it never promised them.
The Second Pattern: Event-Carried State Transfer
A consumer that receives an ID and immediately asks you for the record has not been decoupled from you. It has been given a slightly slower way to call your API.
The Second Pattern: Blackboard
A pipeline works until one step both needs and improves the same piece of information. That is a cycle, and a topological sort has exactly one contract: there are no cycles.
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.
More Series
Building Software in the AI Era
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.
Learning Series
10 partsEngineering Management
Scale your engineering organization and build a high-performing team culture. Learn modern leadership frameworks for managing remote engineers, technical debt, and team coaching.
Learning Series
10 partsFrom Requirements to Reality
Transition from writing simple code to designing complete architectures. Learn how to shape features, design database entity-relationship diagrams (ERDs), and plan before you build.
Learning Series