Ich arbeite in einem Team, das Software schreibt, um einen der wichtigsten Geschäftsbereiche des Unternehmens zu unterstützen. Ich bin vor einigen Monaten dem Team beigetreten und habe festgestellt, dass mein Team aufgrund einer Person einen hohen Umsatz erzielt. Diese Person (nennen wir ihn Mr. A) ist seit 7 Jahren im Unternehmen. Es ist sehr schwierig, mit ihr zu arbeiten, und sie trifft wiederholt absichtlich schlechte Entscheidungen, um das Softwareprodukt instabil zu halten, schwer zu warten und Fehler zu beheben. Auf diese Weise kann nur er ein Problem beheben, wenn es ein Problem gibt.
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 zurückstellen (und ihm erlauben, 100 zu arbeiten) % von zu Hause), weil die Software Probleme hatte und niemand wusste, wie man sie behebt.
Mein Manager 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.
Zu Ihrer Information, die Software überwacht Ereignisse, verarbeitet sie und ergreift dann geeignete Maßnahmen. Herr A hat:
- Absichtlich von modernen Softwareentwicklungs-Frameworks ferngehalten;
- Geschriebene Kerngeschäftslogik in Sprachen, die nicht getestet werden können;
- Neu strukturierte Softwarekomponenten in 30 Module, um Komplexitäts- und Versionszertifizierungsprobleme hinzuzufügen.
- Nicht skalierbar gestaltet, um sicherzustellen, dass keine HA-Funktionen (Hochverfügbarkeit) vorhanden sind.
- Update:
In Bezug auf nicht testbaren Code wird die Geschäftslogik von Java auf in XML eingebettete Groovy-Skripte verschoben. Die Komponententests des Java-Codes wurden verworfen.
In Bezug auf Modularität / Komplexität hat jedes Modul ein eigenes Git-Repo und eine eigene Versionierung erhalten. Jetzt weiß nur Herr A, welche Versionen miteinander kompatibel sind. Sie können die 2.0-Version des Produkts nicht freigeben und nicht alle 2.0-Module bereitstellen. Sie müssen Modul A 2.0 freigeben, das mit Modul B 1.0-2.0 und Modul C 1.0-1.5 funktioniert. Für mich ist das 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 zuerst entlassen wurde, aber dann, wenn Probleme auftauchten, musste er zurückgerufen werden, um das Problem zu beheben. Daher kann das Produkt ohne ihn nicht gewartet werden.
Ich sehe dies als mein Problem an, da ich den Manager nicht verlassen möchte, da er sehr nett zu mir war. Und mein erster Instinkt ist es, ein Problem zu lösen, nicht aufzugeben, obwohl ich sehen kann, wie einfach es wäre, dies aufzugeben, und ein Teil von mir ist versucht, dies zu tun.
Andere haben das Team wegen verlassen ihn, 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 heraus (stundenlang).
2. Update:
HA ist die Abkürzung für Hochverfügbarkeit. In der Softwarearchitektur bedeutet dies, dass Sie Ihre Software so entwickeln, dass sie redundant in der Produktionsumgebung gehostet / bereitgestellt werden kann. Wenn also eine Instanz ausfällt, können die anderen Instanzen die Last übernehmen, was zu Ausfallzeiten von null führt. Der Endbenutzer würde nicht einmal wissen, dass etwas schief gelaufen ist.
In Bezug auf: Dies scheint eine normale große Codebasis zu sein. Ich glaube nicht, dass dies an der großen Codebasis liegt, da das Produkt nicht so reich an Funktionen ist. Es ist ein Backend-System, das Daten verarbeitet. Andere Unternehmen haben ähnliche Produkte, um ihre Geschäftsanforderungen zu erfüllen. Sie können dies mit modernen HA / Scalable-Optionen tun. Daher verstehe ich nicht, warum dieses Team dies in Java 6 ohne HA / Scalability tun muss.
3. Update:
Zu 'Arbeiten die neuesten Versionen aller Module zusammen?': Nicht unbedingt. Er hat bestimmte Module in prod zurückgesetzt, wenn ein Fehler festgestellt wurde, aber das Zurücksetzen hat mehr Fehler verursacht, da bestimmte Modulversionen nicht kompatibel sind. All dies könnte vermieden werden, wenn alle Module gemeinsam versioniert und freigegeben würden, da dann das gesamte Produkt getestet würde und insgesamt bestimmte Funktionen garantiert würden. In anderen Unternehmen / Projekten, in denen ich gearbeitet habe, konnten sie auf einfache Weise weitaus komplexere Projekte entwickeln und implementieren.
@pipe: Ich bin nicht frisch von der Schule. Ich habe in den letzten 10 Jahren in verschiedenen Unternehmen und bei großen Projekten gearbeitet und alles, was ich als Vorschlag von Herrn A sehe, verstößt gegen Konventionen und den gesunden Menschenverstand. Mit den 30 Modulen (in separaten Repos) hatte er ursprünglich den Quellbaum eingerichtet. Ein intelligenter Entwickler, der 1 Jahr im Team war, erkannte die Kompatibilitätsprobleme und drängte darauf, alles zu einem Repo zu kombinieren, um ein Maven-Projekt mit mehreren Modulen zu erstellen. Dieser Entwickler hatte die Natur von Herrn A satt und fand einen Job bei einem der Top 5 IT-Unternehmen. Ich werde das Unternehmen nicht benennen, um dies anonym zu halten, aber mit Top 5 IT-Unternehmen meine ich Microsoft, Google, Apple, Facebook und Amazon. Dieser Entwickler war also weder dumm noch inkompetent. Er hatte 8 Jahre oder Erfahrung. Mr. A kehrte diese Änderung zurück zu dem, was es war, 30 Module in separaten Repos. Daher wurden diese 30 Module nicht hinzugefügt, um die Komplexität einer großen Codebasis zu bewältigen. Sie wurden eingerichtet, um sicherzustellen, dass das Produkt Kompatibilitätsprobleme aufweist. 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 arbeiten); Mir wurde gesagt, dass man oft Leute findet, mit denen man nur schwer arbeiten kann. Ich sehe diese Situation als Herausforderung, der ich mich immer wieder stellen werde, egal wo ich arbeite, egal wie großartig das Unternehmen ist. Ich muss also wissen, wie ich richtig damit umgehen soll, um in meinem Bereich weiter zu wachsen.
Ziel (um diese Frage auf dem neuesten Stand zu halten):
Ich stelle diese Frage, um zu wissen, wie Situationen wie die oben beschriebene am besten zu bewältigen sind, um die beschriebenen Ziele zu erreichen unten. Ich glaube, dass schwierige Mitarbeiter unmöglich zu vermeiden sind. Aufgrund der Erfahrungen anderer können wir vielleicht alle etwas lernen.
-
Verbessern Sie die Stabilität des Produkts, indem Sie den Spaghetti-Code und die unnötige Komplexität gemäß den Anforderungen des Managements minimieren.
-
Machen Sie es HA gemäß den Anforderungen des Managements Anfrage.
-
Verwenden Sie moderne Frameworks und Sprachspezifikationen (Java 6 vs Java 8), damit neue Entwickler auf dem Markt leicht zu finden sind und schneller produktiv sein können.
-
Beseitigen Sie die Abhängigkeit von einer einzelnen Person.