Skip to content

Web DevelopmentOct 14, 2026 · 9 min read

Vet Laravel Developers: Tests and Red Flags

Abidhusain ChidiFounder and CEO

Vet Laravel developers: a hand-drawn checklist of queues, tests, policies and upgrades beside a code card under a magnifying glass

Key takeaways

  • Test on your own kind of work: a slow page, a failing job, a missing policy, not framework trivia.
  • Six areas show real experience: Eloquent queries, queues, testing, migrations, security and upgrades.
  • A two to three hour take-home or a 45-minute review pairing tells you more than any quiz; score the written explanation too.
  • Ask for stories with dead ends in them. Recited answers skip straight to the tidy conclusion.
  • Settle overlap hours, a paid trial, code ownership and notice terms in writing before the first commit.

To vet Laravel developers, test how they handle queries, queues, security and upgrades on code you give them, not how well they recite framework trivia. Most candidates can explain what a service provider is, but far fewer can tell you why a page runs dozens of queries, or what happens to a job that fails halfway through a database transaction.

We run Laravel projects for clients in the US, the UK and the Gulf, and we sit on both sides of this conversation: clients interview our engineers, and we interview engineers before they join the team. This is how we vet Laravel developers on our side, written so you can run it yourself, whichever route you take. If you would rather start from engineers who have already been through it, you can hire dedicated Laravel engineers and interview them directly. For the wider choice of model, our post on remote, in-house and hybrid teams comes first. This post is about the vetting itself.

What a dedicated Laravel developer is actually hired to do

A dedicated developer works inside your repository, your board and your release process for months, not for a single deliverable. That changes what you are testing. A freelancer on a fixed brief needs to finish a feature, whereas a dedicated Laravel developer needs to keep a codebase healthy while features land on top of it, which is mostly about judgment: when to add a queue, when a model has taken on too many responsibilities, when an upgrade can no longer wait.

If you are still weighing the framework itself, our post on why Laravel is the go-to framework for modern web applications covers that; this one assumes you have chosen it.

Before any interview, write down the three things the role will do in its first six months. A SaaS back end with billing and roles needs different depth from a legacy PHP rescue or an API for a mobile app. Try to vet developers without that list and you end up with a generic Laravel quiz, which favours people who prepare for quizzes.

Skills to test when you vet Laravel developers

Six areas separate people who have shipped and maintained Laravel applications from people who have followed tutorials. For each one, ask for evidence, not definitions.

Six areas to test when you vet Laravel developers: Eloquent, queues, tests, migrations, security and upgrades
Ask for evidence from past work in each area, not definitions
AreaWhat to ask forA weak answer sounds like
Eloquent and queriesHow they find and fix an N+1 problem“Eloquent handles it”
Queues and HorizonWhat happens when a job fails or runs twice“We just retry it”
TestingA feature test they wrote, and what it caught“We test manually”
MigrationsHow they change a large live table“Run migrate on deploy”
SecurityMass assignment and who may do what“The front end hides the button”
UpgradesThe last major upgrade they led“We have never upgraded”

Eloquent and the N+1 problem

Ask the candidate to describe the last slow page they fixed. A developer with real experience will talk about query counts, eager loading with with() and the tool they used to see the queries. Laravel’s own documentation shows the scale of the problem: looping over 25 books and reading each author’s name runs 26 queries, where eager loading needs two.

Then ask what stops it from coming back. The strong answer is a guard in the application, such as Model::preventLazyLoading(), which the Eloquent docs show switched on everywhere except production, so that lazy loading throws in development and in tests instead of surfacing as a slow page six months later.

Queues, Horizon and jobs that fail

As a product grows, it almost always ends up with background jobs: emails, exports, webhooks, billing runs. Ask what happens when one fails. By default Laravel attempts a job once, so a developer who has run queues in production should be able to explain how they set tries and backoff, where failed jobs go and who looks at them.

Push on two cases. First, a job dispatched inside a database transaction can be picked up by a worker before the transaction commits; the framework’s answer is the afterCommit option. Second, a job that runs twice must not charge a customer twice. ShouldBeUnique keeps a duplicate off the queue and WithoutOverlapping stops two copies running at once, but neither makes the charge itself idempotent, and a candidate who has run billing jobs will draw that line without being asked. If Redis queues are in play, ask how they watch them. Horizon is the usual dashboard, and its docs warn that a worker timeout has to stay a few seconds shorter than the queue’s retry_after, or the same job can be processed twice. Someone who has run it in production will know why.

Testing with Pest or PHPUnit

Either tool is fine. What matters is whether tests exist in the candidate’s world and what they are for. Ask them to show a feature test they wrote and the bug it caught. A weak candidate describes coverage percentages; a strong one describes the checkout flow that broke after a refactor and the test that now guards it. If they cannot say how a pull request gets tested before merge, expect to build that habit for them.

Migrations that do not hurt on a live table

Ask how they would add a column, or change one, on a table with millions of rows in a system that cannot go down. Good answers split the change into steps that can each be deployed and rolled back on their own: add the column as nullable, deploy code that writes both, backfill in batches, then tighten. They also write a working down() method, keep data changes out of schema migrations and know which operations lock the table on the database they use.

Security: mass assignment and authorization

Two checks cover most of the damage a careless developer can do. The first is mass assignment. Eloquent only fills attributes listed in $fillable, and by default silently discards the rest. A developer who sets $guarded = [] to make that friction go away, then passes $request->all() into create(), has let any user write any column they can name, including an is_admin flag. The second is authorization. Ask where a rule such as “only the owner can edit this order” lives. The right place is a policy, called with Gate::authorize() or the can middleware, on the server. The wrong place is a hidden button in the interface.

Versions and upgrades

Laravel ships a major release every year, around the first quarter. Its support policy gives each release 18 months of bug fixes and two years of security fixes. In October 2026 that means Laravel 11 is out of support, having received its last security fixes on March 12, 2026. Laravel 12 stopped getting bug fixes on August 13, 2026 and gets security fixes until February 24, 2027. Laravel 13, released on March 17, 2026, requires PHP 8.3.

So ask which version the candidate’s last project ran, which they upgraded from, and what broke. Someone who has done a major upgrade will mention reading the upgrade guide, running the test suite first and stepping through versions one at a time. Someone who has never upgraded is the person most likely to leave your application on an unsupported version.

A short exercise for Laravel developers on real work

A puzzle tells you how someone solves puzzles. A small piece of your own work tells you how they will behave on the job. Two formats work, and which to use depends on how much time candidates have.

The take-home

Give them a small repository with a deliberately flawed feature: an endpoint that lists orders with their customers and items, a policy missing from one route, a job that sends an invoice email. Ask for a pull request, not a finished product, with a description of what they changed and why. Cap it at two or three hours, and pay for it if it runs longer. When the pull request comes back, read the description before the code, because it shows how they will write to a team that is not in the room.

Pairing on a review

A take-home can be too much to ask of a senior candidate who already has a job. For them, a 45-minute pairing session works better: share a real pull request, with secrets removed, and ask the candidate to review it aloud. You are listening for what they notice first. Strong reviewers spot the missing authorization check and the loop that fires a query per row before they comment on naming.

What to score

Score four things, each out of three, and write the scores down before the debrief: did they find the real problems, did they explain the trade-offs, did they leave the code easier to test, and was the written description clear enough for a teammate in another time zone. A developer who scores well on the first and badly on the last will still struggle on a distributed team.

Interview questions for Laravel developers that ask for stories

Skip anything a search engine can answer. The questions below ask for stories, which are much harder to fake:

  1. Tell me about a production incident in a Laravel application you maintained. What was the cause and what changed afterwards?
  2. When did you decide not to use an Eloquent model, a service class or a package, and why?
  3. A report page takes 20 seconds. Walk me through your first ten minutes.
  4. How would you let a user export 500,000 rows without timing out the request?
  5. What do you do when a package you depend on stops being maintained?
  6. Describe a pull request you rejected, and one of yours that was rejected.

Follow up each answer with “what did you try first that did not work?” Real experience has dead ends in it. A recited answer goes straight to the tidy conclusion.

Red flags when you vet Laravel developers

  • They describe every problem as a missing package, and never as a design question.
  • They cannot name the last version they upgraded, or are still on a release that no longer gets security fixes.
  • Authorization lives only in the front end or in route names.
  • There is no test they can point to, or the tests only check that a page returns 200.
  • They treat .env files as something to commit, share or paste into chat.
  • Their portfolio is entirely screenshots, with no repository, pull request or reference you can look at.
  • The written description of their exercise is one line long.

One flag alone rarely decides it, but two or three together, especially around security and testing, usually do.

Engagement terms to settle before a dedicated Laravel developer starts

Vetting does not end at the offer. Agree the following in writing, before the first commit:

TermWhat to settle
Dedicated or projectDedicated suits an open-ended roadmap; a fixed project suits a defined scope. Mixing them leads to arguments about who owns the backlog.
Time-zone overlapThe number of live hours each day, and the response time outside them. We hold three to four live hours for US Eastern clients.
Trial periodA paid trial on a real ticket in your repository, with a defined end date and a decision at the end.
Code and IP ownershipRepositories, cloud accounts and IP in your name from day one, under an NDA.
Exit termsNotice period, handover and what you keep. Ours is 30 days.

Of all the ways to vet Laravel developers, the trial is the strongest, because it measures what the interview cannot: how the person behaves in your codebase, with your reviewers, on a deadline. Our own engagements start with a two-week paid trial sprint, so a client who finds the fit wrong stops there and pays only for that sprint. Start with limited access and widen it once the trial has gone well.

A week-long process to vet Laravel developers

Run in order, the checks before the trial take about a week of calendar time: a short screen on the six skill areas, the take-home or pairing review, one story-based interview, then a reference call you arrange yourself. The paid trial follows. Each stage costs more than the one before it, which is the point: the cheap checks remove the people who would have been expensive to find out about during the trial.

TagslaravelLaravel Best PracticesLaravel DevelopmentRemote Developers

Written by

Abidhusain Chidi

Founder and CEO

Founder of QalbIT Infotech and the engineer who still scopes most of its projects. Writes about what custom software really costs, how build-versus-buy decisions play out two years in, and the delivery habits that keep a product shipping, drawn from CRM, ERP, SaaS and MVP work Abid has been building since 2014 and the products QalbIT runs itself today.

FAQ


Frequently asked questions

Run a 45-minute pairing session on a real pull request with secrets removed, and ask the candidate to review it aloud. Note whether they spot the missing authorization check, the query-per-row loop and the untested path before they comment on style.
Check Eloquent and N+1 queries, queues and failed jobs, automated testing with Pest or PHPUnit, safe migrations on live tables, security (mass assignment and policies) and upgrade experience. Ask for evidence from past projects for each one, not definitions.
Laravel 13, released March 17, 2026, requires PHP 8.3. Laravel 12 stopped getting bug fixes on August 13, 2026 and gets security fixes until February 24, 2027; Laravel 11 lost security support on March 12, 2026. Many live projects run an older release, so ask which version they upgraded from and what broke.
Authorization that lives only in the front end, no tests they can point to, never having upgraded a major version, treating every problem as a missing package, and a portfolio with no repository or reference to check. Two or three together usually decide it.
Dedicated suits an open-ended roadmap where the codebase keeps changing. A fixed project suits a defined scope with a clear end. See how dedicated hiring works with us and the models in our engagement guide.
Long enough to ship a real ticket through review and release, which is why we run a two-week paid trial sprint in the client's repository. Agree the end date and the decision criteria before it starts, and keep access limited until it is done.
You should, from day one: repositories, cloud accounts and IP in your name, under an NDA. Put it in the contract rather than relying on a handshake, along with the notice period and handover terms.

Next step


Want the same clarity for your product?

A short call. A written range. No obligation.