Synapsea
Modernization · Symfony

Migrating a Symfony application with zero downtime: the five-step method

How to move from an unmaintained Symfony or PHP version to a current one, in batches, with feature parity, without any interruption for users.

By the Synapsea team · · 1 min read

Illustration: modules of an application migrated one by one

A Symfony application still running on an unmaintained version is not doomed. It can be migrated, in batches, without its users noticing. Here is the method we apply, from Symfony 1 to Symfony 7.4.

1. Audit before touching anything

Code, database, interfaces with partner systems, dependencies, known vulnerabilities. The audit produces a batch-by-batch plan: which modules, in which order, with which risks.

2. Build the test safety net

Before changing a single line, we write characterization tests that describe the current behavior, defects included. They become the proof that the migration changed nothing.

3. Migrate batch by batch

Every batch ships to production. The old and new versions coexist; partner interfaces stay stable. On a recent national system, 45 tables and a PostgreSQL 16 → 19 path were handled this way, with 550 automated tests.

4. Automate

Continuous integration pipeline, reproducible deployments (Ansible, Docker), static analysis and security checks. This is what keeps the debt from coming back.

5. Hand over

Documentation, team training, follow-up after go-live. The goal is that your developers no longer need us for what comes next.

Takeaway: a successful migration is measured by what users did not see.

A question about this topic in your own context?

A free 30-minute call, written answer within 2 business days.

Let's talk about your project