Nous avons dĂ©veloppĂ© et maintenu l’API de donnĂ©es produits pour Migros pendant 10 ans, en adoptant pleinement le dĂ©veloppement agile. Nous avons mis en ligne la premiĂšre version en seulement six mois, puis continuĂ© Ă  ajouter des fonctionnalitĂ©s et Ă  nous adapter aux exigences changeantes et aux systĂšmes tiers.

AprĂšs 10 ans, Migros a crĂ©Ă© une Ă©quipe interne pour reprendre le dĂ©veloppement en interne. Durant les deux derniĂšres annĂ©es de notre collaboration, nos dĂ©veloppeur·euse·s ont travaillĂ© Ă©troitement avec l’équipe interne en pleine croissance, transfĂ©rant progressivement le savoir-faire et les responsabilitĂ©s. En 2024, Migros avait entiĂšrement repris le projet.

L’application est un systĂšme central permettant un accĂšs en temps rĂ©el Ă  toutes les donnĂ©es produits. Elle collecte des informations provenant d’environ 30 applications mĂ©tiers, allant de systĂšmes SAP et d’API REST Ă  des fichiers CSV. Les donnĂ©es collectĂ©es sont filtrĂ©es, prĂ©parĂ©es et stockĂ©es dans un cluster Elasticsearch. Les applications peuvent soit interroger les donnĂ©es via des appels REST en temps rĂ©el, soit s’abonner Ă  un message bus global pour synchroniser les mises Ă  jour.

Stratégie

DĂšs le dĂ©but, nous avions une vision architecturale claire pour l’API. Nous avons rĂ©ussi Ă  garder le code moderne et maintenable grĂące Ă  des refactorings rĂ©guliers, en adoptant de bonnes pratiques:

  • Tests unitaires et fonctionnels
  • PHPStan: Analyseur statique pour dĂ©tecter les bugs potentiels
  • Code typĂ© (introduit avec PHP 7) pour une meilleure robustesse
  • Rector: Refactorisation automatique pour moderniser le code
  • PHP-CS-Fixer: Formatage automatique du style de code

Un moment clĂ© fut lorsque le PO nous a encouragĂ© Ă  choisir une refactorisation approfondie plutĂŽt qu’une solution rapide, garantissant ainsi la maintenabilitĂ© du projet Ă  long terme.

Outils

Explorons maintenant quelques outils que nous avons utilisé pour maintenir cette application dans cet environnement en évolution rapide.

Testing
Le code hérité est simplement du code sans tests.
—Michael C. Feathers

Nous avons mis en place des tests dÚs le début:

  • PHPUnit pour les tests unitaires et fonctionnels
  • Behat pour les tests end-to-end
  • PHPStan pour l’analyse statique et la dĂ©tection d’erreurs potentielles

En outre, nous avons utilisé l'analyseur statique PHPstan. Cet outil combine le code réel avec les commentaires de la documentation et repÚre des catégories entiÚres d'erreurs potentielles ou d'erreurs d'exécution avant que le code ne soit exécuté. Cet outil pousse les développeurs à écrire un code plus propre et des commentaires de documentation de meilleure qualité. En se plaignant des constructions inutiles, il aide à simplifier le code ou permet au développeur·euse de repérer les erreurs de logique dans le code.

Documentation

Nous avons documenté le projet à plusieurs niveaux:

  • Un wiki collaboratif
  • Une documentation API interactive
  • Des commentaires documentĂ©s dans le code
  • Un ADR (Architecture Decision Record)

Nous avons Ă©galement utilisĂ© un fixeur automatique de style de code pour garantir la cohĂ©rence et rĂ©duire les distractions liĂ©es au formatage. L'outil permettrait de personnaliser les rĂšgles Ă  appliquer ou mĂȘme d'ajouter des rĂšgles personnalisĂ©es. Nous nous sommes mis d'accord sur le jeu de rĂšgles par dĂ©faut de Symfony. Nous nous soucions moins du style exact, mais tenons Ă  ce que le style soit cohĂ©rent.