Laravel at scale: lessons from shipping a six-figure-user SaaS
Laravel can absolutely run at scale — but only if you treat the framework as a starting point, not a finish line. Here is what we changed when traffic crossed a million requests a day.
Queue hygiene
Every non-trivial interaction became a queued job. We split queues by latency budget: realtime (< 1s), batch (retries, emails), and heavy (reports, exports). Horizon dashboards live next to the on-call runbook.
Caching as a first-class concern
- Read-through caches around every repository method with a consistent TTL policy.
- Tag-based invalidation keyed on the aggregate root.
- A small "cache budget" per request — exceeding it logs a warning that shows up in code review.
Database discipline
No N+1 ships. Our code review checklist includes with() verification and an explicit note on each query that runs inside a loop. Telescope is useful in staging; in production we use Blackfire and slow-query logs.
The framework does not make you fast. Predictability does.
Observability
Structured logs, request IDs propagated through queues, p95 latency on every public endpoint, and a weekly review of the top-10 slowest routes. Nothing exotic — just applied rigorously.
Related Posts
Popular Posts
- RAG without hype: a production checklist we actually use 230
- Laravel at scale: lessons from shipping a six-figure-user SaaS 128
- Security by default: the OWASP items we refuse to skip 112
- Zero-downtime deploys on a budget: Laravel + AWS in practice 97
- Testing strategy for small teams: 80/20 pragmatism 86