Cet article explique comment nous gérons l'internationalisation d'un système de gestion logistique (OMS) et les défis de l'intégration avec les nouvelles plateformes de commerce électronique. Le système a été développé en 2018 pour optimiser le processus de préparation des commandes d'une entreprise de commerce électronique en plein essor et s'intégrer efficacement avec différents opérateurs logistiques. Construit à l'aide de PHP (Symfony), MySQL, Socket.io et jQuery, il couvre l'ensemble du processus, de l'emballage à l'expédition, y compris des fonctionnalités telles que le suivi des commandes, les connexions de messagerie, la génération d'étiquettes et les mesures de performances de préparation des commandes.
Ce système a bien fonctionné pendant de nombreuses années, mais à mesure que l'entreprise se développait, ses limites sont devenues de plus en plus apparentes. La dette technique est particulièrement inquiétante, car elle affecte plusieurs niveaux d’un projet. En termes d'infrastructure technique, l'application fonctionne sur des frameworks et des versions linguistiques de base obsolètes :
En plus des versions obsolètes, le projet présente également de sérieuses failles dans les fondamentaux du développement logiciel :
L'accumulation de dette technique constitue non seulement une menace pour la stabilité et la sécurité du système, mais aussi :
L'architecture d'origine présentait des problèmes de couplage qui affectaient sérieusement sa flexibilité et son évolutivité :
Ces limitations structurelles réduisent non seulement la maintenabilité et l'évolutivité du système, mais augmentent également les risques associés à toute modification ou évolution, laissant l'application dans un état techniquement fragile et stratégiquement vulnérable.
L'un des défis les plus importants n'est pas seulement technique, mais aussi stratégique. Bien que le développement externe soit fonctionnellement correct, il existe des limites organisationnelles importantes :
Cette situation est intenable à long terme car elle :
Un aspect souvent négligé mais particulièrement important dans ce projet est le coût de base, qui, à mon avis, est un concept clé dans le développement de logiciels et fait référence au coût de maintien d'un système en fonctionnement même sans ajouter de nouvelles fonctionnalités ou apporter des améliorations minimales requises.
Dans notre cas, les coûts de base incluent tous les coûts associés à la maintenance d'un framework et de versions linguistiques obsolètes, à la résolution des urgences dues à l'accumulation de dette technique, à la gestion des dépendances avec d'autres systèmes, à l'adaptation à des architectures couplées et aux coûts de connaissance du domaine encourus en raison d'une compréhension insuffisante. . Tout cela consomme une quantité importante de ressources disponibles et a un impact direct sur la capacité à investir dans l’innovation et l’amélioration continue.
Bien que ce facteur n'ait pas été décisif dans notre décision d'internaliser le développement, il a été assez influent dans le diagnostic initial du projet. Les coûts de base sont souvent ignorés lors de l’évaluation de la durabilité d’un système, mais dans ce cas, cela démontre clairement que les stratégies actuelles ne sont pas viables à long terme. De plus, comme nous le verrons dans les articles suivants, toute tentative de maintenir la structure existante augmentera de façon exponentielle le coût de base au fil du temps.
Pour une explication plus détaillée des concepts de base des coûts et de leur importance, il est recommandé de se référer à l'article original d'Eduardo Ferro.
Dans tout projet de refactoring, plusieurs stratégies peuvent être employées, et le dilemme est souvent rencontré : fig étrangleur ou réécriture big bang.
La décision technique initiale était de travailler au sein du même projet existant en utilisant le Strangler Pattern, une approche qui implique le développement d'un nouveau module ou système qui remplace progressivement des parties de l'ancien système. Cette stratégie nous permet d'apporter des changements parallèles, de réduire les risques et de maintenir les fonctionnalités actuelles tout en construisant une base plus solide pour prendre en charge les fonctionnalités futures.
Cependant, d'un point de vue commercial, cette option présente un risque excessif pour le système existant (qui est déjà opérationnel et remplit ses fonctions). Nous avons décidé d'éviter de toucher au projet existant et de développer plutôt une application autonome pour répondre aux nouveaux besoins.
Ce changement nous a amené à bifurquer de la base de code existante, une décision qui était techniquement réalisable mais présentait certains inconvénients :
Cette approche nous permet d'évoluer vers des solutions indépendantes, assurant la stabilité des systèmes existants tout en développant un projet aligné sur de nouveaux objectifs stratégiques. Cependant, une analyse détaillée des avantages et des inconvénients est nécessaire pour planifier et relever ce défi en toute confiance. De plus, nous sommes parvenus à un consensus avec le niveau commercial pour ne pas étendre les fonctionnalités et contrôler étroitement le retard du projet jusqu'à ce que la migration vers la nouvelle plateforme de commerce électronique soit terminée.
优点 | 缺点 |
---|---|
在非生产环境中工作,降低生产环境的风险 | 需要暂时维护多个项目 |
自由地从零开始实施新技术和模式 | 在维护方面的努力暂时重复 |
不必担心旧系统的技术限制或依赖关系 | 由于需要在系统之间同步更改,功能的重复可能会长期减缓开发速度 |
能够专注于必要的特性 | 截止日期的风险,因为有两个代码库 |
有机会从一开始就实施最佳实践 | 项目管理的复杂性 |
更容易从一开始就实施测试 | 需要与历史数据保持兼容性 |
灵活地适应新的业务需求 | 初始时间和资源成本更高 |
更好地与公司的整体战略相一致 | 可能暂时丢失非必要的特性 |
La décision d'internaliser et de réécrire un logiciel existant n'est jamais facile, surtout lorsque le logiciel est capable de faire son travail. Le dicton « Si ça marche, n’y touchez pas » sera toujours là. Cependant, il faut parfois un pas en arrière pour faire deux pas en avant.
Dans les articles suivants de cette série, nous explorerons comment nous avons répondu à ces défis, les décisions techniques et stratégiques que nous avons prises et comment nous avons transformé ces défis en opportunités d'amélioration et de développement d'équipe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!