I can still enjoy a well-placed Eloquent scope. I am not above a nice Form Request. But when something is actually expensive - money, time, a customer who cannot connect - the framework is almost never the interesting layer.
The hard part is usually one of these:
- a third-party API that has a different idea of “success” than you do
- a job that ran twice
- a cache that is technically correct and practically lying
- a request that never reached PHP
- a report that worked until the CSV had 400,000 rows
- two services that both did their job and still left the world inconsistent
Laravel is good at making the happy path short. Production is good at making the happy path a minority of the traffic.
What “senior” started meaning
Earlier in my career I thought seniority was knowing more of the framework. The names of the macros. The config keys. Which version deprecated what.
That knowledge still helps. It is not the job.
The job is closer to: what happens if this fails after we have already charged the card / provisioned the profile / emailed the customer? And: how will the next person know what we decided?
Those questions do not live in php artisan make:.
I still use Laravel
This is not a break-up letter. I use Laravel because I can spend the complexity budget on the domain instead of on routing. That is the point of a framework.
I get suspicious when a conversation stays inside the framework for too long. If we are arguing about service providers while the actual risk is a provider timeout, we are soothing ourselves.
What I wish I had believed sooner
- Logs in the wrong process are worse than no logs.
- Idempotency is not an enterprise buzzword. It is how you survive retries.
- “It works in Postman” is a clue, not a verdict.
- Deleting code is sometimes the architecture.
The notebook on this site is mostly those lessons, written down so I do not have to learn them twice.