writing
Articles
Long-form notes on architecture, Symfony, and backend design.
- Vue 3TypeScriptJune 20, 2026
Stop modeling UI state with booleans
isLoading, isError, hasData - three booleans describe eight possible combinations, and only four of them are states your component should...
- SymfonyDDDApril 3, 2026
Domain events with Symfony Messenger: keeping side effects out of your aggregates
An aggregate that sends an email when an order ships knows about SMTP. That's the wrong kind of knowledge for a class whose only job is t...
- DDDFebruary 12, 2026
Bounded contexts are a language boundary, not a folder structure
A folder named Billing next to a folder named Shipping looks like two bounded contexts. It isn't one until the word Order means something...