Plateforme publicitaire américaine · base de code d'environ 20 ans

Moderniser un monolithe de 823 000 lignes — sans interruption, sans big bang

Une plateforme .NET Framework 4.8 en production, avec 54 projets et 23 000 commits d'historique, modernisée de façon incrémentale vers .NET 10 — l'ancien système continue de tourner pendant que le nouveau prend le relais section par section. 19 sections avec tests en environ 8 jours.

  • 823 000 lignes de code legacy
  • 19 sections en ~8 jours
  • SSO sans aucune modification de l'ancien système
  • 175 tests dès le premier jour

Le client

Une plateforme américaine d'annuaires professionnels et de publicité en activité depuis près de deux décennies : consommateurs, commerçants, revendeurs, paiements, litiges de transactions, intégrations de régies publicitaires. Une entreprise vivante, avec un vrai chiffre d'affaires — et une base de code à laquelle plus personne n'osait toucher.

Le défi

Le système : 823 000 lignes de C# réparties sur 54 projets, .NET Framework 4.8, des pages WebForms vieilles de plus d'une décennie, 581 tables dans le modèle de données et plus de 23 000 commits d'historique. Tout transite par une application « hub » centrale dont dépendent huit sites et services distincts.

Le dilemme classique : une réécriture complète est trop risquée et trop chère, tandis que le statu quo coûte chaque année plus cher — les anciennes technologies ne sont plus supportées, les nouveaux développeurs ne veulent pas travailler avec, et chaque modification est dangereuse.

L'approche

Nous avons choisi la modernisation incrémentale (« strangler fig ») : le nouveau système grandit à côté de l'ancien et reprend les fonctionnalités page par page, sans que les utilisateurs ne remarquent quoi que ce soit.

  • L'inventaire avant le code. Les 123 pages d'administration ont toutes été cataloguées et priorisées. Une trentaine d'entre elles se sont révélées mortes ou dupliquées — nous les avons retirées sans en porter une ligne. Périmètre réduit, prix réduit.
  • Une transition invisible. La nouvelle application tourne à la même adresse, derrière le même login. Un utilisateur se connecte à l'ancien système et passe aux nouvelles pages sans second login — sans aucune modification de l'ancien code.
  • Ne porter que ce qui est vivant. Pour chaque page, nous traçons la chaîne d'appels complète de la logique métier et ne portons que ce qui est réellement utilisé. La logique morte meurt tout simplement en n'étant pas portée.
  • Les tests le jour même. Chaque section migrée est livrée avec ses tests automatisés dans la même PR — y compris des tests qui comparent le comportement du nouveau code à celui de l'ancien sur des données identiques.
  • Les décisions par écrit. Environ 1 800 lignes de documentation projet (playbook de migration, analyse des dépendances, stratégie de test) rédigées avant et pendant le code — pour que chaque décision puisse être revérifiée demain, par n'importe qui.

Le résultat

  • 19 sections d'administration — paiements, litiges, forfaits, catégories, rapports — migrées en environ 8 jours ouvrés, avec 175 tests automatisés.
  • Zéro risque pour l'activité en cours : l'ancien système continue de servir tout ce qui n'est pas encore migré ; la transition est invisible pour les utilisateurs.
  • Un socle moderne (.NET 10) où les nouvelles fonctionnalités prennent des heures au lieu de semaines — et pour lequel les développeurs sont faciles à trouver.
  • Un périmètre réduit avant même de commencer : les pages mortes n'ont pas été payées une seconde fois.

La vitesse vient du développement accéléré par l'IA. La sécurité vient de la méthode : inventaire, tests de parité et transition sans big bang. Aucun des deux ne fonctionne sans l'autre.

Technologies

.NET 10 · ASP.NET Core MVC · EF Core · nginx coexistence · xUnit + Playwright