Reprendre un projet Symfony existant : étapes, risques et coût
Votre prestataire a disparu, votre développeur interne est parti, ou l'application tourne sur une version de Symfony qui n'est plus maintenue. Le site fonctionne encore, mais chaque correction devient risquée et personne n'ose plus toucher au code. Voici la méthode que j'applique pour reprendre une application Symfony existante sans casser la production, et pour décider en connaissance de cause entre maintenance, migration et refonte.
1. Les situations qui mènent à une reprise
Une reprise de projet Symfony démarre presque toujours dans l'une de ces situations :
- Changement de prestataire : l'agence ou le freelance ne répond plus, a fermé, ou la relation s'est dégradée.
- Départ du développeur interne : la seule personne qui connaissait l'application est partie, sans documentation.
- Version en fin de vie : Symfony 4 ou 5, PHP 7, des dépendances abandonnées. L'hébergeur menace de couper les anciennes versions de PHP.
- Rachat ou reprise d'entreprise : le nouvel acquéreur veut savoir ce que vaut réellement l'outil dont il hérite.
- Dégradation progressive : lenteurs, bugs qui reviennent, mises en production qui cassent autre chose.
Le point commun : on ne sait plus vraiment ce qu'il y a dans le code. La première étape n'est donc pas de corriger, mais de comprendre.
2. Avant le code : récupérer tous les accès
C'est l'étape la plus sous-estimée, et la plus urgente si l'ancien prestataire est encore joignable. Sans ces éléments, une reprise peut devenir impossible ou très coûteuse.
- Le code source complet, avec l'historique de ses modifications (le « dépôt Git »). Une simple copie des fichiers en ligne ne suffit pas : l'historique explique pourquoi le code est écrit ainsi.
- L'hébergement : accès au serveur et au panneau d'administration, et la façon dont les mises en ligne étaient faites.
- La base de données : accès et une sauvegarde récente, vérifiée.
- Les mots de passe et clés de configuration de l'application : accès aux services externes, clés d'API, identifiants techniques.
- Les services tiers : compte Stripe, service d'envoi d'e-mails, stockage de fichiers, Google Cloud, etc. Vérifiez qu'ils sont à votre nom et non à celui du prestataire.
- Le nom de domaine et les DNS : là encore, au nom de votre entreprise.
Conseil : faites la liste par écrit et demandez chaque accès explicitement. Un code source hébergé sur le compte personnel de l'ancien développeur est un risque majeur : faites-le transférer sur un compte de l'entreprise avant toute chose.
3. L'audit : ce qu'il doit vous apprendre
Un audit de code prend en général 1 à 2 jours. Son but n'est pas de juger le travail du prestataire précédent, mais de répondre à une question simple : combien coûte chaque chantier, et lequel est urgent ? Vous n'avez pas besoin de lire le code pour l'exploiter. Un bon rapport d'audit répond clairement à ces six questions :
- Mon application est-elle encore à jour ? Une version de Symfony ou de PHP qui n'est plus maintenue ne reçoit plus de correctifs de sécurité. C'est souvent le premier point bloquant, et parfois l'hébergeur qui force la décision.
- Est-elle exposée à des failles de sécurité ? Accès mal protégés, données clients lisibles par la mauvaise personne, mots de passe stockés dans le code : ce sont les points à corriger en priorité.
- Le code peut-il être repris par quelqu'un d'autre ? Un code clair et organisé selon les standards se reprend en quelques jours. Un code désordonné rend chaque modification lente et risquée.
- Où sont les règles de mon métier ? Vos calculs, vos tarifs, vos processus doivent être identifiables. S'ils sont dispersés partout, faire évoluer l'application coûtera cher.
- Pourquoi est-elle lente ? Les lenteurs ont presque toujours quelques causes précises, souvent peu coûteuses à corriger une fois identifiées.
- Peut-on modifier l'application sans risque ? Sans tests automatiques ni mise en production fiable, chaque correction est un pari, et chaque mise en ligne peut casser autre chose.
Le livrable est un rapport classé par priorité : ce qui est bloquant, ce qui peut attendre, et ce qui relève du confort, avec une estimation pour chaque point. Il doit être compréhensible par un dirigeant et exploitable par n'importe quel développeur, pas seulement par celui qui l'a rédigé.
4. Stabiliser, migrer ou réécrire ?
L'audit débouche sur l'une de ces trois trajectoires. Le choix dépend moins de la qualité du code que de la valeur de l'application pour votre activité et de ce que vous voulez en faire dans les deux prochaines années.
| Trajectoire | Quand la choisir | Risque |
|---|---|---|
| Stabiliser | Version encore maintenue, peu d'évolutions prévues, besoin de corriger les bugs et de sécuriser. | Faible |
| Mettre à jour progressivement | Version en fin de vie, application saine sur le fond, appelée à évoluer. | Maîtrisé, si les étapes sont courtes |
| Reconstruire | Application très ancienne ou inexploitable, besoin très différent de ce qui existe. | Élevé : délais longs, règles métier oubliées |
Le plus souvent, la bonne réponse est une combinaison : on stabilise d'abord (correctifs urgents, mise en production fiable), puis on met à jour par étapes, et on ne réécrit que les parties qui le justifient vraiment.
Cas réel : une place de marché de location de jardins, lancée par une autre équipe, a été reprise avec des dépendances en retard, des clés de paiement écrites en clair dans le code et aucune notification aux utilisateurs. Plutôt qu'une refonte, la plateforme a été sécurisée et mise à jour, puis enrichie de notifications et de relances automatiques.
5. Mettre à jour une ancienne version de Symfony
Une mise à jour de Symfony se fait par étapes, une version majeure après l'autre, avec une mise en ligne à chaque étape. C'est plus long sur le papier qu'un grand saut, mais c'est beaucoup plus sûr : si un problème apparaît, on sait exactement d'où il vient, et votre application reste en service pendant toute l'opération.
Avant de commencer, on sécurise les parcours qui rapportent de l'argent (connexion, commande, paiement, exports) avec des vérifications automatiques : ce sont eux qui ne doivent jamais casser.
Les applications très anciennes (Symfony 2 ou 3) sont un cas à part : leur structure est si différente des versions actuelles que la mise à jour se rapproche d'un remplacement progressif, morceau par morceau. Pour connaître la version à viser, voir le point sur les versions de Symfony, et pour le détail de la démarche, le guide de migration Symfony.
6. Combien coûte une reprise de projet Symfony ?
Tout dépend de la taille de l'application et de son état, mais voici des ordres de grandeur réalistes pour une application métier de taille moyenne :
| Étape | Durée indicative |
|---|---|
| Audit de code et rapport chiffré | 1 à 2 jours (à partir de 1 500 €) |
| Remise en place de l'environnement de travail et de la mise en ligne | 1 à 3 jours |
| Stabilisation : correctifs bloquants, sécurité, premières vérifications automatiques | quelques jours à 2 semaines |
| Mise à jour d'une version majeure de Symfony à la suivante | quelques jours à quelques semaines par palier |
Le facteur qui fait le plus varier le budget n'est pas la quantité de code, mais l'absence de tests et de documentation : chaque modification doit alors être vérifiée à la main. C'est pourquoi l'audit est la seule façon d'obtenir un chiffrage fiable, et pourquoi je le propose comme une prestation à part, sans engagement sur la suite.
7. Les erreurs à éviter
- Laisser partir l'ancien prestataire sans les accès. Récupérer un domaine ou un compte Stripe après coup peut prendre des semaines.
- Décider de tout réécrire avant d'avoir audité. La réécriture rassure, mais elle est presque toujours plus longue et plus chère que prévu.
- Corriger sans filet. Sans tests sur les parcours critiques, chaque correctif peut en casser un autre.
- Reporter la migration de version. Plus on attend, plus il y a d'étapes à franchir, et plus l'hébergeur risque d'imposer une version de PHP incompatible.
- Garder le savoir dans une seule tête. Exigez une documentation à jour, une procédure de mise en ligne écrite et un code source hébergé au nom de l'entreprise, quel que soit le prestataire.
Questions fréquentes
Peut-on reprendre un projet Symfony sans l'ancien prestataire ?
Oui, à condition de récupérer le code source complet (idéalement avec l'historique de ses modifications), les accès à l'hébergement et à la base de données, et les clés de configuration. Symfony impose des conventions qui permettent à un autre développeur de comprendre l'application, même sans documentation.
Combien de temps faut-il pour reprendre en main une application Symfony ?
Comptez 1 à 2 jours d'audit pour savoir où vous en êtes, puis quelques jours pour remettre en place un environnement de travail et une mise en ligne fiables. Une migration de version majeure prend de quelques jours à quelques semaines selon la taille du projet et la couverture de tests.
Faut-il tout réécrire quand le code est de mauvaise qualité ?
Rarement. Une réécriture complète fait perdre des années de règles métier implicites et bloque les évolutions pendant des mois. Dans la plupart des cas, il vaut mieux stabiliser, ajouter des tests sur les parcours critiques, puis remplacer les parties les plus fragiles module par module.
Mon application est en Symfony 2 ou 3, est-ce récupérable ?
Les données et la logique métier le sont presque toujours. Le code lui-même demande souvent une migration lourde, car la structure des projets a changé avec Symfony 4. Un audit permet de chiffrer la migration progressive et de la comparer à une reconstruction ciblée.
Vous avez une application Symfony à reprendre ? Je réalise l'audit, je vous remets un plan d'action chiffré, et je peux ensuite prendre en charge la reprise. Voir ma prestation de reprise de site Symfony.