Wie geht man damit um, dass ein Entwickler defensiv wird, wenn er mit brechendem Code konfrontiert wird?

Ich begann als Junior-Entwickler in einem Unternehmen zu arbeiten, nachdem ich ein großartiges Programmier-Bootcamp mit einem tiefen und breiten Programmierwissen abgeschlossen hatte. Seitdem (1,5 Jahre) habe ich viel gelernt, an Glaubwürdigkeit als guter Softwareentwickler gewonnen und mehrere Projekte in meine Verantwortung übernommen. Ein großer Teil meiner Fortschritte wurde dank der Hilfe meiner Kollegen, der erfahrenen Entwickler, während dieser Zeit erzielt.

Von Zeit zu Zeit machen Senioren Fehler, und manchmal brechen diese Fehler die Module, die unter meiner Verantwortung stehen. Wenn das passiert, gehe ich normalerweise zu ihnen und sage etwas wie:

„Hey, Sie haben die Funktion X in Y geändert. Diese Änderung macht meinen Code kaputt, weil er Z nicht berücksichtigt, und Z ist das, was auf meiner Seite passiert. Ist es für Sie in Ordnung, K zu tun, um das Problem zu beheben?“

Einer von ihnen wird, wenn er wegen eines Fehlers angesprochen wird, defensiv und sagt Dinge wie "Also darf ich nicht programmieren?" oder "Nun, ändern Sie einfach Ihren Code so, dass er mit meinem übereinstimmt" (anstatt über andere, bessere Alternativen nachzudenken).

Wie soll ich ihm mitteilen, dass ich mit guten Absichten komme, ihm aber auch verständlich machen (und zustimmen), dass er derjenige ist, der die erforderlichen Änderungen vornehmen sollte, um den defekten Code/das defekte Modul zu reparieren?

Kommentare sind nicht für längere Diskussionen gedacht; diese Konversation wurde in den Chat verschoben .

Antworten (10)

"Hey, Sie haben diese X-Änderung an dieser Y-Funktion vorgenommen. Diese Änderung macht meinen Code kaputt, weil er Z nicht berücksichtigt, und Z ist das, was auf meiner Seite passiert. Ist es für Sie in Ordnung, K zu tun, um das Problem zu beheben?"

Sie müssen dies weniger persönlich machen. Es gibt keinen Mein Code und Ihren Code . Sie beide sind Mitarbeiter eines Unternehmens, und dieses Unternehmen besitzt den Code. Sie haben es lediglich geschrieben, aber geistiges Eigentum an Ihren Arbeitgeber weitergegeben. Eigenverantwortung zu übernehmen ist wichtig, aber sprechen Sie nicht so darüber.

Stellen Sie sich stattdessen den gesamten Code als unseren Code vor und formulieren Sie ihn so. Oder lass es weg. Wenn Sie sich nicht darauf konzentrieren, was sie getan haben, sondern auf den aktuellen Stand, wird es sich viel weniger wie ein persönlicher Angriff anfühlen.

Als Ergebnis der Änderung von X zu Y brach diese andere Funktionalität zusammen. Ich habe es mir angeschaut und gesehen, dass wir auch an Z denken müssen.

Sie können dann sehen, was sie sagen. Sie könnten mit etwas wie „Zeig es mir“ oder „Mach weiter und repariere es“ oder „Oh, daran habe ich nicht gedacht“ antworten und anbieten, es selbst zu reparieren.

Im Idealfall ist es aber egal, wer das Problem behebt. Es ist wichtig, dass es einen Dialog gibt und alle zusammenarbeiten, um das Gesamtprodukt stabil und funktionsfähig zu machen. Es ist an sich schon gefährlich , nur eine Person für einen bestimmten Teil des Produkts verantwortlich zu haben, und diese Art von Situation ist eine gute Chance, um sicherzustellen, dass jeder die anderen Teile des Produkts kennt.


Technisch gesehen klingt es so, als ob Sie wirklich Unit-Tests oder eine andere Form des automatisierten Testens für mindestens diese bestimmte Software wollen. Wenn es eine allgemeine Infrastruktur gibt, die sie ausführt und die Ergebnisse anzeigt, ist es offensichtlich, wenn etwas (nicht jemand (!), obwohl es natürlich einen gibt git blame) die Tests gebrochen hat. Sie sind als Sicherheitsnetz da und damit jeder es merkt, wenn etwas schief geht.

Ein zusätzlicher Vorteil von Komponententests für kritische Teile des Systems besteht darin, dass Sie nicht wirklich hingehen und darauf hinweisen müssen, dass Dinge kaputt sind. Es gibt keinen Code-Polizisten mehr. Wenn sich die Toolkette darum kümmert, überbringt niemand schlechte Nachrichten und es gibt weniger schlechte Stimmung im Team, da es weniger Raum zum Streiten gibt.

Andererseits müssen auch die Tests aktualisiert werden. Über die Vor- und Nachteile zu diskutieren, würde hier den Rahmen sprengen.

An Ort und Stelle! Programmierer nehmen Kritiker meist sehr persönlich. Das liegt in unserer Natur :) Einfach über das Problem reden und nicht, dass jemand schuld ist, dass etwas nicht mehr geht. (Außer es war wirklich sehr dumm)
Er hat nie gesagt, dass sie keine automatisierten Tests haben. Tests werden nie alles abdecken, also gehen sie nicht auf den Widerstand ein, den man von der Person bekommen könnte, die den Code geknackt hat. Ein besserer Vorschlag wäre, einen Test hinzuzufügen , der beweist, dass die Änderung etwas kaputt gemacht hat, und diesen als Hebel zu verwenden, um sie dazu zu bringen, ihren Fehler zu beheben.
@Michael Ich stimme zu. Und Sie haben Recht, sie haben nie gesagt, dass es keine Tests gibt. Das ist, was ich nicht vorschlage, dass sie einige machen. Ich sage einfach, dass Tests ein weniger konfrontativer Ansatz sind, weil sie die Notwendigkeit beseitigen, darauf hinzuweisen, dass etwas kaputt ist, wenn sie korrekt gewartet werden. Allerdings ist das nachträgliche Hinzufügen eines Tests meiner Meinung nach nicht wirklich hilfreich. Der Punkt meiner Antwort ist nicht, jemanden dazu zu bringen, seinen Fehler zu beheben, sondern dem Team als Ganzes zu helfen, besser zusammenzuarbeiten. Eine gut aufgebaute Testsuite wird jedoch wahrscheinlich bestimmte Dinge erkennen, auch wenn dies nur daran liegt, dass sie nicht aktualisiert wurde.
"Es ist aber egal, wer es repariert." Ich stimme dem nicht wirklich zu, wenn Sie einen Zeitplan haben und keine Zeit haben, den Fehler anderer zu beheben, haben Sie das Recht, sie zu bitten, ihn zu beheben.
@Ckankonmange Ich denke, es hängt von der Teamstruktur, dem Produkt, dem Unternehmen und den Wünschen des Managements ab. Es ist wirklich schwer, eine allgemeine Antwort zu finden. Ich habe diesen Teil bearbeitet, weil er etwas zu idealistisch war. Danke für den Hinweis.
@simbabque "Einen Test nachträglich hinzuzufügen ist meiner Meinung nach nicht wirklich hilfreich" Wann fügst du dann den Test hinzu? Schreiben Sie alle Ihre Tests zu Beginn eines Projekts und fügen nie weitere hinzu?
@Michael nein, natürlich nicht. Aber wenn eine Änderung etwas kaputt macht, für das ich keinen Test habe, würde ich das Verhalten beheben und dann einen Regressionstest hinzufügen, um sicherzustellen, dass es nie wieder passiert. Ich würde die Software nicht kaputt lassen und einen Test hinzufügen, um zu beweisen, dass sie kaputt ist, um sie jemand anderem zur Reparatur zu geben. Außer natürlich, wenn ich ein Teamleiter wäre und die Aufgabe, es zu reparieren, einem Junior geben würde, der noch nicht über die Fähigkeiten verfügt, den Test einzurichten.
Das Problem von @simbabque OP ist, dass er möchte, dass der andere es repariert. Ihre Lösung dafür kann nicht "Ich würde es selbst reparieren" lauten.
Das ist ein extrem guter Rat! Erst vor ein paar Wochen habe ich einen Fehler gefunden und mithilfe der Versionskontrolle den Entwickler gefunden, der Änderungen eingeführt hat, die Daten nicht korrekt massieren. Ich habe ihnen und meinem Team davon erzählt, aber ich habe bewusst vermieden, irgendjemandem gegenüber zu sagen, dass es die Schuld des Entwicklers war. Als wir nach der Ursache des Problems suchten, stellte sich heraus, dass es tatsächlich meine Schuld war - ich hatte meine Entwicklungsumgebung nicht richtig eingerichtet! Aber weil ich nicht mit dem Finger gezeigt hatte, verlor niemand sein Gesicht.
+1 - Außerdem möchten Sie keine Umgebung schaffen, in der Entwickler zu besorgt darüber sind, für das Brechen eines freigegebenen Moduls bestraft zu werden, damit sie selbst ein anderes neu erstellen. Dann verlieren alle.
Ich habe einmal ein ähnliches Problem mit einem Entwickler gelöst, der sagte: "Ich ändere meinen Code nicht." als sein Mantra. Ich habe Folgendes getan: "Hey, ich glaube, dem von Ihnen geschriebenen Code werden ungültige Parameter übergeben. Könnten Sie dort einige Debug-Anweisungen einfügen, damit wir den Übeltäter fangen können?" Wohl wissend, dass die richtigen Informationen weitergegeben wurden. Das brachte Licht, nicht Hitze. Und wie Sie sich vorstellen können, hat Mr. "I'm Not Changing My Code" das Problem erkannt.
Es ist wichtig, den Entwickler nicht zu beschuldigen, weil Sie wirklich nicht wissen, ob es ihre Schuld ist. Sehr wahrscheinlich war der Fehler, den sie eingeführt haben, auf schlechte Anforderungen zurückzuführen, die ihnen von jemand anderem gestellt wurden. Um Software zum Leben zu erwecken, braucht es viele verschiedene Menschen, die alle gleichermaßen für das Endprodukt verantwortlich sind. Einzelpersonen die Schuld zu geben ist Zeitverschwendung. Wichtig ist, dass die Probleme behoben werden.
Ich stimme zu, den Entwickler nicht zu beschuldigen, aber es ist wichtig, den Entwickler zu identifizieren und sicherzustellen, dass er den Fehler versteht (wenn es wirklich ein Fehler ist), damit er daraus lernen kann. Es hört sich so an, als hätten sie das Open/Closed-Prinzip gebrochen.
@DidIReallyWriteDas ja, das stimmt. Aber wir müssen auch bedenken, dass der OP das jüngere Mitglied des Teams ist und die andere Person viel älter ist. Abgesehen von Hybris und generell kein starker Teamplayer, besteht immer noch die Möglichkeit, dass sie das Richtige getan haben und das kann der Junior vielleicht noch nicht sagen.
+1 für Einheitentests. Junit hat mir so oft den Arsch gerettet, seit ich überredet wurde, es zu benutzen.
Fehler zu depersonalisieren ist eine Krücke. Während es Ihnen hilft, es nicht persönlich zu machen, hat es keine langfristigen Konsequenzen in Bezug auf die persönliche Entwicklung des betreffenden Senior-Entwicklers. Wenn er mit dem, was Sie gesagt haben, nicht umgehen kann, ist es zweifelhaft, dass er überhaupt wächst. Versuchen Sie, ihn etwas Material zum Umgang mit Feedback lesen zu lassen, wenn Sie können (z. B. über einen anderen Senior), wenn Sie eine positive Wirkung erzielen möchten, anstatt nur das Problem auszuhalten.
@simbabque sicher, und in diesem Fall ist es durchaus möglich, dass OP trainiert werden muss.
Ich möchte nur darauf hinweisen, dass dies ein großartiger Ratschlag für alle Bereiche ist, nicht nur für die Softwareentwicklung. Zu viele Menschen verfangen sich in dieser ganzen "Gib mir keine Schuld. Mein Teil funktioniert gut"-Mentalität, dass niemand in der Lage ist, sich auf das große Ganze zu konzentrieren - ein funktionierendes Produkt zu schaffen. Wenn alle Projektbeteiligten einen ganzheitlichen Ansatz verfolgen, geht es meiner Erfahrung nach schneller voran und es kommt zu weniger Rückschlägen.
Dies hätte eine gute Antwort sein können, aber dann hieß es, Entwickler nicht zu beschuldigen. Immer Entwickler beschuldigen... =P (+1)

Das Wichtigste zuerst: Es ist nicht ungewöhnlich, dass Abhängigkeitscode Downstream-Code beschädigt. Es gibt Entwicklungsmethoden, die dies abmildern können, wie z. B. gute Spezifikation, Dokumentation und Tests. Aber das ist nicht die Antwort auf deine Frage.

Hey, du hast diese X-Änderung an dieser Y-Funktion vorgenommen. Diese Änderung bricht meinen Code, weil sie Z nicht berücksichtigt, und Z ist das, was auf meiner Seite passiert. Ist es in Ordnung für dich, K zu machen, um es zu beheben?

Was Sie sagen, kann als Anschuldigung rüberkommen – Sie sagen im Grunde „Sie haben meinen Kodex gebrochen“ – und das wird die Leute in die Defensive treiben.

Ein besserer Weg ist, dies weniger "Sie haben meinen Code gebrochen" und mehr "Würde es Ihnen etwas ausmachen, sich X noch einmal anzusehen? Ich denke, es muss K tun, um mit Z zu arbeiten" zu halten.

Andererseits, wenn diese Person ein Mürrer ist, egal wie Sie auf sie zugehen, müssen Sie Ihren Chef wissen lassen, dass Ihre Arbeit verzögert wird, weil Sie die Arbeit des Mürrers reparieren müssen. Zeigen Sie auch hier nicht mit dem Finger, sondern belassen Sie es bei "Die Arbeit an Z wurde durch Änderungen in X verzögert und ich musste zuerst K erledigen".

Und das ist ein Hauptgrund, SemVer zu verwenden.
„Ein besserer Weg ist es, weniger „Du hast meinen Code gebrochen“ und mehr „Möchtest du einen weiteren Blick auf X werfen? Ich denke, es muss K tun, um mit Z zu arbeiten."." Dies impliziert, dass Sie eigentlich nur denken , dass es das tun muss, und der andere Typ könnte sehr gut nicht denken , dass es das tut. Das ist hier jedoch nicht der Fall, OP weiß mit Sicherheit , dass die Änderung die vorhandene Funktionalität beeinträchtigt hat, und das ist etwas, das mit Sicherheit angegangen werden muss.
@Demonblack OP könnte falsch sein. OP könnte tatsächlich derjenige sein, der den Code aktualisieren muss, um mit dem Code des leitenden Entwicklers übereinzustimmen. Der wichtige Rat ist, über das Problem mit dem Code zu sprechen, anstatt mit dem Finger zu zeigen, und nicht darüber, wer Recht oder Unrecht hat.
Dabei spielt es keine Rolle, wer was ändern muss. Auch wenn die Änderung sinnvoll ist, begehen Sie nichts, was bestehenden Code bricht, ohne vorher mit den Betroffenen gesprochen zu haben.

Dies ist tatsächlich eine großartige Gelegenheit in der Verkleidung. Die meisten Ingenieure wissen nicht, wie groß dies für einen aktuellen oder potenziellen Arbeitgeber ist. Auf Augenhöhe mit technischen Fähigkeiten ist Ihre Fähigkeit, mit Menschen zusammenzuarbeiten, Verantwortung für Fehler zu übernehmen, mit anderen durch ihre eigenen zu arbeiten und Ihre Gedanken taktvoll zu vertreten. Der allgemeine Konsens ist, dass dies am besten durch das Teilen einer anekdotischen Geschichte in einem Interview demonstriert wird. normalerweise basteln Leute solche Geschichten im Nachhinein zusammen, aber Sie könnten sehr strategisch sein und erkennen, dass Sie hier die Möglichkeit haben, eine großartige Geschichte zu schreiben, die Fragen wie „Wie gehen Sie mit Konflikten um?“ beantworten und wahrscheinlich überraschende Möglichkeiten bei Ihrem derzeitigen Arbeitgeber eröffnen würde .

Etwas, das Sie dann berücksichtigen sollten, ist Ihre Taktik vs. Strategie .

Taktik

Ihre Taktiken sind die Systeme und Aktionen, die Sie wählen, um bei Ihrem Problem zu helfen. Wählen Sie zum Beispiel eine bessere Formulierung, die weniger persönlich ist, wählen Sie den richtigen Zeitpunkt, achten Sie auf das Publikum/Zuschauer, helfen Sie der Person, die Sie ansprechen, oder verwenden Sie automatisierte Tests, um den Fehler zu finden. Verbringen Sie Zeit damit, gute Taktiken zu lernen und zu üben. Dies wird Ihre Toolbox sein, die Sie für Ihre Strategie nutzen können.

Strategie

Das Problem, mit dem Sie konfrontiert sind, ist symptomatisch für ein noch größeres Problem: Diese Person mag Sie nicht wirklich. Das wollen Sie strategisch beheben.

Am Arbeitsplatz, insbesondere in einem Team, liegt es außerhalb Ihrer Kontrolle, dass Sie eine persönliche Beziehung zu jedem einzelnen Ihrer Teamkollegen haben. Vielleicht mag dich jemand nicht und du magst ihn nicht, schade, du wirst in eine Beziehung gezwungen, weil du in einem Team bist. Es ist Ihre Entscheidung, ob diese Beziehungen gut oder schlecht sind. Sie können wählen, ob Sie sich um andere Menschen bemühen möchten oder nicht. Wirkliches berufliches Wachstum entsteht, wenn Sie sich nicht nur als Code-Cruncher (was zu Code-Arroganz-Problemen führt), sondern als funktionierendes Mitglied eines Teams sehen, und Sie wollen zeigen, dass dieses Team mit Ihnen in einem Team ist größer als die Summe seiner Teile. Das bedeutet großes Beziehungsbewusstsein.

Die strategische Entscheidung besteht darin, sich zu fragen, wie diese Beziehung aussehen soll. Ist es möglich? Was fehlt oder welche Herausforderungen könnten die Beziehung behindern? Was müssen Sie tun, um das zu erreichen? Zum Beispiel sind viele Beziehungsprobleme auf Vertrauen zurückzuführen. Eine Strategie wäre also, diesem Entwickler zu zeigen, dass Sie an seine/ihre Interessen denken und nicht nur an Ihre eigenen, und Ihre Beziehung an den Punkt zu bringen, an dem diese Person Ihnen vertraut. Seien Sie kein stoischer Besserwisser, das bringt die Leute nicht auf Ihre Seite, auch wenn Sie Recht und Berechtigung haben. Die Strategie besteht darin, zu erkennen, dass Sie Menschen auf Ihrer Seite haben möchten, und darüber nachzudenken, wie dies geschieht. Was funktioniert und was nicht. Es ist auch wichtig zu erkennen, dass eine erfolgreiche Strategie oft Geduld erfordert.

Das Coole daran ist, dass, wenn Sie eine wirklich solide Beziehung zu diesem Senior-Entwickler aufbauen, die Taktiken, die Sie dorthin gebracht haben, viel weniger notwendig werden und es einfacher ist, effizienter und erfolgreicher in Ihrem Job zu sein. Eine gute Strategie kann Sie zu einer guten Beziehung führen, und mit einer guten Beziehung werden Sie es viel einfacher finden, Ihre Ziele zu erreichen. Denken Sie also daran, an Ihrer Beziehung zu dieser Person zu arbeiten, wenn es kein Problem gibt, und das wird es einfacher machen, wenn solche Probleme auftauchen.

Wie soll ich ihm mitteilen, dass ich mit guten Mitteln komme, ihm aber auch verständlich machen (und zustimmen), dass er derjenige ist, der die erforderlichen Änderungen vornehmen sollte, um den defekten Code/das defekte Modul zu reparieren?

Stellen Sie besser sicher, dass Ihr Chef/Team zustimmt, dass dies so gehandhabt werden sollte. Idealerweise gibt es in einer Codierungsumgebung eine Art automatisiertes Testsystem. Wenn also versucht wird, Code einzuchecken, wird er abgelehnt, bis er behoben ist. Normalerweise ist dies die Person, die es geändert hat. Jeder sollte stolz auf seine Arbeit sein, die mit einem Maß an Verantwortung einhergeht, um Dinge reparieren zu wollen, die er kaputt macht.

Ihr Chef hält es möglicherweise für Verschwendung, wenn die Zeit der erfahrenen Entwickler jeden kleinen Fehler beheben muss, den sie in das System einführen. Sie denken, dass diese Aufgabe jungen Entwicklern überlassen wird; Ich bin damit nicht einverstanden. Wie das funktionieren soll, musst du selbst herausfinden.

Wenn Code über Modulgrenzen hinweg bricht, handelt es sich definitiv um Senior-Developer-Material.
Es ist der leitende Entwickler, der entscheiden sollte, wie es behoben wird. Aber das bedeutet nicht, dass sie den Fix persönlich schreiben müssen oder dass der Fix in dem von ihnen geschriebenen Code enthalten sein muss.
@ThorbjørnRavnAndersen - es kann sinnvoll sein, es einem leitenden Entwickler zuzuweisen, aber die meisten Projekte werden manchmal chaotisch und Best Practices werden nicht befolgt. Es könnte auch als ein lehrbarer Moment für einen Junior-Programmierer angesehen werden, um es herauszufinden und das Senior-Mitglied für mehr Aufsicht zu sorgen.

Meine Herangehensweise an diese Art von Problem besteht darin, sicherzustellen, dass ausreichende Methoden und Werkzeuge vorhanden sind, um das Problem technisch und nicht persönlich zu behandeln.

Stellen Sie beispielsweise sicher, dass Sie über automatisierte Builds und Rauchtests verfügen. Wenn diese kaputt gehen, haben Sie eine Regel, dass der Brecher beim nächsten Teammeeting für Essen sorgen muss.

Manchmal stellen Menschen den Status quo mutig in Frage, in einem selbstsüchtigen Streben nach persönlichem Fortschritt. In gewisser Weise ist das normal. Es ist bestenfalls unternehmerisch. Das Individuum bewegt sich in einem Rahmen vorwärts, der es zulässt. Ändern Sie also den Rahmen. Diese Arten von Menschen werden nicht ausgebremst, sie werden auf unterschiedliche Weise Fortschritte machen. Als Führungskraft ist es Ihr Ziel, diesen Geist zu nutzen und ihn positiv für das Team und die Ziele zu lenken.

Ein Teil dieser Strategie, den Willen zu nutzen, besteht darin, sicherzustellen, dass die Menschen immer noch ein Gefühl der Eigenverantwortung haben. Die populärste Antwort hier bisher plädiert für eine Philosophie des Eigentumsverzichts. Ich denke, das kann kontraproduktiv sein. Lassen Sie Menschen ihren Bereich leidenschaftlich besitzen. Aber stellen Sie sicher, dass sie andere nicht betreten.

Ich habe die Antwort geschrieben, auf die Sie sich beziehen, und ich stimme auch dem zu, was Sie sagen. Für einen Junior im betreffenden Team ist Ihr Rat jedoch nicht besonders umsetzbar. Ich glaube nicht, dass sie die Art und Weise ändern können, wie die Dinge in ihrem Unternehmen sind. Können Sie konkretere Ratschläge geben, nicht für die Managerrolle, sondern für die Position, in der sich das OP speziell befindet? Ich bin mir selbst nicht sicher, wie sie das beeinflussen könnten, daher bin ich mit meiner Antwort den anderen Weg gegangen. Ich würde gerne hören, was Sie denken.
@simbabque Ja, meine Antwort geht eher in Richtung Führungsrollen. Ich denke, das OP könnte immer denselben Rat an seinen Manager eskalieren, aber ich habe das Gefühl, dass das Problem immer noch im „zwischenmenschlichen“ Bereich bleibt, wo möglicherweise eine technische Lösung verfügbar ist. Es ist schwer, die Details zu kennen, aber die Art und Weise, wie der OP sein Problem formuliert, deutet darauf hin, dass er für die Delegation von Fehlern verantwortlich ist, und es gibt eine lockere Kultur, in der OP einfach zu Kollegen geht und Fehler von Angesicht zu Angesicht auf die Leute wirft. Technisch gesehen kann er/sie dies vermeiden, indem er/sie weitere Tests hinzufügt oder dafür sorgt, dass der Code Abhängigkeiten zur Erstellungs-/Kompilierungszeit erzwingt.
Vielen Dank für Ihre Antwort. Ich sehe jetzt, woher du kommst. Um ehrlich zu sein, habe ich es eher so verstanden, dass das OP eher jung und unerfahren ist und daher vielleicht zu schnell zu Schlussfolgerungen kommt. Ich denke daher, dass es je nach Kultur möglicherweise nicht der bevorzugte Schritt ist, ihrem Vorgesetzten eine Vorgehensweise vorzuschlagen.
@simbabque Es ist schwer zu wissen. Meiner Meinung nach, wenn ein Fehler protokolliert wird und es heißt "Modul A gibt Werte 1..6 aus" und "abhängiges Modul B erwartet Eingaben 1..5", dann muss jemand bestimmen, wo die Änderung vorgenommen werden soll, wenn die Kultur dies fördert Flächenbesitz. Wenn dies nicht der Fall ist, kann die Änderung von jedem vorgenommen werden. Auf jeden Fall scheint mir, dass dies ein Problem für die technische Führung und die für diese Kultur spezifische Schiedsgerichtsbarkeit ist.
@simbabque Wenn das Ziel darin besteht, sicherzustellen, dass ausreichende Tools und Methoden vorhanden sind, und wenn eine Eskalation über das Management keine Option ist, können die Gegenparteien im Eigentumsstreit ihr Problem lösen, indem sie proaktiv an den Tools/Methoden arbeiten.

Diese Frage hängt wahrscheinlich stark von der Kultur des Unternehmens ab.

Es gibt Unternehmen, in denen "Fehler nicht passieren". Oder besser gesagt, Sie dürfen nicht darüber sprechen, und ein Manager, der jemanden kennenlernt, der einen Fehler gemacht hat, wird "diese Person genau beobachten".

In dieser Situation legen Sie das Problem dieser Person persönlich so offen, dass der Vorgesetzte nur dann davon erfährt, wenn es absolut notwendig ist, und sagen ihm genau, was er tun oder beheben soll, nachdem Sie versucht haben, es selbst zu beheben. (Natürlich solltest du auch rennen, rote Fahnen yada yada.) Du solltest ihnen auch sagen, dass es zwischen dir und ihnen ist und dass du cool bist.

In jedem funktionierenden Unternehmen müssen Sie sicherstellen, dass Ihre Offenlegung nicht wie eine Anschuldigung klingt.

Sie müssen immer noch sicherstellen, dass Sie ihnen genau sagen, was Sie von ihnen wollen und warum Sie es nicht selbst tun können (denn wenn Sie es reparieren können, warum beschweren Sie sich dann, beheben Sie es schnell und machen Sie weiter, sie haben es nicht getan nicht um Arbeit für Sie zu schaffen, sie mussten ihr eigenes Problem lösen).

Stellen Sie außerdem sicher, dass ihr Vorgesetzter oder Projektleiter davon Kenntnis hat und ihm sein Okay gegeben hat, das Problem zu beheben.

Sie können nicht entscheiden, was sie mit ihrer eigenen Zeit anfangen sollen, und bekommen von ihrem Vorgesetzten/Projektleiter Arbeit zugewiesen.

Wenn Sie vorbeikommen und über einen Fehler in einem Ticket sprechen, der jetzt erledigt sein sollte, ohne diese Dinge vorher zu tun und sie direkt anzusprechen, wird dies Stress und den Eindruck erzeugen, dass Sie möchten, dass sie in einer Zeit arbeiten, in der sie etwas anderem zugewiesen sind oder in ihrer Freizeit.

Die meisten Konflikte oder Probleme mit Menschen sind auf zugrunde liegende Prozessprobleme zurückzuführen. Das ist hier sicherlich der Fall.

Sie, Ihre Kollegen, Ihr Unternehmen und am schlimmsten Ihre Endkunden sind alle Opfer von fehlerhaften Prozessen, die vorhanden sein sollten, um die Qualität und Integrität Ihres kombinierten Codes zu verwalten.

Aus dieser Perspektive zu denken und zu handeln ist der Schlüssel zur Lösung der zugrunde liegenden Qualitätsprobleme, die direkt zu den Problemen geführt haben, die Sie erleben. Es ist auch der Schlüssel, um Gemeinsamkeiten mit Ihren Kollegen zu finden (z. B. wird es Ihnen leicht fallen, sich auf die Prozessprobleme zu einigen, die Ihnen all die Schmerzen bereiten).

Obwohl Sie wahrscheinlich nur Ihre Arbeit erledigen und in Ihrer Karriere vorankommen möchten, werden Sie Ihre Arbeitsbeziehung mit denen beschädigen, die am besten in der Lage sind, Ihnen zu helfen, wenn Sie den Eindruck haben, dass Sie darauf bedacht sind, erfahreneren Kollegen einen Schritt voraus zu sein .

Mein Rat wäre, eine Lösung vorzuschlagen, entweder im Detail (z. B. als Pull Request) oder einen Überblick über den Gesamtansatz zu geben, den Sie als Lösung vorschlagen würden. Bringen Sie dies zu der Person, deren Code Sie für gebrochen halten, und fragen Sie nach ihrer Meinung. Und vor allem auf die Antwort hören .

Dies stellt den Kollegen, den Sie vielleicht gerade unterbrochen haben, vor eine Lösung statt vor ein Problem und damit zusätzliche Arbeit. Sie werden wahrscheinlich nicht nur etwas aus den Antworten lernen, die Sie erhalten, sondern Sie werden auch als hilfsbereit und teamfähig angesehen.

Wie andere vorgeschlagen haben, müssen Sie dies entpersonalisieren. Es sollte ein kollektives Eigentum an dem Code geben. Weniger "Du hast meine Änderungen kaputt gemacht!" und mehr wie "Wie können wir beide Änderungen dazu bringen, gut zusammenzuarbeiten?"

Sie sollten auch überlegen, ob es Spielraum gibt, die Kommunikation während der täglichen Standups zu verbessern (falls vorhanden - oder schlagen Sie vor, sie einzuführen, falls nicht), damit im Allgemeinen mehr Bewusstsein dafür besteht, woran die Menschen arbeiten, und daher weniger Konflikte möglich sind brechende Änderungen.

Es ist schwierig, bei Standups das richtige Maß an Details bereitzustellen, aber wenn Ihre Kollegen den breiten Bereich des Codes, in dem Sie arbeiten, nicht kennen, möchten Sie vielleicht etwas mehr Details angeben.

Noch etwas, das Sie im Hinterkopf behalten sollten - als jüngerer, aber weniger erfahrener Entwickler ist es durchaus möglich, dass Sie schneller programmieren können als Ihre erfahreneren Kollegen (ein jüngeres, schärferes Gehirn ist manchmal eine echte Bereicherung!), aber das sollten Sie auch anerkennen Ihre erfahreneren Kollegen haben einen Erfahrungsvorsprung und können aufgrund ihrer jahrelangen Erfahrung in ihrem Ansatz überlegter sein. Tatsächlich ähneln die meisten Entwicklungsprojekte eher Marathons als 100-Meter-Sprints. Die besten Teams schöpfen aus allen Erfahrungsstufen.

Wie soll ich ihm mitteilen, dass ich mit guten Absichten komme, ihm aber auch verständlich machen (und zustimmen), dass er derjenige ist, der die erforderlichen Änderungen vornehmen sollte, um den defekten Code/das defekte Modul zu reparieren?

Ich stimme vielem zu, was bereits gesagt wurde. Unterschiedliche Menschen interpretieren dieselbe Botschaft unterschiedlich, und was der eine als ganz normale, effektive Kommunikation empfindet, empfindet der andere als irritierend oder einschüchternd – aus welchen Gründen auch immer. Diese Person teilt wahrscheinlich (implizit) mit, dass sie Ihren Stil unangenehm findet. Probieren Sie beim nächsten Mal etwas anderes aus. Versuchen Sie, die Einstellung zu ändern – erwischen Sie ihn eher am Wasserbrunnen als an seinem Sitzplatz. Setzen Sie sich neben ihn, bevor Sie das Gespräch beginnen, anstatt über ihm zu stehen. Probieren Sie verschiedene Ansätze aus – verwenden Sie Ihren gesunden Menschenverstand.

Und noch eine Sache, die ich vorschlagen kann, versuchen Sie, Ihre Kommunikation mit ihm auszugleichen. Wenn er sensibel ist, wenn Sie auf seine Fehler hinweisen, finden Sie Gelegenheiten, ihm (aufrichtig) Komplimente für kluge Entwürfe oder eine effektive Ausführung zu machen – das hilft den meisten Menschen sehr.

Der einfachste Weg, damit umzugehen, ist, nicht damit umzugehen. Lassen Sie den Entwickler stattdessen mit einem fehlgeschlagenen Test argumentieren. Fragen Sie sie, wie der Code funktionieren soll, und bauen Sie dann einen Test darum herum. Geben Sie ihnen den Test und sagen Sie ihnen, dass er fehlschlägt.

Passiv-aggressiv und sie finden möglicherweise eine Lösung, die sowohl den Test besteht als auch Ihren Code bricht. Was dann – die Schlaumeier eskalieren?