J'ai rejoint une entreprise pour aider à ajouter des fonctionnalités à leur code. Le code est hérité et a été terriblement entretenu. La technologie a environ 15 ans.
Il faut des jours pour dépister les bogues et les problèmes qui devraient prendre quelques minutes, en raison d'une journalisation cassée / manquante et de tant de code non testé et spaghetti.
Pour cette raison, il me semble logique d'en réécrire une partie, à savoir les parties qui n'ont pas de journalisation ou de gestion des erreurs, qui sont incroyablement difficiles à lire et ne peuvent pas être testées localement sur les machines de développement en raison de leur couplage dur avec des services externes.
Ce n'est pas un système complexe, et je ne réécris pas tout. Je suis extrêmement conscient du désir des nouveaux développeurs de venir effacer le code de travail et de le remplacer, mais le code ici est vraiment mauvais et vraiment ancien (.net 2 / 3.5, pas de DI, pas de tests unitaires, pas de SOLID, en utilisant COM plutôt que des microservices). Je dois également souligner que c'est du code qui subit des changements quotidiens et qui cause des erreurs et des bogues quotidiennement, plutôt que du code hérité que personne n'a besoin de toucher.
J'ai réécrit le moteur principal causant des problèmes en utilisant tous des dernières techniques. La direction a convenu que cela devait être fait à un moment donné, mais comme je suis en panne, je l'ai fait maintenant. Il sert de preuve de concept / de documentation. Je les ai tenus informés de mes progrès et ils en sont satisfaits.
Je suis un architecte logiciel accompli et c'était un jeu d'enfant. Le nouveau code est entièrement testable unitaire avec une injection de dépendances et une journalisation complète, de sorte que tous les bogues et problèmes sont très faciles à détecter. Le déploiement de ce code est simplement un clic droit> publier le travail au lieu de 1 à 2 heures de copie manuelle de DLLS, d'enregistrement de composants COM, de bidouillage avec le GAC, etc. comme l'ancien code impliqué.
Chaque fois que nous corrigeions un bogue avant, nous devions attendre des semaines pour pouvoir le déployer dans notre environnement de test afin de permettre le déploiement de plusieurs éléments à la fois pour gagner du temps.
Je devrais également ajouter que le code est beaucoup plus simple, plus facile à lire, des morceaux de fonctionnalités sont contenus dans leurs propres zones, il ne s'agit donc pas de rendre les choses folles compliquées que seul un savant peut comprendre - bien au contraire, il est maintenant modulaire au lieu de monolithique.
Cette réécriture était également nécessaire dans un proche avenir en raison du passage au cloud qui ne supporte pas une grande partie des éléments anciens.
Concernant le problème - il y a un développeur qui est extrêmement résistant à ce changement. Il était auparavant le développeur principal. Son niveau de compétence est moyen mais il n'a rien fait pour améliorer le code précédent au cours des dernières années, il s'agit d'un cas de théorie de la fenêtre cassée combinée sans aucune compréhension des principes SOLID. Il a également commencé à travailler de moins en moins et ne semble plus contribuer beaucoup même si son seul travail est sur ce projet.
Le problème est que dans les réunions, il s'exprime extérieurement contre mes changements et va faire dérailler eux, sans raison valable. Il pense que lorsque le système actuel fonctionne, il ne devrait pas être changé et que prendre 1 à 2 heures à chaque fois que nous voulons déployer dans notre environnement de test n'est pas trop mal, ou passer 1 à 2 jours à traquer de minuscules bogues comme un client. manquer un champ lors d'un appel de service Web est tout simplement normal quand c'est le genre de chose qui devrait prendre 30 secondes à résoudre en examinant les fichiers journaux.
En portant une partie du code, j'ai également trouvé beaucoup de bogues que j'ai corrigés en cours de route qui auraient dû être évités mais qui ne pouvaient pas l'être car il n'y a aucun moyen d'écrire des tests pour l'ancien code, ni de gestion / journalisation des erreurs appropriée. Tous les signes indiquent que le déménagement est une bonne idée. Je fais référence à des bogues littéraux comme d'éventuelles exceptions de référence nulles ou à oublier de sauvegarder la base de données après l'avoir éditée, pas à une logique métier incorrecte.
Je pense qu'il résiste car cela le poussera hors de sa zone de confort . Il s'est immédiatement exprimé avant même que j'explique mon raisonnement.
Le problème est que la direction nous regarde tous les deux et ne sait pas qui croire.
Tout ingénieur logiciel compétent examinerait le code hérité et convenirait immédiatement qu'il n'est pas maintenable et que des heures de travail sont consacrées au débogage. Ils conviendraient que le nouveau code est propre, maintenable, adhère à SOLID et résout ces problèmes, tandis que l'ancien code est en désordre et n'a souvent que des méthodes géantes qui font toutes sortes de travail.
Ce que je dois faire est d'expliquer que j'ai beaucoup plus d'expérience et que j'ai fait ce genre de travail dans le passé avec des résultats stellaires (j'ai écrit tout le code d'une startup exactement comme je l'ai fait ici, et ils l'utilisent encore 6 ans plus tard, à partir de moi en tant que seul développeur dans une équipe de plus de 40 personnes).
Je suis également en train de m'embourber dans la nécessité d'écrire beaucoup de `` documentation '' expliquant pourquoi cette nouvelle architecture est meilleure, mais elle est entièrement technique ( parler de SOLID, de tests unitaires, d'injection de dépendances, etc.) donc il n'y a pas vraiment de raison car la direction ne comprendra pas. Seul le développeur ennuyeux comprendrait, mais il comprend déjà, il essaie juste de me faire pression pour que cela fasse dérailler en créant du travail supplémentaire pour moi.
Il y a aussi un autre développeur qui est à 100% d'accord avec moi sur tout, ce qui aide un peu. Mais il est moins expérimenté, donc c'est moi qui fais de l'architecture et qu'il le suit pour qu'il comprenne et puisse aussi travailler dessus.
Je cherche des conseils sur ce qu'il faut faire pour ce gars. L'objectif idéal est que la direction voit les énormes avantages que cela apportera, reconnaisse que je suis un ingénieur logiciel très compétent (pas pour des raisons de vanité mais parce que j'ai besoin qu'ils me fassent confiance), et s'efforce d'éviter que ce projet ne déraille.
Je suppose que je devrais également souligner que la majorité du travail est achevée en faisant une preuve de concept (qui est vraiment, un produit presque fini - il n'y avait pas beaucoup de choses à réécrire et je travaille vite). Il y a des temps d'arrêt pour le moment entre les phases du projet et j'ai donc pensé que je l'écrirais juste pendant que je n'avais rien à faire. Ma seule tâche était de documenter comment je pense que nous devrions procéder, et on m'a donné 2 semaines pour le faire, mais en 2 semaines, j'ai pensé que je pourrais simplement construire le nouveau système et donner le prototype comme documentation (avec une explication d'architecture à l'appui ), c'est ce que j'ai fait. Tout le monde est content de cela, y compris la gestion, je n'ai rien fait de clandestin.
J'ai édité mon message pour essayer de clarifier le problème avec ce développeur parce que les gens ont sauté sur le fait que je réécrivais le code hérité et j'ai supposé que j'avais tort de le faire. J'apprécie aussi qu'il est difficile de ne pas paraître vaniteux quand je dis que j'ai tout amélioré, mais dans ce cas, c'était vraiment mauvais . Je ne suis pas un programmeur formidable mais il n'est pas difficile d'améliorer quelque chose d'aussi terrible.