Entwickler können nicht sehen, was sie falsch machen

Ich bin technischer Projektmanager und bin vor kurzem nach Amerika gezogen, nachdem ich 13 Jahre in Europa als Softwareingenieur gearbeitet hatte. Ich habe für wichtige Kunden gearbeitet und mich in jedem Umfeld entwickelt.

Ich leite jetzt ein Team aus zwei Senior- und einem Junior-Backend, zwei Frontend-Entwicklern und zwei DevOps- Ingenieuren.

Nach einem Monat kam ich mit einer Liste von technischen Schulden heraus, die es zu decken gilt, einschließlich wichtiger (Passwort und Schlüssel offengelegt, Entwicklungsumgebung nicht geschützt, Code-Duplizierung, fehlende Integration und UI-Tests und so weiter...).

Jedes Mal, wenn ich um ein Treffen mit den Entwicklern bitte, sagen sie einfach: "Es funktioniert, warum ändern?". Einmal sagten sie mir: "Du liegst falsch!" auf sehr unhöfliche Weise.

Ich habe kürzlich einen Kommentar zu einer PR hinterlassen, weil sie eines der SOLID- Prinzipien nicht respektiert hat, und ihre Antwort war, dass ich sie pingelig gemacht habe. (Bitte beachten Sie, dass ich in meinem Kommentar nicht unhöflich war.)

Der CTO vertraut mir voll und ganz, er sagte: "Wenn sie nicht tun wollen, was Sie ihnen sagen, können sie den Job einfach kündigen!"

Ich habe mich immer als Anführer (also „Lass uns das machen!“) und nicht als Boss („Mach das!“) betrachtet.. Leute zu feuern ist das Letzte, was ich will, besonders jetzt, wo einer von ihnen ein kleines Kind hat.

Ich möchte, dass sie verstehen, warum ich etwas tun möchte. Die ehemalige Premierministerin ist aus diesem Grund gegangen und sie hat mich gewarnt.

PS: Nein, ich möchte die Firma nicht wechseln. Ich werde sehr gut bezahlt und habe einen ausgezeichneten Gesundheitsplan für mich und meine Familie.

Wenn sie nicht tun wollen, was Sie ihnen sagen, können sie den Job einfach kündigen! Ihr CTO versteht die Situation vollkommen und sagt Ihnen, dass es ihm recht ist, Mitarbeiter zu verlieren, wenn sie sich nicht verbessern. Dass Leute gefeuert werden, ist das Letzte, was ich will, besonders jetzt, wo einer von ihnen ein kleines Kind hat. Ein Mitarbeiter macht also einen schlechten Job, aber das ist in Ordnung, weil er ein kleines Kind hat? Ich weiß, es klingt hart, aber Sie sind nicht für das Kind verantwortlich, sondern ihre Eltern. Wenn der Elternteil sich bei der Arbeit aufführt und dafür gefeuert wird, ist das seine Schuld, nicht die Schuld des Vorgesetzten, der die Entlassung vorgenommen hat.
Ich bin mir nicht ganz sicher, ob dies eine Frage zum Projektmanagement ist (um ehrlich zu sein, ich bin mir nicht sicher, ob es sich um eine Frage handelt ...) Könnten Sie dies überarbeiten, um zu klären, wie dies in das Projektmanagement passt? Wäre dies eher für eine Website geeignet, die sich mit Arbeitsplatzproblemen befasst, oder für eine Diskussionswebsite?
@Bogdan, ich habe ein kleines Kind und leider in den USA, wenn Sie den Job wechseln, ändern Sie höchstwahrscheinlich auch Ihre Krankenversicherung, und es kann bis zu zwei Monate dauern, bis Sie Anspruch darauf haben. Ich möchte nicht, dass das Baby hierzulande zwei Monate ohne Krankenversicherung bleibt.
@MCW Gerne verschiebe ich die Frage woanders, wenn Sie einen besseren Ort bereitstellen können.
@Bananajoe Auf den ersten Blick im HNQ sah es aus wie eine Frage von The Workplace . Dann sah ich, dass es im Projektmanagement war .
@Bananajoe: Ich verstehe Ihre Bedenken (Sie sind ein guter Mensch), aber das lässt Sie immer noch mit dem Problem zurück, das Sie zu beheben versuchen. Sie können versuchen, was die am höchsten bewertete Antwort zum Beispiel erwähnt, aber Ihrer Frage nach scheint es auch ein Einstellungsproblem zu geben. Ich habe mit vielen guten und schlechten Entwicklern zusammengearbeitet und wissen Sie, was die guten gemeinsam hatten? Sie waren offen für ein offenes Ohr, als Sie ihnen sagten, dass es Möglichkeiten gibt, ihre Arbeit zu verbessern. Es ist eine Sache, unerfahren zu sein oder es nicht besser zu wissen und etwas Chaos zu verursachen, aber es ist eine ganz andere Sache, sich zu weigern, das Chaos zu beheben.
@Bananajoe: Weißt du, wie die Dinge so geworden sind, wie sie jetzt sind?
Das klingt nach der gleichen Art von Arbeitgebereinstellung, die Sie in Hunderten von Antworten auf Workplace.SE finden werden. "Ich wurde dafür bezahlt, diesen c**p-Code zu schreiben, und ich werde nicht mehr dafür bezahlt, ihn zu bereinigen und nicht mehr zu erstellen, also warum sollte ich mich ändern?". Willkommen im „Land der Freien“. :)
Wahrscheinlich fehlen (einige) wichtige Details in der Frage (zumindest IMO): Ich habe eine Liste technischer Schulden herausgebracht, um abzudecken, warum Sie das getan haben? War das Teil Ihrer Aktivitäten? Hat das Unternehmen Sie eingestellt, um herauszufinden, was besser sein könnte? Ist das Projekt, das Sie derzeit leiten, das Projekt, das diese Verbesserungen benötigt? Sind diese Verbesserungen Teil der laufenden Arbeit? Wahrscheinlich zu viele Fragen, aber mein Punkt ist, dass die "schlechte Einstellung" vielleicht von der Tatsache herrührt, dass der "Neue, der nicht alles weiß, was wir getan haben, versucht, uns zu sagen, wie wir Dinge tun sollen", oder vielleicht ist es so ...
... (Forts.) dass es dieses neue glänzende Projekt gibt, an dem sie arbeiten sollen, und Sie versuchen, sie dazu zu bringen, ihre bereits veröffentlichte Arbeit zu reparieren.
@Josh Ich stimme zu, genau das passiert. Ein schneller Hintergrund von mir: Ich bin ein Software-Ingenieur, der kürzlich zum Projektmanager gewechselt ist. Ich wurde als Principal Engineer eingestellt, aber der neue CTO änderte meine Aufgaben und meinen Titel. Er bat mich, Tech-Schulden zu finden, und die Verbesserung des Codes ist in seinem Q3-Plan.
@Everybody Ich sage ihnen nicht, dass der Code scheiße ist, ich versuche ihnen das offensichtliche Konzept beizubringen, das sie bereits kennen sollten (SOLID, KISS, DRY und so weiter ...).
Ich hoffe, Sie halten Code-Duplizierung nicht für genauso schwerwiegend wie ein exponiertes Passwort/einen Schlüssel.
"Sie sagen einfach: 'Es funktioniert, warum ändern?'" - und wie haben Sie darauf reagiert? Haben Sie versucht, ihnen zu erklären, warum die Dinge, die Sie vorschlagen, wichtig sind und welche Probleme dadurch gelöst oder vermieden werden? Gute Argumente dafür zu haben, warum etwas getan werden sollte, ist notwendig, wenn Sie Untergebenen nicht nur Befehle geben wollen, die sie blind befolgen sollen. Gibt es diese Probleme tatsächlich im Projekt? Wenn es nur eine bewährte Methode ist, die ein tatsächliches Problem nicht löst, sind Sie sicher, dass es die investierte Zeit wert ist, sie zu ändern?
Haben Sie sie gefragt, was ihrer Meinung nach am System verbessert werden könnte? Was haben sie gesagt?
@Bananajoe Ich weiß, dass sich Ihre Frage nicht auf das US-amerikanische Gesundheitssystem bezieht, und ich sage auch nicht, dass Sie kündigen sollten, aber es ist definitiv möglich, einen neuen Job zu finden (bevor Sie Ihren bestehenden kündigen) und ohne Unterbrechung einen neuen zu beginnen im Krankenversicherungsschutz. Die meisten professionellen Jobs haben keine Wartezeit, bis Sie Anspruch auf Krankenversicherung haben, und die rückwirkende Deckungsoption von COBRA bietet eine Möglichkeit, eine kurze Lücke zu schließen, falls eine auftritt.
Was ist das Operationstempo? bleibt genug Zeit, um diese Bedenken anzusprechen? Und was sind die Auswirkungen, wenn sie nicht zuhören? Wenn Sie sie nicht aufschreiben, bestrafen oder - letztendlich - feuern ... warum sollten sie dann ihre Verhaltensweisen ändern? Es gibt viele Informationen über die Vorteile von IE: SOLID ... aber wenn sie zu beschäftigt und gestresst sind und "arbeiten" - und sie wissen, dass Sie Ihre Zuschreibungen (und darüber hinaus) nicht durchziehen werden ... )... und zum Schluss, seid ihr AGILE oder ähnlich? Welche Art von Feedback-Schleifen haben Sie eingerichtet, um zu helfen?
(Software-Entwickler, kein PM) Meine Antwort auf "Es funktioniert, warum es reparieren?" wäre "Woher weißt du das?". Wenn Sie einen Legacy-Code haben, der nicht getestet wurde, nicht leicht zu verstehen ist, zu viele Abhängigkeiten hat und unklare Verträge hat – woher wissen Sie, dass er wirklich funktioniert und dass er auch in Zukunft funktionieren wird?
Als Entwickler würde ich alles dafür geben, einen Manager zu haben, der meine Arbeit dafür kritisiert, dass sie nicht SOLID ist
Es scheint mir, dass ein wichtiger Teil des „agilen“ Prozesses das Team-Buy-in ist. Ich würde vorschlagen, anstatt zu versuchen, sie zu zwingen oder sogar davon zu überzeugen, die Dinge so zu tun, wie Sie es für richtig halten (oder wissen), sie zusammenzubringen und ihnen unmissverständlich zu sagen, dass wir dieses Problem haben und es und den Status quo lösen müssen Das ist nicht akzeptabel. Lassen Sie sie dann die Lösung finden und sich zu ihrer eigenen Lösung verpflichten, und solange es ein ernsthafter Versuch ist, das Problem zu lösen, akzeptieren Sie es. [Fortsetzung im nächsten Kommentar]
Natürlich sollten Sie Daten sammeln ... tatsächliche Metriken, um sie anzuzeigen. Entweder funktioniert ihre Lösung, in diesem Fall, hurra, Sie haben gerade einen neuen Ansatz entdeckt, oder nicht, und dann ziehen Sie die Daten heraus, um ihnen den Beweis zu zeigen, und erlauben ihnen dann wieder, ihren Ansatz anzupassen. Es geht darum, sie dazu zu bringen, sich zu ihrem eigenen Plan für Softwarequalität zu verpflichten. Wenn einige nicht kooperieren wollen, nun, so sehr es auch scheiße ist, Sie wollen sie nicht in Ihrem Team haben. Die Veränderung der Teamkultur ist schwierig und wird Zeit brauchen. Es werden Fehler gemacht. Solange sie sich ehrlich anpassen, kann es funktionieren.
Vielleicht bringt die Kategorisierung der Probleme in einem Vokabular die Leute zum Ausflippen, wie Security VulnerabilitiesKategorien für offengelegte Passwörter usw. (Ich bin ein Full-Stack-Entwickler ohne Erfahrung im Management.)
VIELLEICHT sind Ihre Zeitpläne NICHT für die zusätzliche Arbeit geeignet? dh. Müssen die Entwickler mehr Zeit (als Arbeitszeit) aufwenden, um die Änderungen vorzunehmen? oder sind die Milestones rücksichtsvoll für die neuen Änderungen?
Hallo zusammen. Die Situation wird jeden Tag schlimmer. Sie grüßen mich nicht mehr. Ich fügte mich als Github-Codeowner für das Projekt hinzu, sie fingen an zu schreien, dass ich ihre Erlaubnis brauchte, um so etwas zu tun (ich bat den CTO um Erlaubnis!), Ich tat das, weil ich entdeckte, dass sie Branches zum Master zusammenführten, ohne mich zuzulassen sehen Sie sich zuerst den Code an. Dies war erforderlich und nicht akzeptabel!
Ich habe eine E-Mail an den CTO geschrieben, ich werde am Montag mit ihm sprechen. Das Problem ist, dass der Produktmanager sie als gute Entwickler ansieht (er programmiert nicht). Ich wünschte, sie könnten das Unternehmen einfach verlassen...

Antworten (7)

Ich möchte, dass sie verstehen, warum ich etwas tun möchte. [...] Irgendein Rat?

Theoretisieren Sie nicht, zeigen Sie es ihnen.

Ihre derzeitige Geisteshaltung ist, dass sie wissen, was sie tun, funktioniert . Und Sie kommen rüber und sagen ihnen, dass das theoretisch schlecht ist. Sie werden niemals jemanden überzeugen, indem Sie sagen, dass er einen schlechten Job macht , während Sie einen viel besseren machen könnten . Das kann jeder sagen. Es ist, als würden Leute auf ihrer Couch vor dem Fernseher sitzen und Profisportler anschreien, dass sie dieses Spiel hätten besser machen können.

Wenn Sie möchten, dass sie Ihnen folgen, gehen Sie mit gutem Beispiel voran. Wenn Sie etwas sehen, das verbessert werden muss, zeigen Sie ihnen, woran es scheitert. Bieten Sie ihnen eine praktische Lösung aus der realen Welt.

Sie möchten einen Kodex, der mehr von den SOLID-Prinzipien einhält? Geben Sie ihnen dann ein praktisches Beispiel, warum der aktuelle Code nicht optimal ist („Wenn ich das mache, geht er kaputt“) und schlagen Sie dann eine echte Alternative vor („Ich habe es so geändert, jetzt kann es nicht mehr passieren“).

Sie haben viele Regressionsfehler, die bei besseren Tests nicht auftreten würden? Nun, stellen Sie eine Liste zusammen und lassen Sie sie jeden einzelnen von ihnen mit jeder Veröffentlichung testen. Das ist, was für das Geschäft notwendig ist. Und dann schreiben Sie einen davon als Unit-Test, zeigen Sie ihnen, wie einfach ihr Leben sein könnte, und lassen Sie sie entscheiden, ob sie ihre Zeit damit verbringen wollen, stundenlang manuell eine Liste von Tests durchzugehen, oder ob sie es automatisiert haben wollen Testsuite, die sie ausführen können, indem sie einfach mit den Fingern schnippen.

Der Punkt hier ist, ihnen nicht zu sagen, was besser sein könnte . Theoretisch könnte alles besser für sie sein, wenn sie nur im Lotto gewinnen würden. Wählen Sie einen bestimmten Fall aus, zeigen Sie ihm, warum er schlecht ist, und bieten Sie dann eine funktionierende Lösung an. Kein Schlagwort oder eine Theorie, sondern ein praktischer erster Schritt, den sie jetzt machen können.

Das Problem bei diesem Ansatz ist, dass er in sehr langen Diskussionen enden kann. Was Zeit und Energie für alle Beteiligten kostet. Wenn sich die Dinge natürlich zum Besseren ändern, kann es sich trotzdem lohnen.
Beachten Sie, dass das Beispiel mit den Regressionstests wahrscheinlich immer noch eine mentale Ablehnung auslösen wird, da OP die Anforderung zum manuellen Testen auf Regressionstests zuerst festlegen muss. Wenn sie also diesen Weg gefunden haben, müssen sie wahrscheinlich zumindest mit Autorität argumentieren, um diese Qualitätsregel festzulegen (oder einen Außenstehenden wie die QA-Abteilung austricksen, um die Schuld auf sich zu nehmen^^). Nicht zu sagen, dass es auf lange Sicht nicht funktioniert oder ähnliches, nur als Vorbehalt, den man vielleicht ansprechen sollte.

Ihren Untergebenen einfach zu sagen, dass sie etwas tun sollen, von dem sie keinen Nutzen sehen, ist ein Rezept für eine Katastrophe, die Sie bereits anerkennen, also machen Sie ihnen Spaß. Gamification ist für Sie vielleicht nicht einfach, kann aber dazu beitragen, andere, rauere Stellen auszugleichen.

In einer Studie von Sharp et al. (2009) gehen die Forscher davon aus, dass der einflussreichste Faktor für die Motivation der Entwickler die Fähigkeit war, sich mit ihrer Arbeit zu identifizieren. Das bedeutet, dass die meisten Entwickler einen Sinn in ihrer Arbeit finden müssen, sonst sinkt ihre Motivation, weiterzuarbeiten.

https://medium.com/gameful-design/does-gamification-work-in-the-software-development-process-76780e49e545

Vielleicht möchten Sie auch etwas Zeit einplanen, um ihnen nicht nur zu zeigen, wie man etwas macht, sondern auch, wie es ihren Code verbessert, ihre Fähigkeit, ihn zu warten, und wie es ihren Entwicklungsprozess beschleunigen kann. Eine andere Antwort von nvoigt spricht darüber, aber ich sage es etwas anders: Show, don't tell.

Sie müssen wahrscheinlich langsam anfangen, z. B. 2-3 Stunden an einem Tag in der Woche. Beginnen Sie mit etwas, das ein komplettes Durcheinander ist oder einfach zu kompliziert und schwer zu verstehen ist. Vielleicht ist es etwas, an dem sie alle nur ungern arbeiten, aber zeigen Sie ihnen noch nicht, wie sie es beheben können. Verwenden Sie es einfach als Beispiel und zeigen Sie ihnen dann mit etwas anderem, etwas Einfacherem, wie kleine Verbesserungen am Code große Auswirkungen haben können. Wenn Sie in ein paar Wochen vielleicht 2-4 dieser kleinen Verbesserungen durchgearbeitet haben, bringen Sie es zurück zum "Monster-Chaos" und verwenden Sie die gleichen Techniken, die Sie ihnen zuvor gezeigt haben, um den Spaghetti-Code zu reduzieren, wiederzuverwenden und im Allgemeinen zu vereinfachen zeigte ihnen.

Vielleicht möchten Sie diesen Ansatz sogar wiederholen. Bringen Sie ihnen ein paar Dinge bei und wenden Sie es dann auf das "Monster-Chaos" an. Bringe ihnen noch ein paar Dinge bei und verwende es dann, um das Monster weiter zu verbessern. Aufschäumen, ausspülen, wiederholen.

Und machen Sie nicht alles selbst. Fragen Sie nach Möglichkeiten, den Code zu verbessern. Es ist nur teilweise ein Vortrag, Sie müssen Ihre Leute in den Prozess einbeziehen. Für richtige Antworten oder sogar enge Konzepte verteilen Sie Mini-Schokoriegel , wie Halloween-Süßigkeiten (das gute Zeug, nicht der billige Schrott). Dies gibt ihnen auch einen zusätzlichen Zuckerschub, damit das Gehirn besser arbeiten kann.

Möglicherweise stellen Sie fest, dass einige von ihnen bereits wissen, was Sie verwenden möchten, aber den Eindruck haben, dass dies nicht der Fall ist. Ich bin größtenteils ein autodidaktischer Programmierer. Ich habe im Laufe der Jahre viel recherchiert und verstehe alle möglichen Konzepte, aber ich kenne nicht unbedingt die Begriffe für diese Konzepte. (Aus diesem Grund habe ich kürzlich ein Interview bombardiert.) Sie verwenden die Konzepte möglicherweise bereits und denken, dass Sie sie nicht dafür erkennen. Oder sie verwenden sie falsch und benötigen nur geringfügige Anpassungen, um sie korrekt auszuführen, anstatt ihren Prozess zu überarbeiten. Es gibt viele verschiedene soziale oder kulturelle Probleme, auf die Sie möglicherweise stoßen, die die Ursache für die Reibung sind, anstatt dass es irgendetwas mit der Technologie zu tun hat.

Hilfe von außen

Es gibt auch viele Websites, die sich auf die spielerische Codierung konzentrieren, auch wenn sie nicht unbedingt SOLID oder die anderen Prinzipien lehren, die Sie zu implementieren versuchen. Sie müssen nur recherchieren, um einen zu finden, der dies tut. Ich habe CodinGame verwendet, um meine Programmierfähigkeiten zu verbessern, aber ich erinnere mich nicht genau, welche Prinzipien, wenn überhaupt, die Herausforderungen gelehrt haben. Es gibt viele Herausforderungen auf der Seite und die meisten werden von Mitgliedern gemacht, also werden sie ständig ergänzt, also könnte es etwas geben, das Sie verwenden können. Stellen Sie einfach sicher, dass Sie zuerst die Genehmigung erhalten, dies während der Firmenzeit zu tun. Und ja, es muss in der Firmenzeit erledigt werden, sonst werden es „Hausaufgaben“, die wahrscheinlich nicht gemacht werden.

Die Implementierung von Peer-Programmierung kann ebenfalls hilfreich sein. Wenn Sie einen Senior und einen Junior für die Arbeit an einer Aufgabe zusammenstellen, können beide neue Dinge lernen. Es kann ihnen auch helfen, eine Hürde beim Lernen zu überwinden. Dies kann dem 1-zu-1-Unterricht entsprechen, ohne dass Sie den Unterricht durchführen müssen. Außerdem ist eine der besten Arten zu lernen, zu lehren. Wenn Sie es jemand anderem erklären können, verstehen Sie es. Und je einfacher Sie es jemand anderem erklären können, desto wahrscheinlicher verstehen Sie es wirklich und wiederholen nicht nur, was ein Buch oder Artikel sagt.

Erzwingen Sie es nicht

Ganz gleich, was Sie tun, während Sie versuchen, Ihr Team dazu zu bringen, diese „neuen“ Prinzipien umzusetzen, machen Sie es als Entwickler überzeugend. Verwenden Sie keinen Performance Improvement Plan (PIP), wie eine andere Antwort vorschlägt. Die Arbeitsplätze von Menschen aufs Spiel zu setzen, ist fast ein garantierter Weg, sie dazu zu bringen, zu gehen, unabhängig davon, ob sie den PIP abschließen. Und wenn sie bleiben, werden sie Ihnen nicht vertrauen, dass Sie versuchen, weitere Änderungen und einen weiteren PIP zu implementieren. Genau wie jeder andere Teil des Lebens funktionieren Ultimaten selten und verbessern fast nie das Vertrauen.

Erklären Sie ihnen, wie es ihre Arbeit und ihr Privatleben verbessern wird. Ein offengelegtes/unverschlüsseltes Passwort kann zu Sicherheitsverletzungen führen, die dazu führen, dass sie rund um die Uhr daran arbeiten, alles zu patchen und wiederherzustellen, was durch den Hack verstümmelt wurde. Überlassen Sie dies nicht dem Zufall oder einem imaginären/unbestimmten fernen Zeitpunkt in der Zukunft, fragen Sie sie, wie sie reagieren würden, wenn dies während einer wichtigen Zeit in ihrem Leben passieren würde, wie einer Hochzeit, einem Urlaub, einem Kindersportspiel oder was auch immer. Machen Sie es zu einem praktischen Beispiel, das für sie relevant ist. Erinnern Sie sie dann daran, dass eine Reparatur jetzt diese Art von Katastrophe verhindert.

Erklären Sie, wie die Vereinfachung der Dinge ihre mentale Belastung bei zukünftigen Änderungen verringert. Erklären Sie, wie die Wiederverwendung derselben Methoden nicht nur den Code vereinfachen, sondern auch das Auffinden des gesuchten Codes erleichtern kann. Erklären Sie, wie Polymorphismus Codezeilen reduzieren kann und warum dies manchmal nicht angemessen ist. Ja, erklären Sie, dass einige der Konzepte, die Sie implementieren möchten, nicht immer notwendig sind oder die Dinge manchmal unnötig verkomplizieren. Erklären Sie auch, dass die meisten dieser Änderungen iterativ nach Bedarf vorgenommen werden können, nicht „nur weil ich es gesagt habe“. Die meisten dieser Konzepte sind nur „Faustregeln“ und nicht festgeschrieben, was wahrscheinlich das ist, wogegen sie sich wirklich wehren.

Sicher, das lässt die Tür offen für langsamere Veränderungen, aber das wird wahrscheinlich dafür sorgen, dass es besser funktioniert. Genau wie bei einer Diät, wenn Sie zu plötzlich zu viele Änderungen vornehmen, werden Sie die Diät schneller verlassen, als Sie sie begonnen haben, und Sie werden nie wieder auf die Diät kommen können.

Vorbehalt

Versuchen Sie nicht, zu viel auf einmal zu tun. Ich hatte einen Manager, der meiner Abteilung ein mehrere hundert Seiten umfassendes Buch über SOLID-Prinzipien gab und uns alle dazu brachte, es zu lesen. Es war so langweilig, dass ich es nicht einmal 5 Seiten geschafft habe, ohne einzunicken. Das war, während der Manager versuchte, uns dazu zu bringen, fast über Nacht einen sehr großen Teil unseres Codes zu ändern. Ja, wir mussten diese Änderungen vornehmen, aber es gab so viele Änderungen, dass wir nicht mit allen Schritt halten konnten. Und es war alles ein Befehl, ohne Raum für Fragen oder gar Erklärungen, was oder warum die Änderungen notwendig waren. Zusammen mit anderen bedeutenden Änderungen in der Einstellung des Managements führte dies dazu, dass ich nach 4 Jahren dort eine andere Stelle suchte.

Ihre Leute haben sich wahrscheinlich in ihren Positionen wohlgefühlt. Das ist nicht unbedingt eine schlechte Sache, aber die Änderungen, die Sie anstreben, machen sie unangenehm. Unbequem zu sein ist im Allgemeinen, wenn Leute Dinge lernen, aber machen Sie es nicht zu unbequem oder Sie werden Leute verlieren. Und Sie können sie verlieren, ohne dass sie tatsächlich einen anderen Job finden. Arbeiten Sie mit ihnen zusammen, wenn sie Probleme haben, und seien Sie verständnisvoll, wenn sie Vorbehalte haben.

Ich sage nicht, sie zu babysitten oder zu verhätscheln, sei einfach keine Mauer, an der alles abprallt und sie keine Antworten bekommen können.

Gute Antwort! Ich weiß es wirklich zu schätzen, dass es nebenher kommt und den Entwicklern hilft, sich mit der Änderung vertraut zu machen, und ihr Fachwissen als gültig (aber aktualisierbar) behandelt, anstatt ihnen als widerspenstig entgegenzutreten, weil sie etwas nicht unterstützen, dessen Wert sie noch nicht verstehen. Bringen Sie sie dazu, die Risiken (und zusätzlichen Komplikationen) des alten Weges zu verstehen, und seien Sie offen für ihre Ideen zur Behebung, während Sie mit SOLID-Prinzipien bereit sind, wenn sie keine Vorschläge haben. Behandeln Sie Ihre Entwickler als die Experten, die sie sind, und nicht als Katzen, die man hüten muss. Seien Sie visionär und unterstützend, nicht autoritär.
Referenz für "Antwort von nvoigt"
zu kompliziertzu kompliziert
Der letzte Satz ist ein Folgesatz .
Bezüglich "Peer Programming" : Meinst du nicht Pair Programming ?
@PeterMortensen, ich habe es in beide Richtungen gehört, ziemlich austauschbar verwendet. computerlanguage.com/results.php?definition=peer+programming

Es hört sich so an, als ob Sie deswegen gestresst sind. Sie müssen diesen Stress aus sich herausholen. Hier ist, was ich empfehlen würde:

Es hört sich so an, als wüsste das Team nicht, wie wichtig all die technischen Probleme sind, auf die Sie hingewiesen haben. Es gibt zwei Möglichkeiten, Menschen verständlich zu machen:

  1. Lassen Sie sie diese Probleme beheben und verfolgen Sie dann die Ergebnisse
  2. Sie kümmern sich um diese Korrekturen und präsentieren die Ergebnisse

Letzteres hat bei mir immer funktioniert. Wenn Sie dies richtig machen und wenn das Team den Wert Ihrer Arbeit sieht. Sie sind natürlich gezwungen, sich in Zukunft darum zu kümmern.

Sie können einfach eines dieser technischen Probleme auswählen, mit denen Sie vertraut sind und bei denen Sie denken, dass Sie etwas bewirken können.

Legen Sie los und halten Sie uns auf dem Laufenden...

Sie müssen dieses Problem an mehreren Fronten angehen:

Bieten Sie zunächst an, für Kurse zu bezahlen, in denen die Praktiken und Gründe für deren Anwendung vermittelt werden. Bieten Sie jedem von ihnen, der Zertifikate verdient, einen Bonus und/oder eine Gehaltserhöhung an. Geben Sie dem nicht mehr als zwei Monate Zeit, um etwas Traktion zu bekommen. Sie werden vielleicht feststellen, dass einige von ihnen bereit sind, sich zumindest etwas Mühe zu geben.

Verschließen Sie die Datenlöcher. Sie brauchen Beweise, um Ihre Behauptungen zu untermauern. Alle Code-Check-Ins sollten einem Fehler, einer Funktion oder einer User Story zugeordnet werden. Fangen Sie an, die Zeit zu messen, die Sie für die Arbeit an diesen Fehlern und Funktionen aufgewendet haben. Fügen Sie häufige Post-Mortems hinzu. Sie alle müssen genau wissen, wie viel Aufwand für das Umschreiben von Code im Vergleich zum Hinzufügen von neuem Code für jede Aufgabe erforderlich ist. Gehen Sie zurück und analysieren Sie alte Fehler. Was war die eigentliche Ursache? War es ein Day-Zero-Bug oder wurde es eingeführt, weil „funktionierender Code“ verbogen wurde, um etwas Neues hinzuzufügen?

Beauftragen Sie einen Berater, um Ihre Codebasis und Ihre Entwicklungspraktiken zu überprüfen, und erstellen Sie eine Top-Ten-Liste der Dinge, die das Unternehmen beheben sollte.

Fangen Sie an, sich darauf vorzubereiten, Leute zu feuern. Bringen Sie zunächst einen leitenden Ingenieur auf Zeitbasis hinzu (vorzugsweise einen mit den genannten Zertifizierungen) und beginnen Sie mit ihm zusammenzuarbeiten, um einige der ungeheuerlicheren Probleme zu beheben. Nach ein paar Monaten, wenn die Aushilfe die Codebasis im Griff hat, stellen Sie sie ein und bringen Sie die nächste Aushilfe, dann feuern Sie den Entwickler, der am härtesten gearbeitet hat, um Ihre Bemühungen zu blockieren. Spülen und wiederholen.

Auf die eine oder andere Weise müssen Sie das richtige Team für den Job haben. Wenn es nicht die aktuellen Hacks sind, dann müssen Sie sie ersetzen. Während Sie ein Mentor sein und lebenslanges Lernen und kontinuierliche Verbesserung fördern können, ist es nicht Ihre Aufgabe, sie zu erziehen, da dies einfach nicht Ihre Fähigkeiten sind.

Vorwort

Da diese Frage auf Project Management Stack Exchange und nicht auf The Workplace oder einer anderen relevanten Website gepostet wurde, besteht die einzig gültige Möglichkeit, sie aus Sicht des Projektmanagements zu beantworten, darin, sich auf die Verantwortlichkeiten des Organisations- und Projektmanagements zu konzentrieren. Das bedeutet, viele der unwesentlichen Teile Ihrer Frage wegzuschneiden und sich auf die Kernaspekte des Projektmanagements zu konzentrieren, die entweder kanonische Antworten oder zumindest allgemein anerkannte Best Practices haben.

TL;DR

Möglicherweise sind Sie in eine dysfunktionale Organisation involviert oder auch nicht, aber Sie verstehen Ihre Rolle im Bereich des Projektmanagements sicherlich falsch und Ihnen fehlen möglicherweise die entsprechenden Fähigkeiten und die organisatorische Befähigung, um Ihre Arbeit erfolgreich zu erledigen. Ihr Hauptziel sollte es sein, sowohl mit Ihrem Führungsteam als auch mit Ihren Entwicklern zusammenzuarbeiten, um funktionale Arbeitsvereinbarungen auszubügeln, die die organisatorischen Ziele für das Projekt erfüllen, und gleichzeitig alle (einschließlich Ihnen) zu befähigen, den Prozess kontinuierlich zu verfeinern, bis er seine ergebnisbasierten Ziele erreicht .

Situationsanalyse

Ihre Frage enthält viel Material, das sich im Grunde auf einige Schlüsselelemente reduziert:

  1. Möglicherweise haben Sie es mit einigen Unterschieden zwischen der in den USA ansässigen und der europäischen Arbeitskultur zu tun. Auch wenn dies kein direktes Problem ist, färbt es sicherlich einen Teil der Perspektive und des Rahmens Ihrer Situation, und Sie müssen diesen Aspekt des Problems anerkennen.
  2. Der CTO übernimmt das Problem nicht und ist nicht bereit, direkte Autorität auszuüben. Wenn ein C-Level-Manager sagt, dass es den Leuten freisteht, zu kündigen (anstatt dass sie entlassen werden können), weigert sich diese Person, direkte Autorität auszuüben, und versetzt Sie in die Lage, das Problem durch Einfluss und nicht durch delegierte Autorität lösen zu müssen.
  3. Ihr Entwicklungsteam widersetzt sich Ihrer empfohlenen Vorgehensweise, sei es in Form von Vorschlägen, Richtlinien, Designprinzipien oder was auch immer sonst in Frage kommt. Die Tatsache, dass sie dies auf eine Weise tun, die Sie als unhöflich empfinden, ist ein Hinweis darauf, dass Sie sich ihren Respekt weder durch delegierte Autorität noch durch Soft-Skill-Einfluss verdient haben. Das Endergebnis ist, dass Sie keine Möglichkeit haben, sinnvolle Veränderungen herbeizuführen, wenn dies überhaupt ein Unternehmensziel für Sie ist.
  4. Aus Sicht des Projektmanagements spricht nichts in Ihrem Post Metriken, KPIs, Projektkontrollen oder irgendetwas anderes Messbares an. Veränderung ist hart und muss von einem Ort der Vision und durch die Anwendung aufgeklärten Eigeninteresses geführt werden. Projektmanagement als Fachmann ist oft eine schwierige Rolle, gerade weil es eine Rolle mit viel Verantwortung, aber sehr wenig direkter oder delegierter Autorität ist. Infolgedessen sind Projektmanager normalerweise am erfolgreichsten, wenn sie sich auf Projektkontrollen in Bezug auf Budget, Umfang, Zeitplan und Qualität konzentrieren und nicht auf architektonische oder technische Fragen.
  5. Ihr Rollenverständnis bedarf der Klärung. Sollen Sie ein mittlerer Manager, ein Servant-Leader, ein Coach, ein Vordenker für Geschäftsprozesse oder etwas ganz anderes sein? Die Tatsache, dass Sie keine klare Vorstellung davon haben, wie Sie das Team führen sollen, und keine Anweisung von der obersten Führung, was Sie das Team führen sollen, sind immer Indikatoren für einen organisatorischen Prozess Problem.

Es gibt sicherlich viele andere Probleme, die durch Ihren Beitrag aufgeworfen werden, sowie die Art und Weise, wie Sie sie formulieren. Dennoch bin ich der festen Überzeugung, dass die obige kurze Liste die Mehrheit der umsetzbaren Probleme abdeckt und diejenigen, auf die Sie Ihre unmittelbare Energie konzentrieren sollten.

Empfehlungen

Es gibt keine vollständig kanonische Liste für Personen-und-Einfluss-Probleme, aber sie als organisatorische Probleme zu definieren, führt zu ziemlich eindeutigen Lösungen. Obwohl nicht vollständig, würde ich auf jeden Fall eine Kombination der folgenden Aktivitäten empfehlen:

  1. Stellen Sie sicher, dass Sie von der Geschäftsführung klare Anweisungen zum Umfang Ihrer Befugnisse (falls vorhanden) sowie klare Erwartungen und Kennzahlen zur Bewertung Ihrer Leistung in der Rolle erhalten.
  2. Jedes Problem, das nicht im Rahmen Ihrer Befugnisse oder Ihres Einflusses gelöst werden kann, sollte der Geschäftsleitung zusammen mit allen unterstützenden Kennzahlen und Empfehlungen klar mitgeteilt werden. Was sie mit diesen Informationen tun (wenn überhaupt), liegt in ihrer Verantwortung und nicht in Ihrer.
  3. Denken Sie nicht in Begriffen des Änderungsmanagements, es sei denn, es wurde ausdrücklich zu Ihrem Job gemacht. Denken Sie in messbaren Ergebnissen . Arbeiten Sie mit dem Team zusammen, um die gewünschten Ergebnisse, Leistungskennzahlen, die den Fortschritt in Richtung dieser Ergebnisse messen, und alle erforderlichen Prozesskontrollen zu identifizieren, die zum Erreichen dieser Ergebnisse erforderlich sind. Mit anderen Worten, schaffen Sie eine gemeinsame Verantwortlichkeit für klar definierte Ergebnisse, anstatt zu versuchen, von oben nach unten Veränderungen herbeizuführen, die Sie ohne die aktive Zusammenarbeit des Teams nicht erreichen können.
  4. Hören Sie auf, die Verantwortung für Probleme zu übernehmen, für deren Kontrolle Ihnen die Werkzeuge, Fähigkeiten, Befugnisse oder andere Mittel fehlen. Erstellen Sie gemeinsame Verantwortlichkeiten, wo immer Sie können, verweisen Sie andere Probleme auf die Organisationsebene, wo sie gelöst werden können, und stellen Sie sicher, dass alle Parteien (einschließlich Ihnen, den Entwicklern und dem CTO) absolut klar sind, wer in Ihrer bestehenden Organisation für was verantwortlich ist Kultur.
  5. Denken Sie daran, dass Sie jetzt ein "Tech Project Manager" (was auch immer das in Ihrem Unternehmen eigentlich bedeutet) und kein Entwickler sind. So wie Sie ihr Vertrauen in Sie gewinnen möchten, während Sie Ihre Rolle erfüllen, müssen Sie auch das Vertrauen aufbauen und demonstrieren, das sie benötigen, um ihre Rolle zu erfüllen. Wenn das nicht passiert, ist das Teil dessen, was Sie alle gemeinsam beheben müssen.

Rollen, Verantwortlichkeiten, Vertrauen, Zusammenarbeit und Arbeitsvereinbarungen sind nie einheitlich. Dies sind Dinge, die ehrlich und offen besprochen werden müssen, insbesondere an wichtigen Wendepunkten wie Änderungen in der Teamzusammensetzung oder organisatorischen Verschiebungen von Rollen und Verantwortlichkeiten. Sie werden diese Probleme nicht über Nacht lösen, aber wenn diese Dinge nicht grundlegend für Ihren Plan sind, die von Ihnen identifizierten Probleme anzugehen, dann lösen Sie letztendlich die falschen Probleme. Transparenz, Kommunikation und Zusammenarbeit sind Ihre besten Werkzeuge, also nutzen Sie sie so oft und so effektiv wie möglich.

Aus Ihrem Beitrag geht hervor, dass nicht das gesamte Team an Bord ist. Deshalb sind sie es nicht; Sie und Ihr Management.

  • Wie funktioniert das Team Pulling?
  • Wie werden Schätzungen bearbeitet, von wem?
  • Sind die Folgen technischer Schulden ein tatsächliches Managementanliegen?
  • Wird die Neuentwicklung gestoppt, bis all diese technischen Schulden behoben sind?

Setzen Sie sie in Leistungsverbesserungspläne ein.

Sie erbringen derzeit keine angemessene Leistung, und Sie haben eine Liste von Gründen, in denen ihre Leistung unzureichend ist. Glücklicherweise gibt es ein Tool zur Leistungssteigerung, das genau solche Listen nutzt: den Performance Improvement Plan.

Motivation wird in zwei Arten eingeteilt, intrinsische und extrinsische, und da es ihnen anscheinend an intrinsischer Motivation mangelt, müssen Sie extrinsische Motivation nutzen, und diese wird durch Anreize bestimmt. Sie können dies tun, indem Sie Boni für hohe Leistung anbieten, aber es hört sich so an, als ob Ihr Hauptproblem darin besteht, dass ihre Leistung nicht einmal angemessen ist, und genau darauf soll der Leistungsverbesserungsplan eingehen. Der Leistungsverbesserungsplan legt die Anreize sehr klar dar: Erfüllen Sie die folgenden Ziele bis zum angegebenen Zeitpunkt, und Sie werden Ihren Job nicht verlieren.

Ein PIP ist eigentlich ein Ultimatum, das selten funktioniert. Dies flößt Ihren Mitarbeitern Angst ein, nicht eine bessere Arbeitsmoral.
Ich kann mir nicht vorstellen, dass ein PIP effektiv wäre, um sie dazu zu bringen, besseren Code zu schreiben. Sie scheinen nicht faul zu sein (was ein PIP normalerweise anvisiert), sondern eher stur, aufsässig und/oder ignorant.
@NotThatGuy Warum kann ein PIP auf Faulheit abzielen, aber nicht auf Sturheit, Ungehorsam oder Ignoranz?
@EJoshuaS Ich glaube nicht, dass es wirklich gute Ziele gibt, die Sie für Unwissenheit, Ungehorsam oder Sturheit setzen können, um sie zu erreichen, um den PIP zu "bestehen". Diese Dinge werden besser angegangen, indem man sie aufklärt, ihnen eine formelle Verwarnung gibt/sie feuert oder sich grundsätzlich an die Autorität wendet/Codierungsstandards setzt.
@NotThatGuy Wenn Sie eine Liste von Dingen haben, die sie tun sollen, die sie nicht tun (z. B. "SOLID-Programmierprinzipien folgen"), spielt es eine Rolle, warum sie sie nicht tun?
@nick012000 Ja, es ist wichtig. Wie ich in meinem letzten Kommentar geschrieben habe, werden verschiedene Gründe dafür, dass sie nicht tun, was ihnen gesagt wird, am besten auf unterschiedliche Weise angegangen. Jemanden für mangelndes Wissen zu bestrafen, ohne zu versuchen, ihm dabei zu helfen, dieses Wissen zu erlangen, ist einfach schreckliches Management. Sturheit ist zu vage, um sie mit Bestrafung zu lösen, es sei denn, sie geht auch mit Ungehorsam einher oder Sie möchten nur, dass sie allem, was ihnen gesagt wird, zustimmen (was wahrscheinlich schlimmer ist). Ungehorsamkeit kann möglicherweise durch PIP angegangen werden (und die Personalabteilung besteht möglicherweise sogar darauf), aber es ist einfach kein besonders guter Weg, sie anzugehen.
@nick012000 Wie würdest du ein objektives Ziel für „SOLID-Programmierprinzipien befolgen“ festlegen? Eine Person könnte argumentieren, dass etwas auf SOLID folgt, während eine andere argumentieren könnte, dass dies nicht der Fall ist. Und wie würden Sie es messen? Alles, was mir einfällt, würde wahrscheinlich viele unerwünschte Nebeneffekte mit sich bringen (z. B. das Auswählen von Problemen, die das Problem vermeiden, oder das Schreiben von Code, der schlecht ist, weil er zu weit in die entgegengesetzte Richtung geht). Ganz zu schweigen davon, dass die Bestrafung schlechter Codierungspraktiken im Allgemeinen nur eine schreckliche Idee ist, die davon abhält, überhaupt Code zu schreiben. Es sollte nur in der Codeüberprüfung behoben werden.
@NotThatGuy "Wie würden Sie ein objektives Ziel für "SOLID-Programmierprinzipien befolgen" festlegen?" Sie entscheiden, welcher Grad der Einhaltung der SOLID-Prinzipien akzeptabel ist (z. B. „folgt im Allgemeinen den SOLID-Prinzipien“ vs. „folgt normalerweise den SOLID-Prinzipien mit wenigen Ausnahmen“ vs. „folgt immer den SOLID-Prinzipien“), und dann sehen Sie sich ihre Commits und Code-Review-Historien an und entscheiden, ob sie dieses Niveau erreicht haben oder nicht.
Wenn Sie jemanden bestrafen, dessen Klassen keine Einzelverantwortung sind, wird er seine Klassen in schreckliche winzige bedeutungslose Fragmente aufteilen, nur um sicherzustellen, dass Klassen mit mehreren Verantwortlichkeiten vermieden werden. Nicht nur, wenn sie nachtragend sind, sondern auch, wenn sie legitim versuchen, das Ziel zu erreichen, denn was eine einzelne Verantwortung ist, kann sehr subjektiv sein. Sie werden Stunden oder Tage oder Wochen damit verbringen, ihren eigenen Code immer wieder zu überprüfen, um sicherzustellen, dass er perfekt ist, und sie werden sich davor fürchten, ihren Code zur Überprüfung oder zum Zusammenführen einzusenden, weil sie keinen weiteren Schlag gegen sie wollen.
2/2 Vielleicht können Sie sich andere Ziele setzen, um einigen Problemen entgegenzuwirken, die durch dieses Ziel verursacht werden, aber das kann ein endloser Kreislauf sein, und Sie werden sie nur dazu bringen, es trotzdem zu hassen, zur Arbeit zu kommen.
Ein PIP ist kein Instrument, um jemanden dazu zu bringen, sich zu verbessern, ein PIP ist eine HR-Methode, um Rechtfertigungen für Entlassungen zu finden. Ein PIP wird die Leute nicht dazu bringen, sich zu verbessern, es wird sie nur dazu bringen, es vorzutäuschen, bis sie zu ihren eigenen Bedingungen einen besseren Job haben.
@nvoigt "Ein PIP ist kein Instrument, um jemanden dazu zu bringen, sich zu verbessern" Es kann sein. „Verbesserung“ ist buchstäblich im Namen enthalten. Es kann einfach als Instrument verwendet werden, um eine Rechtfertigung für die Entlassung von jemandem zu schaffen, aber es kann auch als Möglichkeit verwendet werden, um eine extrinsische Motivation für Verbesserungen bereitzustellen. Natürlich ist intrinsische Motivation besser als extrinsische Motivation, aber wenn Ihren Mitarbeitern erstere fehlt, müssen Sie als Führungskraft letztere durch Anreize durchsetzen.