J'ai hérité d'une base de code existante pour un produit qui est manifestement bâclé. La conception fondamentale est terriblement inadéquate, ce que je ne peux malheureusement pas faire sans un refactor complet (couplage HAUT, faible cohésion, duplication rampante de code, pas de documentation de conception technique, tests d'intégration au lieu de tests unitaires). Le produit a une histoire, une forte exposition aux clients critiques de "vache à lait" avec une tolérance minimale au risque, une dette technique qui fera rougir les Grecs, une base de code et une complexité TRÈS importantes et une approche défaitiste fatiguée par les bogues de l'équipe avant. moi.
L'ancienne équipe a quitté le navire pour une autre division afin qu'ils aient la possibilité de ruiner un autre projet. Il est très rare que j'éprouve un échec de projet d'incompétence technique par opposition à un échec de gestion de projet, mais c'est effectivement l'un de ces cas.
Pour le moment, je suis seul mais j'ai beaucoup de temps, une liberté de décision et une orientation future et la capacité de construire une équipe à partir de zéro pour m'aider.
Ma question est de recueillir des avis sur le refactoring à faible impact sur un projet comme celui-ci lorsque vous avez du temps libre pendant la phase de collecte des exigences fonctionnelles. Il existe des milliers d'avertissements du compilateur, presque tous des importations inutilisées, des variables locales non lues, l'absence de vérification de type et des conversions non sécurisées. Le formatage du code est si illisible et bâclé qu'il semble que le codeur souffre de la maladie de Parkinson et ne puisse pas contrôler le nombre de fois où la barre d'espace a été enfoncée sur une ligne donnée. D'autres ressources de base de données et de fichiers sont généralement ouvertes et jamais fermées en toute sécurité. Arguments de méthode inutiles, méthodes en double qui font la même chose, etc.
Pendant que j'attends les exigences pour la prochaine fonctionnalité, j'ai nettoyé des choses à faible impact et à faible risque au fur et à mesure et je me suis demandé si je perdais mon temps ou si je fais la bonne chose. Et si la nouvelle fonctionnalité signifie extraire du code sur lequel j'ai passé du temps plus tôt? Je vais commencer une approche Agile et je comprends que c'est acceptable et normal de constamment refactoriser pendant le développement Agile.
Pouvez-vous penser à des impacts positifs ou négatifs de mon action que vous aimeriez ajouter?