Comment empêcher un employé de prendre l'entreprise en otage ?
Je travaille dans une équipe qui écrit des logiciels pour faciliter l'une des principales unités commerciales de l'entreprise. J'ai rejoint l'équipe il y a quelques mois et j'ai découvert qu'il y a un fort taux de rotation dans mon équipe dû à une seule personne. Cette personne (appelons-la M. A) travaille dans l'entreprise depuis 7 ans, elle est très difficile à gérer et prend régulièrement de mauvaises décisions dans le but de maintenir le logiciel instable, difficile à entretenir et à dépanner. De cette façon, lorsqu'il y a un problème, lui seul peut le résoudre.
Il a quitté l'entreprise il y a quelques années parce que la société ne lui permettait pas de travailler à domicile, mais dès qu'il est parti, la société a dû le réembaucher (et lui permettre de travailler à 100 % à domicile) parce que le logiciel avait des problèmes et que personne ne savait comment le résoudre.
Mon directeur le sait, mais il dit qu'il ne peut rien faire pour M. A.
Que puis-je faire pour remédier à cette situation ? Je veux que le logiciel soit moderne, facile à maintenir et stable.
Pour information, le logiciel surveille les événements, les traite et prend les mesures appropriées. M. A a :
- volontairement tenu à l'écart des cadres de développement de logiciels modernes ;
- écrit la logique de base de l'entreprise dans des langages qui ne peuvent pas être testés ;
- réorganisé les composants logiciels en 30 modules pour ajouter de la complexité et des problèmes de certification de version, et ;
- conçu de manière non évolutive, en s'assurant qu'il n'y a pas de capacités HA (haute disponibilité). Mise à jour :
En ce qui concerne le code non testable, la logique commerciale est en train d'être déplacée de Java vers des scripts groovy intégrés dans XML. Les tests unitaires du code Java ont été abandonnés.
Concernant la modularité/complexité, chaque module a reçu son propre git repo et possède son propre versionnement. Désormais, seul M. A sait quelles versions sont compatibles entre elles. Vous ne pouvez pas sortir la version 2.0 du produit et déployer tous les modules 2.0. Vous devez publier le module A 2.0, qui fonctionnera avec le module B 1.0-2.0 et le module C 1.0-1.5. Pour moi, c'est une mauvaise conception, tout devrait être versionné sous un seul repo comme Spring framework (Spring 5.0 signifie Spring-Core-5.0, Spring-Context-5.0, Spring-Web-5.0, Spring-Security-5.0, etc).
Manager dit qu'il ne peut rien faire à ce sujet parce que M. A a été licencié au début mais ensuite, quand des problèmes sont apparus, il a dû être rappelé pour les résoudre. Le produit ne peut donc pas être maintenu sans lui.
Je considère cela comme mon problème car je ne veux pas abandonner le directeur car il a été très gentil avec moi. Et mon premier instinct est de résoudre un problème, pas de l'abandonner, bien que je puisse voir comment l'abandonner serait vraiment facile, et une partie de moi est tentée de le faire.
D'autres ont quitté l'équipe à cause de lui, parce qu'au déjeuner, c'est lui dont tout le monde se plaint. Chaque fois qu'il y a une réunion avec M. A, les gens en sortent en secouant la tête (pendant des heures).
2e mise à jour :
HA est l'abréviation de High-Availability. En architecture logicielle, cela signifie que vous devez développer votre logiciel de manière à ce qu'il puisse être hébergé/déployé dans un environnement de production de manière redondante, de sorte que si une instance tombe en panne, les autres instances puissent prendre la charge, ce qui n'entraîne aucun temps d'arrêt. L'utilisateur final ne saurait même pas que quelque chose a mal tourné.
Concernant : Cela semble être une base de code importante normale. Je ne pense pas que cela soit dû à une base de code importante car le produit n'est pas très riche en fonctionnalités. Il s'agit d'un système dorsal qui croque les données. D'autres entreprises ont des produits similaires pour répondre à leurs besoins, ils sont capables de le faire en utilisant des options modernes HA/Scalable, donc je ne comprends pas pourquoi cette équipe doit le faire en Java 6 sans HA/Scalability.
3ème mise à jour :
Concernant ‘Les dernières versions de tous les modules fonctionnent-elles ensemble ? Pas nécessairement. Il a fait reculer certains modules dans prod s'il y a un bogue identifié, mais le recul a introduit plus de bogues puisque certaines versions de modules ne sont pas compatibles. Tout cela pourrait être évité si tous les modules étaient versionnés et publiés ensemble, car alors le produit entier serait testé et, dans son ensemble, garantirait certaines fonctionnalités. Dans d'autres entreprises/projets où j'ai travaillé, c'est ainsi qu'ils ont pu développer et déployer des projets beaucoup plus complexes avec facilité.
@pipe : Je ne viens pas de terminer mes études. J'ai travaillé dans diverses entreprises et sur de grands projets pendant plus de dix ans et tout ce que je vois de la part de M. A va à l'encontre des conventions et du bon sens. Les 30 modules (dans des dépôts séparés) sont la façon dont il avait initialement mis en place l'arbre des sources. Un développeur intelligent, qui a fait partie de l'équipe pendant un an, a vu les problèmes de compatibilité et a insisté pour que tout soit regroupé dans un seul dépôt, ce qui a donné naissance à un projet maven multi-modules. Ce développeur s'est lassé de la nature de M. A et il a trouvé un emploi dans l'une des cinq plus grandes sociétés informatiques. Je ne nommerai pas la société pour garder l'anonymat, mais par “cinq grandes sociétés informatiques”, j'entends Microsoft, Google, Apple, Facebook et Amazon. Donc, cette n'était ni stupide ni incompétent. Il avait 8 ans d'expérience. M. A est revenu sur ce changement, 30 modules dans des dépôts séparés. Ces 30 modules n'ont donc pas été ajoutés pour gérer la complexité d'une grande base de code. Ils ont été mis en place pour s'assurer qu'il y ait des problèmes de compatibilité dans les produits. Une complexité inutile.
Plus d'informations sur “Pourquoi est-ce votre problème ?” : Lorsque je parle à des développeurs qui travaillent (ou ont des amis qui travaillent) chez Microsoft, Google, Amazon, Facebook, Apple, on me dit que souvent on trouve des gens avec qui il est difficile de travailler. Je vois cette situation comme un défi que je devrai relever de manière répétée, quel que soit l'endroit où je travaille, même si l'entreprise est géniale. J'ai donc besoin de savoir comment gérer cela correctement afin de continuer à me développer dans mon domaine.
Objectif (pour garder cette question à l'ordre du jour) :
Je pose cette question pour savoir quelle est la meilleure façon de gérer des situations comme celle décrite ci-dessus pour atteindre les objectifs décrits ci-dessous. Je crois qu'il est impossible d'éviter les collègues difficiles, donc en se basant sur l'expérience des autres, nous pouvons peut-être tous apprendre quelque chose.
Améliorer la stabilité du produit en minimisant le code spaghetti et la complexité inutile, selon la demande de la direction.
Le rendre HA selon la demande de la direction.
Utiliser des cadres et des spécifications de langage modernes (Java 6 vs Java 8) afin que les nouveaux développeurs soient faciles à trouver sur le marché et qu'ils puissent être productifs plus rapidement.
Éliminer la dépendance à l'égard d'une seule personne.