Hoe kan ik een werknemer tegenhouden om het bedrijf te gijzelen?
Ik werk in een team dat software schrijft om een van de belangrijkste business units van het bedrijf te faciliteren. Ik ben een paar maanden geleden bij het team gekomen en kwam erachter dat er een hoge omzet in mijn team is door één persoon. Deze persoon (laten we hem Mr. A noemen) is al 7 jaar bij het bedrijf, hij is erg moeilijk om mee te werken en hij neemt herhaaldelijk slechte beslissingen met opzet om het softwareproduct onstabiel te houden, moeilijk te onderhouden en problemen op te lossen. Op deze manier, als er een probleem is, kan alleen hij het oplossen.
Hij had het bedrijf een paar jaar geleden verlaten omdat het bedrijf hem niet toestond om vanuit huis te werken, maar zodra hij vertrok, moest het bedrijf hem terug inhuren (en hem 100% vanuit huis laten werken) omdat de software problemen had en niemand wist hoe het te verhelpen.
Mijn manager weet dit, maar hij zegt dat er niets is wat hij kan doen aan de heer A.
Wat kan ik doen om deze situatie te verhelpen? Ik wil de software modern, onderhoudbaar en stabiel maken.
FYI, de software bewaakt de gebeurtenissen, doet er wat aan en neemt dan passende acties. Dhr. A heeft:
- Doelbewust weggehouden van moderne software ontwikkelingsframeworks;
- Geschreven core business logica in talen die niet getest kunnen worden;
- Opnieuw gearchiveerde software componenten in 30 modules om complexiteit en versie certificatie problemen toe te voegen, en;
- Ontworpen op een niet-schaalbare manier, zodat er geen HA (high availability) mogelijkheden zijn.
Update:
Met betrekking tot Untestable code wordt de bedrijfslogica verplaatst van Java naar groovy scripts die in XML zijn ingebed. De unit tests van de Java-code zijn verwijderd.
Met betrekking tot modulariteit/complexiteit heeft elke module een eigen git repo gekregen en heeft een eigen versioning. Nu weet alleen Mr. A welke versies samen compatibel zijn. Je kunt geen 2.0 versie van het product uitbrengen en alle 2.0 modules inzetten. U moet Module A 2.0 uitbrengen, die zal werken met Module B 1.0-2.0 en Module C 1.0-1.5. Voor mij is dat een slecht ontwerp, het moet allemaal onder één repo worden uitgebracht, zoals Spring framework (Spring 5.0 betekent Spring-Core-5.0, Spring-Context-5.0, Spring-Web-5.0, Spring-Security-5.0, etc).
Manager zegt dat hij hier niets aan kan doen omdat meneer A eerst werd losgelaten, maar toen er problemen opdoemden moest hij worden teruggeroepen om het te repareren. Het product kan dus niet onderhouden worden zonder hem.
Ik zie dit als mijn probleem omdat ik de manager niet in de steek wil laten omdat hij erg aardig tegen me is geweest. En mijn eerste instinct is om een probleem op te lossen, niet om het op te geven, hoewel ik kan zien hoe gemakkelijk het zou zijn om dit op te geven, en een deel van mij is geneigd om dat te doen.
Anderen hebben het team verlaten vanwege hem, want tijdens de lunch is hij waar iedereen over klaagt. Elke keer als er een ontmoeting is met Mr. A, komen er mensen uit die hun hoofd schudden (voor uren).
2nd Update:
HA is de afkorting voor High-Availability. In Software Architecture betekent dit dat u uw software zo ontwikkelt dat deze op een redundante manier kan worden gehost/gedistribueerd in een productieomgeving, zodat als één exemplaar ervan uitvalt, de andere exemplaar(s) de belasting kan (kunnen) opvangen met als gevolg dat er geen downtime meer is. De eindgebruiker zou niet eens weten dat er iets mis is gegaan.
Regarding: Dit lijkt een normale grote codebasis. Ik denk niet dat dit komt door de grote code base omdat het product niet zo rijk is aan functionaliteit. Het is een backend systeem dat gegevens kraakt. Andere bedrijven hebben vergelijkbare producten om aan hun zakelijke behoeften te voldoen, ze zijn in staat om dit te doen met behulp van moderne HA/Scalable opties, dus ik begrijp niet waarom dit team het in Java 6 moet doen zonder HA/Scalability.
3e Update:
Met betrekking tot ‘Werken de laatste versies van alle modules samen? Niet noodzakelijkerwijs. Hij heeft bepaalde modules teruggerold in prod als er een bug is geïdentificeerd, maar het terugrollen heeft meer bugs geïntroduceerd omdat bepaalde moduleversies niet compatibel zijn. Dit alles zou vermeden kunnen worden als alle modules samen zouden worden uitgebracht, omdat dan het hele product zou worden getest en als geheel een bepaalde functionaliteit zou garanderen. In andere bedrijven/projecten waar ik heb gewerkt, hebben ze zo veel complexere projecten met gemak kunnen ontwikkelen en implementeren.
@pipe: Ik ben niet pas afgestudeerd. Ik heb de afgelopen 10 jaar bij verschillende bedrijven en aan grote projecten gewerkt en alles wat ik zie gaat tegen de conventie en het gezond verstand in. De 30 modules (in aparte repo’s) was hoe hij oorspronkelijk de bronboom had opgezet. Een slimme ontwikkelaar die 1 jaar in het team zat, zag de compatibiliteitsproblemen en drong aan op het combineren van alles tot één repo, waardoor een multi-module maven project ontstond. Die ontwikkelaar werd moe van Mr. A’s aard, dus hij vond een baan bij een van de top 5 IT-bedrijven. Ik zal het bedrijf niet noemen om dit anoniem te houden, maar met top 5 IT-bedrijven bedoel ik Microsoft, Google, Apple, Facebook en Amazon. Dus dit ontwikkelaar was niet dom en ook niet incompetent. Hij had 8 jaar of ervaring. Meneer A keerde terug naar hoe het was, 30 modules in aparte repo’s. Dus deze 30 modules werden niet toegevoegd om de complexiteit van een grote codebasis te verwerken. Ze werden geplaatst om er zeker van te zijn dat er compatibiliteitsproblemen zijn in prod. Onnodige complexiteit.
Meer over “Waarom is dit jouw probleem?”: Als ik met ontwikkelaars praat die bij Microsoft, Google, Amazon, Facebook, Apple werken (of vrienden hebben die dat doen), krijg ik te horen dat je vaak mensen vindt die moeilijk te werken zijn. Ik zie deze situatie als een uitdaging die ik herhaaldelijk zal tegenkomen waar ik ook werk, hoe geweldig het bedrijf ook is. Dus ik moet weten hoe ik hier goed mee om moet gaan om te kunnen blijven groeien in mijn vakgebied.
Doel (om deze vraag on-topic te houden):
Ik stel deze vraag om te weten wat de beste manier is om met situaties zoals hierboven beschreven om te voldoen aan de doelen die hieronder worden beschreven. Ik geloof dat moeilijke collega’s onmogelijk te vermijden zijn, dus op basis van de ervaring van anderen kunnen we misschien allemaal iets leren.
De stabiliteit van het product verbeteren door het minimaliseren van spaghetti-code en onnodige complexiteit, zoals gevraagd door het management.
HA maken zoals gevraagd door het management.
Moderne frameworks en language spec (Java 6 vs Java 8) gebruiken zodat nieuwe ontwikkelaars gemakkelijk te vinden zijn in de markt en ze sneller productief kunnen zijn.
De afhankelijkheid van een enkel persoon elimineren.