DEVELOPMENT · 8 MIN · 2026-08-22
A Modular Monolith That Doesn't Hurt
Module boundaries, service layer, and queues — Laravel is enough for longer than you think.
Structure that survives
app/ ├── Modules/ │ ├── Billing/ │ ├── Reporting/ │ └── Identity/ ├── Services/ └── Support/
Rules I follow
- Modules never query each other's tables directly.
- Cross-module communication goes through service classes or events.
- Queues for anything slow: exports, emails, audit writes.
Why it works
You get 80% of microservices' clarity with 20% of the operational cost. When a module truly needs independence, the extraction is mechanical — not a rewrite.
I spent two hours debugging this site's CSS once. The bug was a missing semicolon. I am not proud.