Image 1 Image 2 Image 3 Image 4

Migration technique: un parcours du combattant

Arnaud LAHAXE - 13 juin 2025

Image 1 Image 2 Image 3 Image 4

Migration technique sur du legacy: un parcours du combattant

Une migration technique

Une migration technique est le processus de transition d'un système, d'une infrastructure ou d'une application d'un environnement technologique à un autre, dans le but d'améliorer les performances, la maintenabilité, la sécurité ou l'évolutivité.

Document restreint C0 |

Etat initial

  • Un code vieux de plus de 20 ans 🦕
  • Beaucoup de magie 🪄
  • Un crainte collective de modifier 👻
  • Peu de tests, tous indirects 🚩
Document restreint C0 |

Contraintes du moment

  • Une entreprise en forte croissance 📈
  • Pas d'arrêt des développements
  • Plusieurs fonctionnalités ultra-sensibles
  • Un contexte économique très instable 🦆
Document restreint C0 |

Qui suis-je ?

Arnaud LAHAXE

Architecte Applicatif chez Boursobank

🎮 🍺 🤖

Boursobank

  • Banque en ligne
  • Portail d'informations

Contexte concernant le WEB

Document restreint C0 |

Notre API

right

  • Unique point d'entrée dans le SI pour les clients
  • Centrale pour nos applications et nos sites
  • Plusieurs millions de lignes de code
  • Un projet créé en 1998
Document restreint C0 |

Comment identifier une migration à prioriser ?

  • Une obsolescence technique
  • Un problème de performance/ scalabilité
  • Un problème de résilience
  • Une accumulation de dette technique
Document restreint C0 |

La dette technique

  • Code abscons
  • Manque de tests
  • Documentation absente ou obsolète
  • Fonctionnalités inutiles accumulées
  • Technologies dépassées
Document restreint C0 |

Le besoin

  • Réécriture des intéractions avec un partenaire
  • Modernisation du code métier

Quelques chiffres

  • +/- 10 millions de transactions par jour
  • +/- 100 transactions différentes
  • +/- 300 classes PHP
Document restreint C0 |

Le code à migrer

À l'état de l'art
Document restreint C0 |

Le code à migrer

À l'état de l'art d'il y a 20 ans
Document restreint C0 |
Document restreint C0 |

Les problèmes identifiés

  • Il n'y a que moi qui modifie ce code
  • On parse/ génère le XML partiellement "à la main"
  • Le code ne sera pas compatible PHP 9
  • Pas de typage
  • Il n'y a pas de tests directs
Document restreint C0 |

La migration

  • Ma recette de cuisine

Identification des impacts

  • Où est utilisé le code à migrer ?
  • Quelle est la criticité des fonctionnalités l'utilisant ?
  • Comment s'assurer de ne pas régresser ?
Document restreint C0 |

Communiquer avec l'équipe

right

  • Pour collecter des informations
  • Pour être mis au courant des nouveaux usages
  • Pour faciliter la remontée de bugs potentiels
Document restreint C0 |

Identifier le code mort et le supprimer

right

  • Utilisation de métriques existantes
  • Création d'une liste de "trucs" à supprimer
  • Discussion avec les pairs et le métier
  • Suppression du code inutile
Document restreint C0 |

Ajouter des tests sur l'existant

right

  • Rendre le code testable
  • Créer un groupe de tests dédié
  • Tester un ou plusieurs cas normaux
  • Tester spécifiquement les cas atypiques
Document restreint C0 |

Nettoyer le code historique à modifier

right

  • Objectif 0 anomalie dans l'IDE
    • Phpstan
    • PHP ECS
Document restreint C0 |

Identifier les besoins techniques

  • Un client HTTP qui permet la parallélisation
  • Un parseur de XML
  • Les métriques nécessaires au suivi de la production
  • Une bonne couverture de tests
Document restreint C0 |

Faire des POCs

very-right

  • Sélectionner les outils pertinents
    • Faire un POC pour chaque
    • Faire les pour et les contre
    • Faire un choix
Document restreint C0 |

Développer le socle technique

  • Faire une implémentation minimale
  • Tests d'architecture
  • Mise en place d'une feature flag pour le Y
  • Faire de la revue de code
Document restreint C0 |

Créer le kanban

  • Découper la migration au maximum en micro-tâches

contain

Document restreint C0 |

Créer le kanban

right

  • Des tickets simples et accessibles
  • Découper de manière à pouvoir paralléliser
  • Toutes les informations dans un readme
Document restreint C0 |

Migrer une fonctionnalité complexe à la main

  • Utiliser le code legacy comme source de vérité
  • Documenter chaque étape pour aider à la reproductibilité
  • Aller jusqu'à la production
Document restreint C0 |

Automatiser au maximum la migration

right

  • Création d'une moulinette qui manipule l'AST du code
    • Avec nette/php-generator
    • Création/ Migration de code
    • Génération de templates de tests
  • Déployer sur les environnements hors prod
Document restreint C0 |

Automatiser au maximum la migration

center

Document restreint C0 |

Automatiser au maximum la migration

center

Document restreint C0 |

Les livraisons

  • S'adapter au contexte
  • Livraison par petits lots
  • Uniquement de la configuration simple à revert
  • Intégrer des feedback loops rapides pour ajuster en temps réel
Document restreint C0 |

Les incidents

  • En cas d'incident
    • On revert la configuration
    • Arrêter les livraisons
    • Corriger et ajouter un test automatisé de non-régression
Document restreint C0 |

Cercle vertueux

1 bug = 1 fix = 1 nouveau test
Document restreint C0 |

Le ménage 🔥

  • Supprimer le vieux code
  • Supprimer le code lié à la migration
  • Supprimer les tests spécifiques à la migration
Document restreint C0 |

La communication

  • Avoir des indicateurs publics
    • Pour la migration
    • Pour la livraison

Le bilan

  • 100 jours/ homme
  • 1 an calendaire
  • 80+ pull requests
  • 40+ livraisons

Le bilan

  • 1 incident important
  • 1 incident mineur
  • Beaucoup d'anomalies en dev

A retenir

  • Découper au maximum
  • Faire des POCs
  • Ajouter des tests
  • Automatiser le plus possible

A retenir

  • Livrer le code sans activer
  • Activer petit à petit
  • Communiquer/ Documenter

📣 Votre avis ?​

Image 1 Image 2 Image 3 Image 4

Migration technique: un parcours du combattant

Arnaud LAHAXE - 13 juin 2025

Qui a déjà travaillé sur une migration technique ? Qui aime faire des migrations technique ?

Un code complexe, ancien, plein de hacks Plus aucuns dev de l'époque Antérieur à la mise en place de CI

+20% de client par an 80 devs qui ajoutent des fonctionnalités en continue Login/ bourse/ ... Un impact sur les fonctionnalités bourse -> donc dépendant de l'actualité

Plusieurs refontes majeurs à mon actif: - Ré-écriture de l'espace client - Création d'un outil de feature flag en 2016 orienté performance (500 en prod/ 32ms/ 10k <> 150k hit/ secondes) - Refonte du virement, conférence AFUP Gamer FPS Passioné de domotique

Login Bourse 3DS

- Bus factor - Rien de typé car codé initialiement en PHP 4 - Globalement illisible - L'analyse statique n'est pas possible

Impacts: - Perte d'accès au site - Impossibilité de consulter les comptes bourses - Impossibilité de passer des ordres en bourse - Corruption de données - Ordres erronées Solutions: - Des tests

- Génération d'audit - Mise en cache - Gestion des sessions - Injection de dépendence de Symfony - Pattern façade pour simplifier la migration

- Une ou plusieurs grosses PR sans changements de logiques - Cette étape permettra de limiter les diffs dans les PRs

- Client HTTP de SF - SF ou JMS ?

Le choix de la techno est engageante pour plusieurs années -> Tenter d'isoler les dépendances dans le code pour pouvoir les changer

- La documentation, les dockblocs,... sont faux - Un gros morceau/ complexe

- +/- 10 jours - Uniformisation du code généré - Force la complétude des tests

Trump/ noel/ congés/ guerres ... Boucles de rétroaction Livraison sans intéruption de service Pas de feature flag car un trop grand nombre, complexe à gérer

- Il n'y a plus d'ordres qui passent - Le passage d'ordre a une erreur à la première étape - On a mal configuré le serializer qui décode le JSON du partenaire sur un attribut

Calmement, Se remémorant chaque instant Leçons: - Le contexte est important - Le rollback est ton amis

- Passage d'ordre HS 14 minutes - Questionnaires d'aptitudes