Hire PHP Developers – Laravel, Symfony and Legacy PHP

Senior PHP engineers who can take over a codebase they did not write, in your time zone.

16+ Years of Excellence | 98% Client Retention | 1,000+ Engineers

View Developer Profiles

Hire PHP Developers for the Codebase You Already Have

Most teams hiring PHP engineers are not starting a new project. They have an application that already earns revenue, has been in production for years, and carries a decade of decisions nobody wrote down. The person you need is not just a Laravel developer. It is someone who can open an unfamiliar repository, work out how it actually behaves, and change it without breaking the parts that pay the bills.

That is the work we staff for. Unosquare engineers join teams maintaining procedural PHP, upgrading applications stranded on an end-of-life version, retrofitting tests onto code that never had any, and building new Laravel or Symfony features alongside all of it.

If you want the wider practice rather than a single hire, see our PHP development capability. If PHP is one of several roles you are filling, start from hire nearshore developers.

What a PHP Engineer Actually Does on Your Team

Job titles hide enormous variation in PHP. These are the distinct jobs clients hire us for, and they call for different people:

  • Feature development in Laravel or Symfony. Controllers, queues, jobs, events, Eloquent or Doctrine models, and the REST or internal APIs your frontend and mobile apps consume.
  • Legacy maintenance. Keeping a production application healthy: bug fixes, dependency updates, deprecation cleanup, and the unglamorous work of stopping a system from decaying further.
  • Version and framework migrations. Moving off an unsupported PHP branch or an abandoned framework version, one deployable step at a time rather than in a single risky jump.
  • Test coverage on untested code. Characterization tests first, then real unit and integration coverage around whatever you are about to change.
  • Performance work. Query and index optimization, N+1 elimination, caching strategy, queue offloading, and profiling before guessing.
  • Security hardening. Input handling, injection and deserialization risk, authentication and session handling, secrets, and dependency CVEs.
  • Integrations. Payment providers, CRMs, ERPs, and the third-party APIs that legacy PHP applications tend to accumulate.

Tell us which of these dominates and the shortlist changes accordingly.

Legacy PHP, Version Migrations, and the Stack We Work In

Version drift is the single most common reason a PHP team calls us, and the deadlines are public. PHP branches get roughly two years of active support followed by two years of security-only fixes, after which they receive nothing. According to php.net’s supported versions schedule, PHP 8.1 and everything before it are already end of life, and PHP 8.2 is in security-fixes-only status through 31 December 2026. Frameworks run their own clock on top of that: Laravel’s support policy gives each release 18 months of bug fixes and two years of security fixes, with a major version roughly every year.

Put together, a PHP application that has not been touched in three years is very likely running an unsupported interpreter under an unsupported framework. That is a compliance and insurance problem before it is an engineering one, and it is rarely fixable in a single sprint. The work is incremental: inventory the dependencies, get a test harness in place, upgrade in deployable steps, and replace the abandoned packages that block the next step.

Our engineers work across the stack below, and just as often across the parts of it that predate any of these conventions.

Technology Category What it is used for
PHP 8.x Language Typed, modern backend code, and the destination for most upgrade work
Laravel Framework Application development, queues, scheduling, REST and internal APIs
Symfony Framework Long-lived enterprise applications and reusable components
CodeIgniter Framework Older applications still in production and under active maintenance
Composer Dependency manager Package management, autoloading, and migration off bespoke include chains
PHPUnit / Pest Testing Unit and integration coverage, including retrofits onto untested code
PHPStan / Psalm Static analysis Type and null safety on code written before type declarations existed
MySQL / PostgreSQL Database Schema changes, query tuning, and index strategy
Redis Caching Response and object caching, sessions, and queue backends
Docker Environments Reproducing a legacy environment locally and in CI
WordPress / Magento Platforms Customization, plugin and module maintenance, and platform migrations

For the strategic framing around this work, read legacy software modernization or our guide to the 18 steps to update legacy applications.

Testing and Quality on a PHP Codebase That Has None

Buyers search for “PHP unit testing developers” for a reason. A large proportion of production PHP was written before automated testing was normal in the ecosystem, and the absence of a suite is what makes every change expensive. You cannot refactor safely, you cannot upgrade confidently, and every release depends on someone remembering what might break.

Start with characterization, not coverage targets

On an untested codebase, the first tests are not there to prove the code is correct. They are there to record what it currently does, including the behaviour that is technically a bug but that customers now depend on. These characterization tests turn an opaque system into one with a safety net, and they are written around the specific area you intend to change rather than across the whole application. Chasing a global coverage percentage on a legacy codebase burns budget on code nobody is going to touch.

Then make the untestable parts testable

Legacy PHP resists testing for structural reasons: database calls and HTTP requests buried inside controllers, global state, static calls, and constructors that do work. Progress comes from carving seams into that code so dependencies can be substituted, which is refactoring work that needs the characterization tests to already exist. This ordering is the whole discipline, and it is what separates an engineer who has done legacy PHP from one who has only worked greenfield.

Automate the checks that do not need a human

PHPUnit or Pest suites belong in CI on every pull request, alongside static analysis with PHPStan or Psalm, which catches whole classes of type and null errors in code written before PHP had type declarations. Add coding-standard enforcement and dependency vulnerability scanning and a meaningful share of review comments stop being necessary at all.

Quality as a practice, not a person

Our engineers work to the standards set by the Unosquare Software Engineering Center of Excellence, and you can staff dedicated QA alongside development rather than instead of it. See our quality engineering practice for how testing is built into delivery, or why testing late costs more for the argument in full.

Seniority, Skills, and Who You Actually Need

PHP seniority is not about years. It is about how much context an engineer can hold and how safely they work in code they did not write.

  • Mid-level. Productive inside an established framework and a defined ticket. Writes tests when the harness exists. Best on a codebase that is already healthy, or on well-bounded feature work next to a senior.
  • Senior. Reads unfamiliar code quickly, finds the real cause rather than the nearest symptom, and can introduce tests into code that resists them. Owns migrations, performance investigations and security fixes. This is the level most legacy PHP work genuinely requires.
  • Lead and architect. Sequences a multi-quarter upgrade so each step ships, decides what to strangle and what to leave alone, and sets the standards the rest of the team codes to.

Alongside the framework skills, the attributes that matter on a maintenance engagement are SQL fluency, comfort at the command line and in CI, an instinct for reading logs and profiles, and the patience to work in a system nobody fully understands. Hiring two mid-level engineers instead of one senior is usually a false economy on a legacy PHP codebase, because the bottleneck is comprehension, not typing speed.

Vetting, Matching, and the First Thirty Days

Every Unosquare engineer clears four gates before they ever meet a client: technical assessment, live coding review, English proficiency and culture fit. We do not hire generalists and we do not hire juniors to bill as seniors. You interview the shortlist yourself and make the final call.

Matching is where PHP engagements are won or lost. A Laravel specialist and an engineer who has spent years inside a 2011-vintage procedural codebase are different hires, so we ask what your application actually is before we propose anyone. Teams are typically up and running in two to four weeks.

Onboarding onto an unfamiliar legacy codebase is the question most buyers forget to ask, and it has a repeatable shape:

  • Get it running. A reproducible local environment, usually via Docker, is the first deliverable. If nobody on your team can stand the application up from scratch, that is finding number one.
  • Trace one real path. Follow a single meaningful request from route to response to database and back. One traced path teaches more than a week of documentation.
  • Write tests before changing anything. The first pull request should add a safety net, not a feature.
  • Ship something small and visible. A minor fix in production proves the whole pipeline works end to end.

Retention matters here more than on greenfield work, because the asset you are building is knowledge of your system. Our 98% client retention and 76 employee net promoter score mean that knowledge tends to stay.

Team Shapes, and When a Rewrite Beats Hiring Maintainers

Three shapes cover almost every PHP engagement. Add individual engineers to a team you already manage through staff augmentation, when you have the technical leadership and only need capacity. Stand up a dedicated team with its own QA and delivery management, when a product or module needs to be owned rather than assisted. Or hand over a defined scope through custom software development, when the outcome matters more than the staffing. Clients commonly start with two to five engineers and scale from there.

Here is the honest part. Sometimes hiring PHP maintainers is the wrong answer. Consider a rewrite or a staged replacement when the data model no longer reflects how the business works, when a small change reliably breaks something unrelated, when the framework is abandoned with no upgrade path, or when the cost of maintenance now exceeds the cost of the capability it protects.

Keep maintaining and upgrading when the domain logic is still right, the pain is version drift and missing tests, and the application still fits the business. That is the large majority of cases, and it is far cheaper than the alternative. If you are genuinely unsure, modernize or rebuild walks through how to choose before you spend anything.

PHP Hiring Questions, Answered

Can your PHP developers write tests for a codebase that has none?

Yes. That is one of the most common reasons clients hire PHP engineers from us. On an untested codebase we start with characterization tests that pin current behaviour, add PHPUnit or Pest coverage around the code paths you are about to change, wire the suite into CI, and layer in static analysis so regressions surface before review rather than in production.

Do you work with legacy PHP, or only modern Laravel projects?

Both. A large share of PHP work is maintenance and modernization rather than greenfield Laravel. Our engineers take over procedural PHP, aging Symfony and CodeIgniter applications, and heavily customized WordPress or Magento builds, then stabilize them before changing them. If your application predates Composer or autoloading, say so early so we match engineers who have done that specific work.

How long does it take a PHP developer to become productive in our codebase?

Plan for a first sprint of reading rather than shipping. A senior PHP engineer joining an undocumented codebase starts by getting the application running locally, tracing the request path of one real feature, and writing tests around the area of first change. Unosquare teams are generally up and running in two to four weeks.

What PHP versions and frameworks do your developers work in?

We work across PHP 8.x, Laravel, Symfony, CodeIgniter, Composer, PHPUnit, MySQL and PostgreSQL, plus WordPress and Magento customization. We also support applications still on unsupported branches. Per php.net, PHP 8.1 and earlier are end of life and 8.2 receives security fixes only until December 2026, which is usually the trigger for an upgrade engagement.

Should we upgrade our PHP application or rewrite it?

Upgrade when the domain logic still matches the business and the pain is version drift, missing tests, or performance. Rewrite when the data model no longer reflects how the business works, when every change touches unrelated features, or when the framework is abandoned. If you are rewriting, hire for architecture and product engineering rather than PHP maintenance.

How do you vet PHP developers before we interview them?

Every Unosquare engineer clears technical assessment, live coding review, English proficiency and culture fit before meeting a client. We do not place juniors as seniors. You interview the shortlist yourself and make the final call. Our 98% client retention and 76 employee net promoter score mean the engineer you choose tends to stay on your project.

PHP rarely lives alone. On our decade-long engagement with Harvard Business Publishing, PHP engineers worked inside a 65-person nearshore team alongside Java, React and cloud specialists while the estate moved to AWS microservices. See the full case study.

Ready to Add PHP Capacity?

Tell us what your application runs on, what is breaking, and what you need to ship next. We will come back with engineers who have done that specific work.

Get a Proposal