Skip to content
← NOTES

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.

← ALL NOTES