# Laravel developer — since 2014

> The work I do with Laravel: APIs, queue-consuming background processes, testing, and when I use what the framework offers and when I leave it.

- Highlights: 12 years
- Experience: Since 2014
- Updated: 2026-10-31
- Source: https://muhammetsafak.com/expertise/laravel/
- Language: en-US
- Author: Muhammet Şafak

---
## Me in the Laravel ecosystem

Laravel is not an add-on to PHP for me but a way of working: routing, queues, validation, authorization and testing under one roof, with one contract. The [PHP page](https://muhammetsafak.com/expertise/php/) covers the language itself; this page covers how I use that roof.

Over time I saw that I do not have to use everything the framework offers. I take a pattern because it is needed, not because it comes ready-made.

I look at new versions the same way: my question is not "is this great?" but "does this fit my problem?". I have written version and migration notes on the blog starting from Laravel 4. Microservice boundaries, event-driven design itself and database internals I write about, with their costs, in the [Engineering section](https://muhammetsafak.com/engineering/).

## What is the Laravel Developer role?

Laravel is a web application framework written in PHP: it offers routing, database access, queues, validation and authorization as ready-made layers. A Laravel developer is the person who writes the application's business rules on top of those layers.

## What does the Laravel Developer do?

With Laravel I write APIs, web applications and background processes that take work off queues. I keep the business rule in separate, testable classes instead of spreading it across controllers and models; queues, scheduled tasks, authorization and testing I set up inside the same application.

## Recent writing in this area

- [Production access sat with one person, and that person took a holiday](https://muhammetsafak.com/blog/production-access-sat-with-one-person/) (Blog, 2026-09-14): The only person with production database access went on holiday and diagnosis stopped. The need came down to four sentences; each became a design decision.
- [From Dual-Write to Outbox: A Log of Idempotent Consumption and Field-Level Encryption](https://muhammetsafak.com/blog/from-dual-write-to-outbox-idempotent-consumption-and-field-encryption/) (Blog, 2026-06-22): Lost events pushed me to a transactional outbox and at-least-once delivery to idempotent consumption; then I encrypted GDPR fields at row level.
- [Resolving an Invoice Number Collision in an E-Invoice Integration](https://muhammetsafak.com/blog/resolving-invoice-number-collision-in-e-invoice-integration/) (Blog, 2026-06-03): Two workers produced the same invoice number in production. A log of how I resolved the race condition vs. legal gap dilemma in a real project.

## Measurements in this area

- [Laravel's preload curve: 123 files buy eight times what the last 1,912 do](https://muhammetsafak.com/research/laravel-preload-curve/) (2026-08-22): The curve is not proportional to volume. The first 1,592 files — Laravel's own framework — buy 30 ms and add 1.2 seconds to start-up. The next 1,094 Symfony files buy 9.5 ms for free. The **123 files** after that (psr, carbon) buy 15.7 ms, more than the 1,094 before them. And the last 1,912 buy 1.8 ms while adding another 1.2 seconds. So the blanket preload the earlier record measured as a ceiling is the worst point on the curve that is not the origin: stopping at 2,809 files gives 12.77 ms for 1,514 ms of start-up, while 4,721 files ask 2,691 ms to reach 10.96 ms.

## Technologies I pair it with

- Laravel: Routing, queues, validation, authorization and testing under one roof.
- Composer: Where Laravel's packages come from; I weigh community packages selectively.
- PHPUnit: The test tool I meet in older Laravel codebases.
- Pest: The testing layer I prefer on new Laravel projects.
- Redis: The store I use for cache, session and queues in Laravel.
- MySQL: The primary relational store behind Eloquent.
- RabbitMQ: Where billing left the synchronous path.

## Questions in this area

- [Should I keep query business rules in Eloquent local scopes or in a repository layer?](https://muhammetsafak.com/just-ask/keep-query-rules-eloquent-local-scopes-repository-layer/) (2026-10-27)
- [For comments across many models should I use a polymorphic relation or separate tables, given indexing and foreign keys?](https://muhammetsafak.com/just-ask/comments-polymorphic-relation-separate-tables-indexing-foreign-keys/) (2026-09-29)
- [Should I use chunkById instead of chunk when the same job also updates the rows it iterates?](https://muhammetsafak.com/just-ask/should-i-use-chunkbyid-instead-of-chunk-when-the-same-job/) (2026-09-01)

## Frequently asked

### How long have you worked with Laravel?

Since 2014 — 12 years.

### What does a Laravel developer do?

A Laravel developer writes web applications, APIs and background jobs with the Laravel framework on top of PHP. For me that means putting the business rule in the right place inside the application, setting up queues and scheduled tasks, and building the authorization and test surface.

### What is the difference between Laravel and PHP?

PHP is the language itself; Laravel is a framework that runs on top of it. On the PHP page I cover the language's ecosystem and the framework decision; on this page, how I use the roof Laravel provides.

### Where do you put the business rule in Laravel?

I keep the controller thin: the business rule lives in action classes, validation in form requests, authorization in policies and gates. A rule spread across controllers and models ends up where nobody can find it at the first big change.

### Which parts of Laravel have you written about?

The blog archive carries separate posts on Eloquent and its relationships, middleware, service providers and the container, policies and gates, queues and Supervisor, scheduled tasks, Livewire, Inertia, Octane and broadcasting over WebSockets.

### How do you run queue workers in Laravel?

I wrote a separate post on Laravel's queue layer and keeping worker processes alive under Supervisor. Whether the work runs synchronously or asynchronously is a decision that comes before the framework.

### How do you set up tests in Laravel?

Pest on new projects and PHPUnit in older codebases; I also wrote about the habit of writing tests in Laravel and the move to Pest.

### How do you build the interface with Laravel?

Two ways: Laravel as an API feeding web and React Native clients from the same API, or the interface produced from the server side. For the second I wrote about Livewire and Inertia on the blog.
