2018-04-26 08:23:44 +0000 2018-04-26 08:23:44 +0000
185
185

Comment parler à la direction d'un code "génial" ?

EDIT :

Merci à tous pour les conseils, les commentaires et les réactions.

Il s'avère que personne n'était le “méchant” dans cette situation. Les conseils que j'ai reçus ici m'ont aidé à reprendre contact avec l'ancien responsable du projet. Il s'est avéré que ma société, sans raison apparente, avait reçu une première version “en développement” du code de base. L'ancienne société nous a envoyé une version prête pour la production et, cerise sur le gâteau, m'a publiquement félicité d'avoir réussi à rétroconcevoir un produit incomplet à la profondeur que j'avais.

TL;DR

J'ai hérité d'un projet. Pour faire court, le code que j'ai pour tâche de maintenir est mauvais. Tellement mauvais, en fait, que le produit est non seulement incomplet mais non fonctionnel, et ce depuis des années.

**_Comment puis-je communiquer à la direction, d'une manière qui ne soit pas embarrassante pour eux, d'une manière qui ne me fasse pas passer pour paresseux ou stupide, qu'un produit de valeur est dans un état lamentable ? Clarification : cette question contre la dette technique

*_Cette question a trait au fait que je conteste des croyances de longue date sur un produit sans commettre un suicide professionnel. Plutôt que de traiter strictement de la dette technique, il y a ceci : la direction suggère que le code est peut-être si complexe que je ne peux pas le comprendre, et que les erreurs sont dues à la conception. Le développeur original est tellement méta que ce qui ressemble à des erreurs est en fait un coup de génie. Une autre raison pour laquelle il ne s'agit pas vraiment de dette technique est peut-être que la différence entre le code “génial” et la dette technique est que la direction communique que je ne suis pas censé modifier le code “génial”, et que le code “génial” n'est pas une dette technique : c'est la magie noire secrète. *J'aimerais que la direction considère cela comme une dette technique. La plupart du temps, je ne serais pas nerveux de communiquer cela à la direction. Malheureusement, une longue série de maintenance à la pièce par des personnes, dont certaines n'avaient que peu d'expérience en matière de développement, qui n'ont fait que “toucher” le code assez longtemps pour ajouter un patch ici ou là, puis passer à autre chose, a montré à la direction au fil des ans que le projet est à un pas d'être prêt pour la production.

Ce n'est malheureusement pas le cas. Voici une courte liste de problèmes dans le code du génie que j'ai rencontrés dans la base de code de ~1,5 Go…

  • Il y a les mêmes fonctions, les mêmes noms de variables de même portée dans toute la base de code (dans un langage qui ne le supporte pas).
  • Les fonctions sont définies mais jamais appelées.
  • Utilisation et initialisation de variables hors service.
  • Versions incompatibles des bibliothèques utilisées.
  • URI et adresses IP codées en dur sans aucune documentation sur ce qu'elles font.
  • Routes API demandées au hasard qui ne renvoient rien ou du charabia ; qui ne sont alors pas utilisées.
  • Mots de passe codés en dur, non cryptés et clés ssh privées.

Je devrais ajouter que lorsque j'ai commencé à travailler dessus, **_il n'a même pas compilé. Et quand je l'ai fait compiler, il a échoué à l'exécution.

C'est un cauchemar.

Le problème, c'est que la direction a reçu l'assurance de qui elle a hérité, et des précédents développeurs “gung-ho”, que ça “marche”, donc qu'ils ont investi de manière significative… Et maintenant, c'est à moi que revient la responsabilité. Et ils veulent qu'il soit en production dans environ 2 mois.

Lorsque je suggère que les précédents développeurs n'ont peut-être pas été tout à fait honnêtes ou n'ont pas entièrement compris le produit, la direction envoie des signaux contradictoires comme “faites-le”, “pourquoi ce n'est pas encore fait” … et “nous ne sommes pas vraiment sûrs que cela ait jamais fonctionné”, “cela fonctionnait quand vous l'avez reçu”, “nous ne l'avons jamais vu fonctionner”, “il est déjà en production”

[EDIT : a collé la plus grande partie du paragraphe suivant dans la section TL;DR. La direction a également suggéré que c'est peut-être si complexe que je ne peux pas le comprendre, et que les erreurs sont dues à la conception. Le développeur original est si méta, que ce qui semble être des erreurs est en fait un coup de génie.

Réponses (1)

0
0
0
2018-04-27 17:55:09 +0000

Votre plan à haut niveau doit être le suivant :

  1. Construire une voie d'avenir. (*)
  2. Estimez le temps qu'il vous faudra pour mettre en œuvre votre “voie à suivre”.
  3. Rencontrer les parties prenantes de l'entreprise et communiquer ce qui suit :
  4. Que vous ne pouvez pas compiler/exécuter le code actuel (si cela est toujours vrai).
  5. Qu'il vous faudra “X” jours/semaines pour remettre la base de code dans un état compilable/constructible/exécrable.
  6. Qu'il y a un travail additionnel, au-delà de la simple compilation du code, que vous devez faire pour rendre le code supportable et extensible.
  7. Qu'il vous faudra X mois pour mettre en œuvre votre plan d'action. Expliquez ensuite votre démarche (**)

(**) C'est très important car vous devrez persuader les parties prenantes non techniques et commerciales que votre plan est solide, faisable et utile (**) Voici ma recommandation pour la démarche à suivre, qui peut commencer immédiatement après que vous ayez compilé, construit et exécuté le code (**).

  1. Créer des tests unitaires automatisés.
  2. Les tests unitaires démontreront que vous comprenez le code.
  3. Les statistiques de couverture de code vous rappelleront continuellement quelles parties de la base de code vous comprenez et quelles parties vous devez encore sonder.
  4. Ne laissez personne fusionner avec la branche principale sans une demande d'extraction approuvée par au moins deux personnes.
  5. Les demandes d'extraction socialiseront la compréhension évolutive de votre équipe de la base de code.
  6. Encouragez une culture de soutien, surtout pendant cette période difficile, parmi vos développeurs.
  7. Essayez de ne pas perdre votre sang-froid. Les autres développeurs sentiront votre frustration et pourraient devenir eux-mêmes frustrés.
  8. Lorsqu'un développeur a des difficultés avec du code hérité et délicat, encouragez d'autres développeurs à lui donner un coup de main et à s'attaquer ensemble au code difficile, peut-être en programmant par paires.