Bienvenue dans le monde du développement de logiciels existants.
Vous avez des centaines de milliers, des millions, des dizaines de millions de lignes de code.
Ces lignes de code ont de la valeur, en ce sens qu’elles génèrent un flux de revenus et qu’il est impossible de les remplacer.
Votre modèle commercial repose sur l'exploitation de cette base de code. Donc, votre équipe est petite, la base de code est grande. L'ajout de fonctionnalités à est nécessaire pour amener les utilisateurs à acheter une nouvelle version de votre code ou pour satisfaire les clients existants.
Dans un monde parfait, votre énorme base de code est testée d'un seul coup. Vous ne vivez pas dans un monde parfait.
Dans un monde moins parfait, vous avez le budget pour réparer votre dette technique: décomposez votre code en éléments testables par unité, effectuez des tests d'intégration approfondis et effectuez une itération.
Ceci, cependant, réduit la dette sans produire de nouvelles fonctionnalités. Ce qui ne correspond pas à l'analyse de rentabilisation de "tirer des bénéfices du code existant, tout en le modifiant afin de générer une incitation à la mise à niveau".
Vous pouvez prendre d'énormes morceaux de code et le réécrire en utilisant des techniques plus modernes. Mais partout où vous interagissez avec le code existant, vous exposez des points de rupture possibles. Ce hack dans le système dont vous vous êtes débarrassé vous a en fait indemnisé pour un caprice dans un sous-système que vous n'avez pas réécrit. Toujours.
Ce que vous pouvez faire, c'est agir avec prudence. Vous pouvez trouver une partie du code que vous comprenez réellement et dont le comportement et l'interaction avec le reste du système sont bien compris. Vous pouvez le moderniser en ajoutant des tests unitaires et en rendant son comportement encore plus clair.
Trouvez ensuite les parties du reste de l'application qui interagissent principalement avec elle et attaquez-les un à un.
En procédant ainsi, vous pouvez améliorer le sous-système en ajoutant des fonctionnalités que les clients sont prêts à payer.
En bref, il s’agit de l’art du possible - apporter des modifications sans casser des choses qui fournissent une analyse de rentabilisation.
Mais ce n'est pas ta question. Votre question est la suivante: "Je fais quelque chose qui est énorme et susceptible de casser des choses, et comment puis-je suivre les meilleures pratiques?"
Lorsque vous faites quelque chose d'énorme, il est vrai que si vous voulez le faire de manière fiable, vous finissez par consacrer plus d'effort à la recherche des bogues et à leur réparation que de l'écrire. Telle est la règle générale du développement logiciel: écrire des choses est facile, il est difficile de les faire fonctionner parfaitement.
Vous avez probablement une analyse de rentabilisation au-dessus de votre tête, dans laquelle vous avez promis à un intervenant que ce changement massif intervient. Et c'est "fait", vous êtes donc repoussé en disant "non, ce n'est pas fait, c'est juste J'aime ça".
Si vous avez le pouvoir et le budget, consacrez réellement vos efforts à générer la confiance que le changement fonctionne, ou refusez simplement le changement. Cela va être une question de degré, pas gentil.
Si vous n'avez pas beaucoup de puissance, mais en avez quand même, essayez d'insister pour que le nouveau système soit testable par unité . Si vous réécrivez un sous-système, insistez sur le fait que le nouveau sous-système est composé de petites pièces dont le comportement et les tests unitaires sont bien spécifiés.
Ensuite, il y a le pire des cas. Vous allez plus loin dans la dette. Vous empruntez contre l'avenir du programme en disposant de plus de code fragile et de plus de bugs afin de pouvoir publier la fonctionnalité maintenant , et bien des conséquences. Vous effectuez un contrôle qualité basé sur le balayage pour identifier les problèmes les plus graves et ignorer les autres. C’est en fait parfois la bonne réponse du point de vue de l’entreprise, comme c’est le moins cher actuellement. S'endetter pour générer des profits est une stratégie commerciale valable, en particulier si le règlement de la dette par la faillite (abandon du code) est à l'ordre du jour.
Un gros problème tient au fait que les incitations des propriétaires d’entreprise sont rarement alignées sur les décideurs et les programmeurs. Il y a généralement beaucoup de pression pour «livrer», et générer une dette technique presque invisible (pour vos supérieurs) est une excellente stratégie à court et parfois à moyen terme. Même si vos supérieurs / parties prenantes seraient mieux servis en ne créant pas toute cette dette.