Comment décider quand refactoriser et quand réécrire
Chaque développeur est confronté à ce moment.
La base de code est lente. L'ajout de fonctionnalités prend trop de temps. Les nouvelles recrues ont du mal à comprendre le système. Quelqu'un finit par suggérer une réécriture complète.
L'équipe se divise généralement en deux camps. Un groupe veut repartir de zéro. L'autre groupe craint l'échec des réécritures passées. Les deux parties ont des arguments valables.
Une réécriture n'est pas une solution miracle. Elle prend souvent plus de temps que prévu. On se retrouve à devoir maintenir deux systèmes en même temps. On risque même de répéter les mêmes erreurs dans la nouvelle version.
Une réécriture est pertinente dans ces cas spécifiques :
• Le modèle de données est fondamentalement inadapté aux besoins métier. • La technologie est obsolète et ne reçoit plus de mises à jour de sécurité. • Les besoins métier ont tellement évolué que le système d'origine est devenu obsolète. • Personne dans l'équipe actuelle ne comprend comment le système fonctionne.
Même dans ce cas, ne procédez pas à un remplacement massif (big bang). Utilisez le pattern "strangler fig". Construisez le nouveau système pièce par pièce, parallèlement à l'ancien.
La plupart du temps, vous avez en réalité besoin de refactoriser.
Le refactoring est le bon choix quand :
• Vous pouvez encore ajouter des fonctionnalités, même si c'est lent. • L'équipe comprend le code actuel. • Le désordre est limité à des modules spécifiques. • L'entreprise ne peut pas s'arrêter de livrer de nouvelles fonctionnalités.
Avant de choisir, demandez-vous pourquoi le code est devenu mauvais.
Si le problème est la dette technique, refactorisez les parties les plus critiques. Si le problème est un manque de revues de code ou une mauvaise culture, une réécriture ne servira à rien. Vous ne ferez que construire un nouveau désordre avec les mêmes vieilles habitudes.
Posez-vous ces questions avant de décider :
• Pouvons-nous corriger les parties les plus critiques de manière isolée ? • Le modèle de données est-il inadapté aux besoins métier actuels ? • Quelles connaissances allons-nous perdre si nous repartons de zéro ? • L'entreprise a-t-elle la stabilité nécessaire pour gérer une longue transition ?
Repartir de zéro est séduisant. Terminer la réécriture est la partie difficile. La plupart du temps, un plan de refactoring structuré est plus sûr et plus efficace.
Source: https://dev.to/daviefano/how-we-decide-when-to-refactor-and-when-to-rewrite-40pk