Wie kann man einen Mitarbeiter daran hindern, das Unternehmen als Geisel zu nehmen?
Ich arbeite in einem Team, das Software schreibt, um einen der wichtigsten Geschäftsbereiche des Unternehmens zu unterstützen. Ich bin dem Team vor einigen Monaten beigetreten und habe herausgefunden, dass in meinem Team ein hoher Umsatz durch eine Person erzielt wird. Diese Person (nennen wir sie Mr. A) ist seit 7 Jahren bei der Firma, es ist sehr schwierig, mit ihm zusammenzuarbeiten, und er trifft immer wieder absichtlich schlechte Entscheidungen, um das Software-Produkt instabil und schwer zu warten und Fehler zu beheben. Auf diese Weise kann, wenn es ein Problem gibt, nur er es beheben.
Er hatte die Firma vor einigen Jahren verlassen, weil die Firma ihm nicht erlaubte, von zu Hause aus zu arbeiten, aber sobald er ging, musste die Firma ihn wieder einstellen (und ihm erlauben, zu 100% von zu Hause aus zu arbeiten), weil die Software Probleme hatte und niemand wusste, wie man sie beheben konnte.
Mein Vorgesetzter weiß das, aber er sagt, dass er nichts gegen Herrn A. tun kann.
Was kann ich tun, um diese Situation zu beheben? Ich möchte die Software modern, wartbar und stabil machen.
FYI, die Software überwacht Ereignisse, führt einige Verarbeitungen durch und ergreift dann entsprechende Maßnahmen. Herr A hat:
- Absichtlich von modernen Softwareentwicklungs-Frameworks ferngehalten;
- Kerngeschäftslogik in Sprachen geschrieben, die nicht getestet werden können;
- Softwarekomponenten in 30 Module umgebaut, um Komplexität und Versionszertifizierungsfragen hinzuzufügen, und;
- sie auf nicht skalierbare Weise entworfen, um sicherzustellen, dass es keine HA-Fähigkeiten (Hochverfügbarkeit) gibt.
Update:
In Bezug auf nicht testbaren Code wird die Geschäftslogik von Java auf groovige, in XML eingebettete Skripte umgestellt. Die Unit-Tests des Java-Codes wurden verworfen.
Bezüglich Modularität/Komplexität hat jedes Modul sein eigenes Git-Repo erhalten und verfügt über eine eigene Versionierung. Jetzt weiß nur Herr A, welche Versionen miteinander kompatibel sind. Es ist nicht möglich, die Version 2.0 des Produkts zu veröffentlichen und alle 2.0-Module einzusetzen. Sie müssen Modul A 2.0 freigeben, das mit Modul B 1.0-2.0 und Modul C 1.0-1.5 funktionieren wird. Für mich ist das ein schlechtes Design, es sollte alles unter einem Repo wie Spring-Framework versioniert werden (Spring 5.0 bedeutet Spring-Core-5.0, Spring-Context-5.0, Spring-Web-5.0, Spring-Security-5.0 usw.)
Der Manager sagt, er könne nichts dagegen tun, weil Herr A zunächst losgelassen wurde, aber dann, als Probleme auftauchten, musste er zurückgerufen werden, um es zu beheben. Also kann das Produkt ohne ihn nicht gewartet werden.
Ich sehe dies als mein Problem, da ich den Manager nicht im Stich lassen will, da er sehr nett zu mir war. Und mein erster Instinkt ist es, ein Problem zu lösen und nicht aufzugeben, obwohl ich sehen kann, wie einfach es wäre, dies aufzugeben, und ein Teil von mir ist versucht, das zu tun.
Andere haben das Team wegen ihm verlassen, denn beim Mittagessen ist er das, worüber sich alle beschweren. Jedes Mal, wenn es ein Treffen mit Herrn A gibt, kommen die Leute kopfschüttelnd (stundenlang) heraus.
- Update:
HA ist die Abkürzung für High-Availability. In der Software-Architektur bedeutet dies, Ihre Software so zu entwickeln, dass sie in einer Produktionsumgebung redundant gehostet/verteilt werden kann, so dass, wenn eine Instanz ausfällt, die andere(n) Instanz(en) die Last übernehmen können, was zu keiner Ausfallzeit führt. Der Endbenutzer würde nicht einmal merken, dass etwas schief gelaufen ist.
Betreffend: Dies scheint eine normale große Code-Basis zu sein. Ich glaube nicht, dass dies an der großen Code-Basis liegt, da das Produkt nicht so reich an Funktionalität ist. Es ist ein Backend-System, das Daten zerdrückt. Andere Firmen haben ähnliche Produkte, um ihre Geschäftsanforderungen zu erfüllen, sie sind in der Lage, dies mit modernen HA/Scalable-Optionen zu tun, daher verstehe ich nicht, warum dieses Team es in Java 6 ohne HA/Scalability machen muss.
- Update:
Betreffend ‘Funktionieren die neuesten Versionen aller Module zusammen? Nicht unbedingt. Er hat bestimmte Module in prod zurückgerollt, wenn ein Fehler identifiziert wurde, aber das Zurückrollen hat mehr Fehler eingeführt, da bestimmte Modulversionen nicht kompatibel sind. All dies ließe sich vermeiden, wenn alle Module zusammen versioniert und freigegeben würden, denn dann würde das gesamte Produkt getestet und als Ganzes eine bestimmte Funktionalität garantiert. In anderen Unternehmen/Projekten, in denen ich gearbeitet habe, war es ihnen auf diese Weise möglich, weitaus komplexere Projekte mit Leichtigkeit zu entwickeln und zu implementieren.
@pipe: Ich bin nicht frisch von der Schule. Ich habe in den letzten über 10 Jahren in verschiedenen Unternehmen und an großen Projekten gearbeitet, und alles, was ich sehe, Herr A. schlägt vor, widerspricht der Konvention und dem gesunden Menschenverstand. Die 30 Module (in getrennten Repositories) waren so, wie er ursprünglich den Quellbaum eingerichtet hatte. Ein kluger Entwickler, der 1 Jahr lang im Team war, sah die Kompatibilitätsprobleme und drängte darauf, alles zu einem Repo zusammenzufassen und ein Multimodul-Maven-Projekt zu machen. Dieser Entwickler war der Natur von Herrn A. überdrüssig geworden, so dass er eine Stelle bei einer der Top 5 IT-Firmen fand. Ich werde das Unternehmen nicht nennen, um dies anonym zu halten, aber mit den fünf größten IT-Unternehmen meine ich Microsoft, Google, Apple, Facebook und Amazon. Also dieser Der Entwickler war weder dumm noch inkompetent. Er hatte 8 Jahre oder Erfahrung. Herr A hat diese Änderung wieder so gemacht, wie sie war, 30 Module in separaten Repositories. Diese 30 Module wurden also nicht hinzugefügt, um die Komplexität einer großen Code-Basis zu bewältigen. Sie wurden eingeführt, um sicherzustellen, dass es Kompatibilitätsprobleme bei der Produktion gibt. Unnötige Komplexität
Mehr zu “Warum ist das Ihr Problem? Wenn ich mit Entwicklern spreche, die bei Microsoft, Google, Amazon, Facebook, Apple arbeiten (oder Freunde haben, die bei Microsoft, Google, Amazon, Facebook, Apple arbeiten), wird mir gesagt, dass man oft Leute findet, mit denen es schwierig ist, zusammenzuarbeiten. Ich sehe diese Situation als eine Herausforderung, der ich mich immer wieder stellen werde, wo auch immer ich arbeite, egal wie großartig das Unternehmen ist. Ich muss also wissen, wie ich damit richtig umgehen kann, um in meinem Bereich weiter wachsen zu können.
Ziel (damit diese Frage beim Thema bleibt):
Ich stelle diese Frage, um zu wissen, wie ich mit Situationen wie der oben beschriebenen am besten umgehen kann, um die unten beschriebenen Ziele zu erreichen. Ich glaube, dass schwierige Mitarbeiter nicht zu vermeiden sind, so dass wir aufgrund der Erfahrung anderer vielleicht alle etwas lernen können.
Verbesserung der Produktstabilität durch Minimierung von Spaghetti-Code und unnötiger Komplexität, wie vom Management gewünscht.
Machen Sie HA daraus, wie vom Management gewünscht.
Einsatz moderner Frameworks und Sprachspezifikationen (Java 6 vs. Java 8), so dass neue Entwickler auf dem Markt leicht zu finden sind und schneller produktiv sein können.
Eliminierung der Abhängigkeit von einzelnen Personen.