Was würden Sie Chefs sagen, die Programmierjobs für austauschbar halten?

Ich bin in diesem Softwareunternehmen und habe bisher nur zwei Manager erlebt, aber beide sehen Programmierjobs nicht viel anders als Ziegelsteine ​​zu legen. Sie betonten immer, dass wir jederzeit die Jobs des anderen übernehmen sollten.

Infolgedessen hat unser Code „Gruppeneigentum“ – niemand besitzt etwas, und niemand ist für irgendetwas verantwortlich. Oder anders gesagt: Jeder besitzt alles und jeder ist für alles verantwortlich. Wenn etwas kaputt geht, kann jeder losgeschickt werden, um das Feuer zu löschen, unabhängig davon, wer das Problem verursacht hat. Wenn Sie den Code öffnen, ist er ziemlich chaotisch, weil verschiedene Leute unterschiedliche Vorgehensweisen haben. Darüber hinaus endet das Korrigieren des Codes anderer, ohne dass viel Zeit darauf verwendet wird, ihn zuerst zu verstehen, schnell mit Patches auf Patches auf Patches. Das stört unsere Chefs nie, weil sie ergebnisorientiert sind; dh sie machen sich nie die Mühe, irgendetwas auf der Codeebene zu betrachten.

Manch einer mag es nicht glauben, aber es ist absolut wahr, und wir sind ein reines Softwareunternehmen!

Die Begründung dafür ist, dass, wenn jeder für alles zuständig ist, wenn jemand Urlaub macht, andere einfach einspringen können/sollten und ihn/sie abdecken, damit er/sie jederzeit Urlaub machen kann/sollte. Einmal hatte sich ein Typ mehr als einen Monat lang auf ein neues Modul vorbereitet, nahm dann Urlaub und kurz bevor er ging, sagte er unserem Chef, dass alle Probleme gelöst seien und es bereit sei, mit dem Programmieren zu beginnen. Beim Gedränge am nächsten Tag sagte mein Chef zu mir, wir müssen das nächste Woche erledigen, können Sie es bitte abholen?

Ich konnte einfach nicht glauben, was ich hörte, dieser Typ hat es mehr als einen Monat lang vorbereitet, aber seine Erkenntnisse nie mit jemand anderem geteilt, und jetzt will mein Chef, dass ich es aus heiterem Himmel ohne Vorkenntnisse hole , und beenden Sie es innerhalb einer Woche.

Ich kann mich nicht an die Details erinnern, aber ich hatte das Glück, einige logistische Gründe / Ausreden zu finden, um der tödlichen Kugel auszuweichen. Er hat nicht die Vorstellung, dass es für Programmierer am schmerzhaftesten ist, die Arbeit anderer zu übernehmen.

Ist das bei Softwareunternehmen üblich? Wie würdest du mir vorschlagen, diesen (ahnungslosen) Typen die schlechte Nachricht zu überbringen, dass Programmieren etwas ganz anderes ist als Ziegelsteine ​​zu legen, ohne dass es ihnen peinlich ist, und sie auch zu überzeugen, weil sie beide der festen Überzeugung sind, dass jeder für alles verantwortlich sein sollte?

Hurra Leute, hier wird viel gequatscht und diskutiert. Denken Sie daran, dass Kommentare nicht für längere Diskussionen gedacht sind – alles wurde in den Chat verschoben . Bitte führen Sie weitere Meta-Diskussionen auch in diesem Chatroom. Vielen Dank!

Antworten (13)

Ich würde ihnen sagen, dass sie Recht haben. Wie werden wir dieses Ziel in der Praxis erreichen?

Grundsätzlich ist dies ein lobenswertes und erreichbares Ziel. Schauen wir uns die Besonderheiten an:

Wenn jeder einzelne Entwickler isoliert auf seiner eigenen kleinen Insel mit seinem eigenen Stil arbeitet und seine eigenen Entscheidungen unabhängig trifft, ist dies ein Rezept für eine Katastrophe. Wie lässt sich ihre Arbeit mit der anderer integrieren? Was ist, wenn sie krank oder im Urlaub sind? Was, Gott bewahre, wenn sie in einen Unfall geraten und arbeitsunfähig werden oder sogar sterben? Wenn sie die einzige Person sind, die weiß, wie ihr Code funktioniert, und ihre Kollegen viel Zeit investieren müssen, um die Arbeit dieser Person zu verstehen, gefährdet dies die Kontinuität des Unternehmens! (Dies wird manchmal als Bus-Faktor bezeichnet ) .

Gleichzeitig hat jeder Entwickler seine eigenen Fähigkeiten und Spezialisierungen. Nicht jeder wird mit allem gleich gut umgehen können und das ist in Ordnung! Deshalb arbeitet man doch als Team gemeinsam an einem gemeinsamen Ziel.

Was also tun, um eine tragfähige Situation zu erreichen?

Zunächst sollte sich das Team zusammensetzen und entweder eine Reihe von Codierungsrichtlinien auswählen, die übernommen werden sollen, oder eine eigene Reihe zusammenstellen. Dadurch wird der „Chaos“-Faktor aus dem Code eliminiert: Da jeder die Dinge auf die gleiche Weise tun wird, sollte es für andere Programmierer viel einfacher sein, zu verstehen, wie die Dinge funktionieren.

Zweitens sollte ein System eingerichtet werden, das Möglichkeiten zum Wissensaustausch bietet. Wenn erwartet wird, dass Sie Ihre gesamte Zeit mit dem Schreiben von Code verbringen, bleibt keine Zeit, Wissen zu teilen, sodass das Problem bestehen bleibt. Programmierer sollten entweder die Zeit haben, ihren Code zu dokumentieren oder ihr Wissen aktiv mit anderen zu teilen, oder idealerweise beides . Außerdem sollten Richtlinien für die Dokumentation des Codes festgelegt werden, um mögliche Probleme zu vermeiden, die sich aus einer unvollständigen oder unzureichenden Dokumentation ergeben würden. Während ein Experte eine Funktion möglicherweise mit ein paar kurzen Zeilen verstehen kann, benötigt jemand, der nicht regelmäßig mit der Funktion arbeitet, etwas mehr Informationen, um auf den neuesten Stand zu kommen. Für den zweiten Fall sollte die Dokumentation genügend Informationen liefern.

Idealerweise wird dieser Wissensaustausch durch regelmäßige Besprechungen der Arbeit der anderen unterstützt. Dies bietet dem Prüfer die Möglichkeit, sein Wissen über den Code zu erweitern, und hilft gleichzeitig Ihrem Team, die Gesamtqualität des Codes zu verbessern, da die zusätzlichen Augen helfen, mögliche Fehler zu erkennen. Es hilft dem Team auch, sein Verständnis für die Gesamtqualität des Produkts zu verbessern. Wenn viele Dinge auf „hackige“ Weise gelöst werden müssen, wird die Qualität des Produkts natürlich viel geringer sein, als wenn dieselben Probleme mit schönem, sauberem Code gelöst werden könnten.

Um die Barbier-Analogie zu stehlen, ist das Ideal, dass alle Barbiere (Codierer) in der Lage sind, die Arbeit des anderen zu beenden, weil:

  • Sie verwenden alle die gleichen Frisuren

  • Sie alle schneiden mit Techniken und Werkzeugen, die entweder gleich oder zumindest gleichwertig sind

  • Sie dokumentieren ihren Fortschritt beim Haarschnitt anhand eines vereinbarten Systems und notieren, was sie getan haben, wie sie es getan haben und warum sie es so gemacht haben

  • Sie nehmen sich regelmäßig etwas Zeit, um die Arbeit des anderen zu überprüfen und sich damit vertraut zu machen

Um die „Einstellung“ des OP zu diesem Thema anzusprechen, kann es in Wirklichkeit sehr gut sein, dass dies mit der Zeit, die die Programmierer haben (aufgrund von Fristen und Erwartungen, wie ihre Zeit verbracht wird) und der hochspezialisierten Natur der Arbeit jedes Programmierers, dies ist Ziel ist in der Praxis nicht erreichbar. Unabhängig davon ist es viel einfacher, Ihren Managern zu helfen, selbst zu sehen, warum das Ziel unerreichbar ist, als zu behaupten, dass dies der Fall ist, und es dann verteidigen zu müssen. Wenn also jemand etwas vorschlägt, bei dem Sie große Probleme sehen, versuchen Sie, mit einer konstruktiven Haltung zu antworten, z. B. "Sicher, aber wie werden wir X, Y und Z lösen?" Anstatt mit einer negativen Antwort zu antworten, z. B. "Das wird nie funktionieren, wegen X, Y und Z!". Das trägt dazu bei, dass das Management Sie positiver wahrnimmt und am Ende wahrscheinlich ein besseres und angenehmeres Arbeitsumfeld schafft.

Wenn das Erreichen von Ziel A bedeutet, viel Zeit, Mühe oder Geld in die Lösung der Probleme X, Y und Z zu investieren, ist es die Mühe vielleicht nicht wert, aber das ist eine Entscheidung, die das Management treffen sollte, also ist es unsere Aufgabe als Mitarbeiter, sie zu treffen ihnen die notwendigen Informationen, um zu einer gut informierten Entscheidung zu kommen.

Yay, eine konstruktive Antwort, die eine konstruktive Lösung vorschlägt.
Es wäre gut, wenn das gesamte Managementteam auch Jobs tauschen könnte. Präsident ist raus? Kein Problem.
"Es wäre gut, wenn das gesamte Managementteam auch Jobs tauschen könnte" , haha, das ist gut, wirklich gut.
„Wenn sie die einzige Person sind, die weiß, wie ihr Code funktioniert, und ihre Kollegen viel Zeit investieren müssen, um die Arbeit dieser Person zu verstehen, gefährdet dies die Kontinuität des Unternehmens!“ Mein Chef nennt das den Bus-Faktor .
@PatrickRoberts Danke dafür, ich habe es in die Antwort aufgenommen.
Das ist eine fantastische Antwort! Ich empfehle, eine Richtlinie zu haben, dass jedes Stück akzeptierten Codes zuerst von mindestens 2 Entwicklern verstanden werden muss. Das können Programmierer und Prüfer sein oder einfach nur zwei Programmierer, die es gemeinsam geschrieben haben. Verwechseln Sie die Paare jetzt oft genug, und Sie werden eine gute Konvergenz bei der Art und Weise, wie Sie codieren, haben.
Exzellent. Mein allererster Gedanke beim Lesen der Überschrift der Frage war: „Sie haben Recht“. Natürlich ist das vereinfacht, aber Sie haben es gut abgedeckt. Nein, wir sind keine Maurer, aber vieles, was wir tun, ist austauschbar – und Standards machen das möglich.
Das Schreiben von Code ist etwas schwieriger als das Schneiden von Haaren. Eine bessere Analogie könnte das Entwerfen eines Gebäudes sein. Ein Architekt geht, der nächste kommt rein und macht fertig. Wenn der erste Architekt nur 95 % der tragenden Träger fertig gezeichnet hätte, müsste der zweite Architekt dies bemerken. Es kann nicht offensichtlich sein. Es wäre viel Kommunikation erforderlich.
Fügen Sie der Antwort vielleicht ein wenig hinzu, um darauf hinzuweisen, dass Miteigentum Zeit braucht. Wenn Ihre Chefs möchten, dass Sie Miteigentum haben, müssen sie Ihnen Zeit geben, sich zu einigen. Sie können kein gemeinsames Eigentum haben, wenn das gesamte Team die ganze Zeit Brände bekämpft. Den Teammitgliedern sollte es gestattet sein, sich alleine ohne Anwesenheit oder Einmischung des Managements zu treffen.
@PaulRowe Das meine ich im Grunde, wenn ich von "Wissen teilen" spreche. Ich werde mal sehen, ob ich eine Möglichkeit finde, das zu klären.
@superluminary, weshalb Sie einen einzigen Architekten benötigen, der letztendlich von Anfang bis Ende für das Projekt verantwortlich ist. Ihr Beispiel ist sehr passend, diese fehlenden Träger könnten buchstäblich den Unterschied ausmachen, ob Sie menschliche Pfannkuchen machen oder nicht. (Was passiert, wenn das Traktionskontroll-Subsystem eine nicht behandelte Ausnahme hat? Ich bin sicher froh, dass keine meiner Software jemals das Risiko eingehen könnte, jemanden direkt zu töten.)
@superluminary Unterschätzen Sie nicht das Training und die Fähigkeiten, die für fortgeschrittenes Haarschneiden erforderlich sind.
Wirklich? Vergleichen Sie Haare schneiden oder Friseure mit CODING? Es gibt keine Logik, die dem Schneiden von Haaren innewohnt, das ist ein lächerlicher Vergleich.
@lambdapool Ich mache keinen wörtlichen Vergleich zwischen den beiden oder behaupte, dass die beiden gleich sind. Ich mache einfach eine Abstraktion, um meinen Standpunkt zu veranschaulichen , nämlich dass zwei Mitarbeiter mit den gleichen Grundkenntnissen in der Lage sein sollten, die Arbeit des anderen zu beenden, und dass der Entwicklungsprozess die erforderlichen Dinge dafür bereitstellen sollte, damit dies möglich ist. Nicht alles wörtlich nehmen. Jede Analogie wird zusammenbrechen, wenn Sie sie aus einer bestimmten Perspektive betrachten, was ihren Wert als Werkzeug, um ein Problem aus einer anderen Perspektive zu betrachten, nicht mindert.
@superluminary Ich denke, der Vergleich ist besser mit Ärzten - obwohl wir alle die Grundlagen kennen, spezialisieren wir uns nach einem gewissen Maß an Fachwissen, sodass ein Urologe nicht annähernd so viel über Gehirne weiß wie ein Neurologe, ich könnte ein DB sein Spezialist mit begrenzten Kenntnissen in clientseitigem Javascript.
Ich würde argumentieren, dass unterschiedliche Stile einen großen Schmerz verursachen. Wenn Sie Softwareentwicklung als Technik behandeln, sollte es nicht viel Platz für Subjektivität geben. Die Entscheidung ist in einem gegebenen Kontext entweder richtig oder falsch. Code-Review ist zumindest ein gutes Werkzeug, um einige vertretbare Ansätze zu diskutieren. Es ist wirklich schwer, sich an die Situation zu erinnern, in der ich nicht verstehen konnte, wie Code funktioniert. Normalerweise ist es viel schwieriger zu verstehen, WARUM Code auf diese Weise funktioniert. Egal ob Feature oder Bug. PS Nettes Gespräch über den Codestil: vimeo.com/97329157

Kollektives Eigentum an Code ist eine Sache innerhalb der agilen Entwicklung und wird im Allgemeinen als eine gute Sache angesehen. Aber es scheint, dass Ihr(e) Chef(s) nur eine Sache aus dem agilen Manifest genommen haben, die zu ihnen passt, und alle anderen ignoriert haben.

Damit dies funktioniert, benötigen Sie ein Team, das eng zusammenarbeitet und häufig kommuniziert. Die meisten Aufgaben sollten durch Pairprogramming gelöst werden, Code-Reviews sollten üblich und früh sein, es sollte ein hohes Maß an Tests geben, um Vertrauen in die Qualität zu schaffen, vorzugsweise entwickeln Sie mit testgetriebener Entwicklung usw.

Dass es einen gemeinsamen Code-Standard gibt, ist nicht einmal eine agile Sache, sondern einfach gesunder Menschenverstand.

+1. Ich denke, das OP versucht, das falsche Problem zu lösen - es ist ziemlich klar, dass weder innerhalb der Entwickler noch zwischen ihnen und dem Management eine Kommunikation stattfindet. Ein Manager sollte immer in der Lage sein, jemanden zu bitten, einen Entwickler im Urlaub abzuholen; Daher müssen sie den Wissensaustausch organisieren (und gegebenenfalls durchsetzen).
Ich stimme euch beiden zu. Die erwarteten Praktiken sind gut und sie versuchen, Sie dazu zu drängen, diese Methoden zu verwenden, jetzt muss der Bewusstseinswandel stattfinden. Das Team muss einen Weg finden, dieses Wissen zu teilen, indem es Code-Reviews, Design-Reviews, Pair-Programming und allgemein - miteinander spricht
@SigalShaharabani Wahrscheinlich wichtiger als " Das Team muss ... " ist " Das Management muss dem Team erlauben , ... " und zu akzeptieren, dass die Produktivität währenddessen erheblich beeinträchtigt wird.
@TripHound Nun ... nicht wirklich. Dem Management ist es egal und es wird sich auch nie darum kümmern, das ist einfach so. Die Entwicklung liegt in der Verantwortung der Entwickler – es ist ihr Tagesgeschäft. Das Wichtigste ist, dass Sie weiterhin liefern, während Sie diese Änderungen vornehmen – lernen Sie von den Erfahrungen von Unternehmen wie Netscape/Mozilla. Und behandeln Sie "Code Reviews, Pair Programming ..." in keiner Weise getrennt von der Entwicklung. Wenn die Tests nicht grün sind, ist der Code nicht bereit. Wenn der Build nicht ausgeführt wird, ist der Code nicht bereit. Wenn der Code nicht überprüft wurde, ist er nicht bereit. Es wird dein Leben viel einfacher machen :)
@TripeHound Nicht nur erlauben, sondern das Teilen fördern und erleichtern - es hört sich so an, als würden die Programmierer bei dieser Aufgabe im Moment alle einfach das tun, was sie für richtig halten, und sich nicht gegenseitig um Rat fragen oder sich austauschen nicht, weil sie der Meinung sind, dass dies ihre Produktivität nicht verbessern würde, sondern weil sie nur für Endergebnisse belohnt werden. Die Programmierer können aufsteigen und mehr tun, wenn sie dazu neigen, aber es ist die Aufgabe des Managements, diese Art von Verhalten zu fördern.
@Zibbobz (und @Luaan) Es ist beides: Die Entwickler müssen eine Änderung vornehmen wollen, idealerweise geführt von jemandem, der weiß, wie man diese Änderung vornimmt (nicht dasselbe wie jemand, der das Ziel kennt); Das Management muss diese Änderung fördern und sich bewusst sein/akzeptieren, dass während einer solchen Änderung die Produktivität wahrscheinlich sinken wird.
Führt jemand tatsächlich Paarprogramme durch oder verwenden wir das nur als Beispiel für eine bewährte Vorgehensweise?
@djechlin mache ich manchmal. Meistens, wenn Absolventen/Junioren meinem Team beitreten, um sie auf den neuesten Stand zu bringen, ihnen bewährte Verfahren beizubringen und ihr fundiertes Wissen weiterzugeben.
@djechlin Ja, ich arbeite derzeit in einem sehr agilen Team, in dem wir Programme paaren und regelmäßige Code-Reviews durchführen. Es verbessert wirklich die Qualität und mehr Wissensaustausch. Aber man braucht ein Team UND ein Management, das das zulässt und fördert.
Kollektives Eigentum ist eine gute Sache, aber wenn der Code alles andere als trivial ist, wird es eine Weile dauern, ihn in den Kopf zu laden. Wenn wir es mit Architektur zu tun haben, kann es vielleicht ein oder zwei Tage dauern, bis man es wirklich versteht.
@superluminary, weshalb es sinnvoll ist, Dinge in gut dimensionierte Subsysteme aufzuteilen und Einzelpersonen an jedem Subsystem arbeiten zu lassen ... einzeln. Jedes Subsystem wird wahrscheinlich nicht anders sein, Männer sind vom Mars und Frauen sind von der Venus. Code-Reviews / Architektur-Reviews sollten sicherstellen, dass niemand seine eigenen speziellen Schneeflocken-Inseln des Schmerzes baut.
@ChrisMarisic - Sie werden nicht feststellen, dass ich dem widerspreche. Es ist immer noch viel Kommunikation erforderlich, um die Informationen darüber weiterzugeben, was in diesem Subsystem abgeschlossen wurde und was nicht. Welche Ausnahmen kann es werfen? Wie gehen wir mit Fehlerzuständen um? Was ist, wenn das Netzwerk während eines Updates ausfällt? Welche Tests werden geschrieben? Welche Tests müssen geschrieben werden? Kommunikation ist ein wesentlicher Bestandteil eines agilen Teams, scheint hier aber zu fehlen.
@superluminary Einige Leute, die viel klüger sind als ich, haben die Antworten auf diese Fragen als den Reifegrad einer Organisation beschrieben. Klare und definierte Antworten auf diese Fragen zu haben, zeigt ein Engagement für Details und Dokumentation, es sind wirklich wichtige Informationen im Gegensatz zu mehr als der Hälfte der "Dokumente", die aus einem Softwareprojekt herausfallen.

Ich denke, das Problem liegt bei Ihnen und nicht bei Ihren Vorgesetzten.

Unterschiedliche Menschen haben unterschiedliche Vorgehensweisen

Damit müssen Sie sofort aufhören, Coding-Standards setzen, anfangen, mit Designs zu arbeiten und austauschbar zu werden.

Wenn einer meiner Kollegen in den Urlaub fährt, erhalten wir ein Dokument darüber, woran er arbeitet, was dieser Fortschritt ist und welche ausstehenden Probleme es gibt und was am wichtigsten ist, wo sich die Dokumentation befindet.

Ich denke, der Kern des Problems besteht darin, dass Sie anfangen sollten, mehr als Team zu arbeiten.

Und wenn Sie es als Kollegen nicht schaffen, ist es die Aufgabe des Managements, dafür zu sorgen, sie werden dafür bezahlt.

Wie ist das ein Problem mit OP und nicht mit den Managern? OP sollte in der Lage sein, verschiedene Codierungsstandards zu übernehmen, aber sollte er den Standards folgen, die Bob verwendet, oder denen, die Bill verwendet?
@Taemyr Bob und Bill und das OP sollten zusammenkommen und sich auf Codierungsstandards einigen. Die Aufgabe der Manager besteht darin, diesen Prozess durchzuführen, wenn Bob, Bill und das OP dies nicht können.
+1 für "Codierungsstandards festlegen, mit der Arbeit an Designs beginnen". Das gemeinsame Eigentum am Code ist ein Standard. Es ist nur ein Problem, wenn die Programmierer "unterschiedliche Sprachen" sprechen
„Ich denke, der Kern des Problems ist, dass Sie anfangen sollten, mehr als Team zu arbeiten.“ => Wir brauchen WIRKLICH einen "+100"-Button für einzelne Sätze in diesem Forum.
Ich habe noch nie in einem Team gearbeitet, das ich nicht geleitet habe, in dem sich außer mir jeder auch nur ein bisschen ums Programmieren gekümmert hat. Wie schlagen Sie vor, dass das OP alle dazu bringt, sich auf Programmierstandards zu einigen und diese zu befolgen, vorausgesetzt, er / sie ist nicht Teamleiter?
@AmyBlankenship Deshalb habe ich gesagt, es ist ein Management-Job. Eine Sache, die ich mir für Programmierer wünschen würde, ist, dass sie ein oder zwei Kurse in Wirtschaftswissenschaften belegen würden. Die Kommunikation mit dem Management wird dadurch erheblich erleichtert. Was Sie tun müssen, ist in der Lage zu sein, dem Management (in ihrer Sprache, ohne emotional zu werden) zu erklären, wie viel es kostet, wenn jeder sein eigenes Ding macht.
Wo in Ihrer Antwort sagen Sie, dass es eine Managementaufgabe ist, die Programmierer dazu zu bringen, Codierungsstandards festzulegen, mit Designs zu arbeiten und austauschbar zu werden? Vielleicht sollten Sie es bearbeiten, um das hervorzuheben.
@AmyBlankenship Der letzte Teil meines Beitrags lautete: „Jetzt gibt es eine Aufgabe, die Ihr Management erledigen sollte.“ So war es gemeint, ich habe den Beitrag editiert und präzisiert. Und damit meine ich nicht, dass das Management Coding-Standards festlegen sollte, sondern ein Team dazu bringen sollte, als Team zu arbeiten.
Sie sagten: "Wir bekommen ein Dokument ... (sagen) wo die Dokumentation ist." LOL. Was ist, wenn sie es nicht finden können?
IME, Sie werden ohne starke Unterstützung des Managements nicht in der Lage sein, von den anderen Programmierern Unterstützung zu erhalten, um Standards usw. festzulegen. Eine Person, die kein Teamleiter ist, wird Ihre Antwort nicht umsetzen können. Ich habe das Gefühl, dass Ihr Team die Dinge, die Sie beschrieben haben, bereits getan hat, als Sie beigetreten sind, und Sie haben noch kein Team gesehen, bei dem es noch nicht fertig oder daran beteiligt war, es einzurichten.
Als ich las, dachte ich zuerst, das OP würde sagen, dass die Leute verschiedene Programmiersprachen verwenden, weshalb es so chaotisch wirkte. Aber jetzt, wo ich denke, dass es eine Frage des Programmierstils ist, geht es wirklich darum, dass Entwickler zusammenkommen, Wissen austauschen und Best Practices etablieren. Ich stimme dieser Antwort zu.
¨I think the heart of the problem is that you should start working more as a team."Sehen Sie, das ist ein Managementproblem. Der Kern dieses Problems ist, dass dies, wenn alles wie beschrieben ist, genauso gut eines dieser Unternehmen sein könnte, die Manager loswerden, weil diese Leute ihren Job nicht machen.
Es ist Aufgabe des CTO, Coding-Standards festzulegen, und Sie brauchen Code-Reviews und Pair-Programming, um sie im Unternehmen zu verbreiten. Es ist nicht die Schuld der Entwickler, wenn solche Dinge nicht eingerichtet wurden.
@superluminary CTO kümmert sich wahrscheinlich nicht um Codierungsstandards, viel zu klein im Detail. Wenn es sich um ein kleines Unternehmen mit nur ein paar Entwicklerteams handelt, könnte dies Sache des CTO sein. In der Regel liegt es an der Person, die für mehrere Entwicklerteams verantwortlich ist. Die nächstgrößere Generation kann sich nicht um diese geringe Detailgenauigkeit kümmern, sie wird sich um die unternehmensweite Interoperabilität kümmern, nicht um einzelne Codezeilen.
Ein guter Softwareentwickler bringt Lösungen ins Team und füllt Lücken in Managementmethoden. Der OP-Entwickler füllt nicht die Rolle eines professionellen Experten auf seinem Gebiet aus. Stattdessen beschuldigt er das Management, seine Grenzen nicht zu kennen. ... er derjenige ist, der die Team- und Softwarebeschränkungen erkennen und erkennen sollte, dass er die Ziele des Managements nicht erfüllt, und mit anderen Fachleuten zusammenarbeiten sollte, um sowohl realistische Erwartungen als auch technische Entwicklungsziele zu setzen, um das Team und das Management an den gleichen Ort zu bringen .

Kollektives Eigentum an Code, bei dem jeder Programmierer an jedem Teil der Software gleich gut arbeiten kann, ist ein Ideal , das angestrebt werden sollte (weil die Vorteile real sind), aber harte Arbeit erfordert, um es zu erreichen.

Das Team muss einen Programmierstil durchsetzen, damit der Code für alle sofort erkennbar ist. Das Team muss strenge Code-Reviews durchführen, damit das Wissen über einen Teil des Codes geteilt wird, sobald er geschrieben ist, und der gemeinsame Qualitätsstandard sichergestellt ist. Sie müssen eine „Definition of Done“ verwenden, die sicherstellt, dass nichts als „Done“ bezeichnet wird, bis es dokumentiert, getestet und überprüft wurde. Neue Teammitglieder brauchen Zeit und Training, um sich mit allen verwendeten Technologien vertraut zu machen.

Wenn die Manager die Ergebnisse eines solchen Prozesses verlangen, ohne vorher in dessen Umsetzung zu investieren, handeln sie unrealistisch.

Ich denke, Sie sollten mit Ihren Kollegen besprechen, welche Art von Änderungen Sie an Ihrem Workflow vornehmen möchten, um dies besser zu ermöglichen, wie z. B. mit Code-Reviews oder Pair-Programming zu beginnen oder sich auf einen gemeinsamen Codierungsstil zu einigen.

Gehen Sie dann zu Ihren Vorgesetzten und sagen Sie so etwas wie

Ich weiß, Sie möchten, dass alle Programmierer austauschbar sind, damit wir alle an allen auftretenden Problemen arbeiten können. Allerdings sind wir noch nicht so weit – wir alle kennen uns eigentlich nur mit einem Teil der Codebasis aus, und es ist schwierig, sich an die Arbeitsweise anderer anzupassen. Wir halten es jedoch für eine gute Idee und schlagen vor, X und Y zu implementieren, um auf dieses Ziel hinzuarbeiten.

Ich denke, diese Antwort würde verbessert, indem Schritte für das OP aufgelistet würden, um die Art von Buy-In zu erhalten, die für diesen letzten Absatz erforderlich ist. Normalerweise kümmert sich bei IME ein Programmierer um diese Art von Problemen und der Rest möchte nicht, dass jemand anderes ihnen sagt, wie man codiert.
@AmyBlankenship: Ich stimme der Sorge eines Programmierers zu, aber ich kann diesem Problem keine Antwort hinzufügen (da ich als Programmierer im Team noch nicht herausgefunden habe, wie das geht ...) und ich denke, es würde zu weit über die gestellte Frage hinausgehen. Wie auch immer, er muss das Management überzeugen, die Dinge können sich ändern, wenn das Management beginnt, auf Veränderungen zu drängen. Als nur ein Teammitglied mit einem Management, dem es meiner Erfahrung nach egal ist, kann man nicht genug tun.
Das Argument "Stil des Codes" ist übertrieben. Ein gemeinsamer Stil kann einige Teamprobleme lösen, aber er löst nicht das zugrunde liegende Problem. Ein Styleguide ist hilfreich, weil Entwickler Code-Analphabeten sind. Die Entwickler müssen das Lesen von anderem Code üben, um sich kundig zu machen. ...Eine Person, die nur ihre eigenen englischen Artikel lesen kann, ist kein Englischkundiger, und ein Entwickler, der den Code anderer Entwickler nicht lesen kann, ist ebenso ein Analphabet. ...Wenn Sie dies tun, seien Sie nicht sauer, laden Sie stattdessen ein großes OpenSource-Projekt herunter und schreiben Sie es monatlich für 4-6 Monate neu. Sie werden erstaunt sein, wie einfach das Lesen von Code wird.
@Nathaniel: Ich denke an meinen geschätzten Kollegen, der Funktionen von über 800 Zeilen schreibt, die ich unlesbar finde und die er als Geschmackssache ansieht. Er versteht meinen Unterricht mit vielen kleinen Methoden nicht. Natürlich können unsere Code-Lesefähigkeiten immer verbessert werden, aber ich würde es vorziehen, eine Art Vereinbarung darüber zu haben. Natürlich würde die Betonung von Tests auch das lösen (er ist nicht in der Lage, seine Funktionen zu testen).
Wenn jemand Methoden verwendet, um die prozedurale Programmierung in einer OO-Sprache zu üben, sollten sie korrigiert werden. Es gibt jede Menge Dokumentation für jede Sprache, die die richtige Verwendung von Methoden zeigt. Eine Methode sollte nur Arbeiten ausführen, die durch den Namen der Methode beschrieben werden. Wenn sie beispielsweise ihre Methode „DoAllTasksAssociatedWithTheCreationOfANewUserAndUserProfile“ nennen, dann ist sie möglicherweise groß, aber Sie sollten sie genauso nutzen können. Sie könnten darauf hinweisen, dass es zwei Bedenken hat. Auf der anderen Seite, wenn es nur SaveUser sagt und es viele andere Dinge tut, müssen sie sich fügen.

Mir scheint, dass die Entwickler und die Manager auf dem Spektrum von individueller Code-Ownership bis hin zu gemeinsamer Verantwortung extreme Gegensätze eingenommen haben.

Die Entwickler könnten mehr tun, um sich dem Ideal der Manager anzunähern:

  • Codierungsstandards. Es sollte kein Chaos sein, weil verschiedene Menschen unterschiedliche Vorgehensweisen haben.
  • Ziehen Sie Paarprogrammierung in Betracht. Auf diese Weise verstehen mindestens zwei Personen jede Änderung.
  • Gewöhnen Sie sich an, nach Ursachen zu suchen und nicht Patches auf Patches anzuwenden. Ich denke, die meisten erfahrenen Programmierer mussten Fehler in Code aufspüren, den sie nicht geschrieben haben. Es braucht Zeit und Mühe, es richtig zu machen.
  • Dokumentieren, überprüfen, dokumentieren, überprüfen.... Das Design, an dem die Person einen Monat lang gearbeitet hatte, sollte von mehreren Personen geschrieben und verstanden worden sein.

Sie werden vielleicht nicht ganz die extreme Flexibilität erreichen können, die Manager wünschen, aber Sie sollten in der Lage sein, weit darüber hinauszugehen, dass es nur eine Person gibt, die an jedem Codestück arbeiten kann. Vielleicht müssen Sie ihnen manchmal sagen, „Joe oder Nancy könnten das schneller machen“, und sie entscheiden lassen, ob sie die Kosten für die Abholung durch jemand anderen übernehmen.

In allen Punkten einverstanden, außer dass ich viel lieber gute Namen ( httpResponseDatastatt datazum Beispiel ) und Tests (funktionierend und einfach) als Dokumentation sehen würde. Letzteres ist subjektiv und garantiert unvollständig (sonst wäre es Code).
@ l0b0 Ich stimme dir in Bezug auf Code zu. Ich bitte um Abweichungen in Dingen wie den erforderlichen speziellen Setups, speziellen Tools, Unterschieden zwischen Inhouse und Standards und anderen Dingen, die durch Lesen des Codes und typisches Stammeswissen schwer zu erkennen sind.
@l0b0 Code ist viel schwieriger zu lesen, wenn Schnittstellen nicht gründlich dokumentiert sind. Ich musste manchmal mehrere Ebenen tief tauchen, nur um eine einfache Frage wie „Darf dieser Zeiger null sein?“ zu beantworten.

Kurze Antwort: Weisen Sie darauf hin, wie lächerlich es ist.

Ich bin tatsächlich schon einmal darauf gestoßen und habe einfach so etwas gesagt wie:

Würden Sie zu einem Podologen gehen, wenn Sie eine Gehirnoperation benötigen? Sie sind beide Ärzte, oder?!

Oder

Gehst du zum Schneider, um dir die Haare schneiden zu lassen, weil Schneider wie Friseure Scheren benutzen?

Weisen Sie dann darauf hin, dass mit jeder Spezialisierung sehr unterschiedliche Fähigkeiten verbunden sind. Sagen Sie ihnen, dass die Programmierung dasselbe ist. Einige Entwickler sind in einem Bereich hochqualifiziert, in einem anderen jedoch völlig ahnungslos.

Das heißt nicht, dass Sie die anderen Fähigkeiten nicht erlernen könnten, aber es würde Zeit und die Bereitschaft erfordern, es zu wollen.

Das Crossover von Fähigkeiten kann wirklich großartig für die Geschäftskontinuität sein. In meinem Büro bin ich der einzige .net-Entwickler und wir haben eine Menge C# im Umlauf. Wenn ich von einem Bus angefahren werde, werden sie bestraft.
@Gusdor Siehe meinen Kommentar oben. Niemand bestreitet die Notwendigkeit von Ressourcenredundanz und Wissensaustausch. Sie übergeben die Schlüssel zu einem System jedoch nicht an jemanden, der nicht über die entsprechenden Fähigkeiten oder Erfahrungen verfügt.
Ich denke nicht, dass diese Antwort hier zutrifft, da das OP keine anderen Fähigkeiten erwähnt. Es geht um Code-Eigentum.
Es ist nett, wenn jemand anderes darauf hinweist, dass es lächerlich ist. Ich leitete den Verkäufer eines 1000000-Dollar-Industriekessels. Wir hatten einen großen Streit mit ihnen über die Steuerungsphilosophie, was dazu führte, dass das BMS (Brenner-Management-System) vor Ort neu programmiert wurde. Als die überarbeiteten Dokumente durch die Standort-Instrumentierungs-Jungs kamen, baten sie den Büro-Typen, sie zu überprüfen. Seine 1. Frage: "Was ist ein BMS?" Er war erleichtert über meine Antwort an seinen Chef: Ich werde Pauls Unterschrift auf diesen Dokumenten nicht akzeptieren, da er weder an den hitzigen Diskussionen über die Steuerungsphilosophie noch an deren Implementierung im BMS vor Ort beteiligt war
@Chris Meine Antwort gilt immer noch, wenn von Ihnen erwartet wurde, dass Sie ein großes, komplexes System von einem anderen Team abholen, mit dem Sie keine Erfahrung hatten. Sie verstehen vielleicht die Entwicklungstools und die Sprache, aber Sie haben nicht unbedingt die Domänenkenntnisse oder wissen, wie das Team sie entworfen und implementiert hat. Ja, Dokumentation, aber wenn Sie die Aufgabe erhalten, das System eines anderen zu reparieren, weil es in der Produktion kaputt gegangen ist, wird selbst der erfahrenste Entwickler Zeit brauchen, um es aufzugreifen.
Wenn Sie zum Podologen gehen, aber er krank ist, erwarten Sie, dass der Ersatzpodologe Ihr Dossier holt und dort weitermacht, wo der andere aufgehört hat.
@PieterB Stimmt. Sie würden jedoch hoffen , dass sie ein Podologe sind!
@JaneS Nun, wenn Sie einen Shop mit C # -Entwicklern und PHP-Entwicklern haben, sollte das Management verstehen, dass dies keine austauschbaren Fähigkeiten sind, aber ich würde voll und ganz erwarten, dass die C # -Entwickler die Arbeit des anderen übernehmen.
@JaneS: Sie sind im selben Team.
@Chris Wenn sie im selben Team sind und kompatible Fähigkeiten haben, dann stimme ich Ihnen absolut zu und meine Antwort trifft nicht zu. Das OP impliziert jedoch, dass es (zumindest für mich) einen Unterschied in den Fähigkeiten gibt, weshalb ich so geantwortet habe, wie ich es getan habe.
Siehe oben, vergleiche Äpfel mit Äpfeln, nicht mit Bananen
Hängt auch vom Kontext ab, wenn ich da liege und einen Herzinfarkt habe, würde ich einen Proktologen nehmen, wenn er der einzige verfügbare Arzt wäre
Dieser Vorschlag scheint oberflächlich und sarkastisch zu sein und wird dem OP wahrscheinlich keine Gunst bei seinen/ihren Chefs einbringen. Es könnte konstruktiver sein, die Probleme konkret aufzuzeigen (z. B. mit Verweis auf Literatur zur Produktivität von Programmierern) und einige Verbesserungsvorschläge zu machen (z. B. vereinbarte gemeinsame Codierungsstandards).
Ich stimme zu, dass es etwas lächerlich ist. Es braucht Zeit, um sogar den eigenen Code wieder zu verstehen, nachdem man ihn eine Weile nicht gesehen hat, also würde es sicherlich Zeit brauchen, den eines anderen zu verstehen. Und man kann sich nur so viel in den Kopf packen: Das Lernen der Sachen anderer Leute wird nicht lange haften bleiben. Es gibt eine praktische Grenze für die gemeinsame Verantwortung für Code.
@PieterB "Sie erwarten, dass der Ersatzpodologe Ihr Dossier bekommt und dort weitermacht, wo der andere aufgehört hat." Ich möchte leben, wo immer du bist. Meine Erfahrung mit Ärzten jeglicher Überzeugung ist, dass es schwierig genug ist, denselben Arzt dazu zu bringen, dort weiterzumachen, wo er aufgehört hat.
"Mangelnde Bereitschaft" sollte in der Regel zu "Mangelnde Arbeit" führen

Sie schrieben,

Niemand besitzt etwas, und niemand ist für irgendetwas verantwortlich. Oder anders gesagt: Jeder besitzt alles und jeder ist für alles verantwortlich

Das sind zwei Extreme (vielleicht sollten Sie nach einem Mittelweg zwischen den beiden Extremen suchen) und eine falsche Dichotomie.

Ist das für Softwareunternehmen üblich?

Je nach Anzahl der Programmierer gibt es verschiedene Möglichkeiten.

Eine besteht darin, jeder Komponente ein Team (aus mehreren) zuzuweisen. Erwarten Sie, dass jeder im Team (falls erforderlich) für (alles innerhalb) der gesamten Komponente verantwortlich ist. Ein Team kann einen einzigen Chefentwickler oder Teamleiter haben oder nicht, der auch der offizielle Kontaktpunkt des Teams zur Außenwelt (Management und QA) sein kann oder nicht.

Ein Minimum, das ich empfehle, sind Code-Reviews. Jede Person ist für ihre eigene Entwicklung verantwortlich und braucht Tage, um ein neues Feature zu programmieren, und dann verbringen eine oder mehrere andere Personen Stunden damit, zu überprüfen, was fertiggestellt und getestet und eingecheckt wurde. Der/die Code-Reviewer kann Änderungen vorschlagen und kann vernünftigerweise (vom Management) erwartet werden, dass sie verstanden haben, was sie überprüft haben. Zum Beispiel könnte ein Bewertungskommentar (bevor sie die Änderung akzeptieren oder „abmelden“) lauten: „Ich verstehe das nicht, Sie sollten es besser ein wenig überarbeiten und/oder besser erklären“ oder „Was bedeutet das? tun, was ist die Funktion (z. B. sichtbar in der funktionalen Spezifikation), die es implementiert, wo ist der automatisierte funktionale Regressionstest, der dies testet").

Nachdem (falls) sie eine Änderung absegnen, ist es vernünftig, dass ein Manager vorbeikommt und sagt: „Sehen Sie, Bob ist im Urlaub und/oder hat das Unternehmen verlassen; wir glauben, dass es ein Problem mit diesem Modul gibt, das Sie überprüft haben, und/oder wir möchte ein neues Feature hinzufügen. Könnten Sie sich das ansehen? Sie kennen es bereits (ganz zu schweigen davon, dass Sie dafür verantwortlich sind), da Sie Code-Reviews durchgeführt haben, als es implementiert wurde.

Codeüberprüfungen haben viele Zwecke, einschließlich:

  • Cross-Training, was Komponenten tun und wie sie implementiert werden
  • Gewährleistung gemeinsamer/konsistenter Standards (der Kodierung, Dokumentation und/oder Prüfung)
  • Qualitätskontrolle (d. h. „White-Box“-Tests, Suche nach potenziellen Fehlern)
+1 für Ihre Aufschlüsselung des Codeüberprüfungsprozesses, anstatt nur „Codeüberprüfungen durchführen“ zu sagen.
Einverstanden. Das Gleichgewicht in Agile besteht darin, dass Entwickler Fachgebiete und Verantwortungsbereiche haben sollten, die sich jedoch organisch bilden sollten. Bei Agile Ownership handelt es sich nicht um eine sichere militärische Einrichtung, in der niemand ein- oder ausgeht. Es ist ein gemeinsam genutzter Raum wie ein Park, und der Parkwächter ist dafür verantwortlich, seine Zerstörung zu verhindern und mit Freiwilligen zusammenzuarbeiten, um den Raum für alle zu verbessern.
@Nathaniel Verwendet "agil" Teams und/oder Teamleiter, die Komponenten zugewiesen sind? Ich hatte zum Beispiel einmal einen Job, bei dem ich der dienstälteste und "Chefentwickler" mit (schließlich) 20 oder 30 anderen Entwicklern war: andere Leute haben ihre Sachen gemacht ( ihnen wurde die Verantwortung für die Entwicklung bestimmter Komponenten übertragen), aber ich erwartete zur Not (z wenn sie kündigen), um die Wartung ihres Codes übernehmen oder neu beauftragen zu können.
20-30 Entwickler sind zu groß für ein agiles Team. Wenn ein Team so groß wird, läuft im Allgemeinen etwas Ernstes falsch. Siehe schwacher Codebesitz: martinfowler.com/bliki/CodeOwnership.html

Einmal hatte sich ein Typ mehr als einen Monat lang auf ein neues Modul vorbereitet, nahm dann Urlaub und kurz bevor er ging, sagte er unserem Chef, dass alle Probleme gelöst seien und es bereit sei, mit dem Programmieren zu beginnen. Also am nächsten Tag Scrum, sagte mein Chef zu mir, wir müssen das nächste Woche erledigen, kannst du es bitte abholen?

Da haben Sie einen Manager, der sein Gehirn fallen gelassen hat.

Ja, für jeden Entwickler sollte es mindestens einen anderen geben, mit dem er bei jeder einzelnen Aufgabe (einschließlich des Ausarbeitens des Designs für ein neues Modul) eng zusammenarbeitet (Pair-Programming und dergleichen), der daher in der Lage sein sollte, ohne unangemessenes Recht zu übernehmen jederzeit nacharbeiten.

Aber das ist nicht dasselbe wie zu sagen, dass es keinen Overhead gibt, mitten im Flug zu wechseln:
Es sollte ungefähr der gleiche Overhead sein, oder idealerweise etwas weniger, als ob der ursprüngliche Entwickler diese Aufgabe fallen gelassen hätte, ohne lose Enden zu binden, um einen Notfall zu bewältigen, und dann musste nach einer Woche Arbeit an etwas anderem wieder hochfahren.

Wenn Sie nicht derjenige sind, mit dem er an dieser Aufgabe gearbeitet hat, haben Sie nur seine Notizen, und so gut sie auch sind (was wahrscheinlich nicht herausragend ist oder wenn Sie Ihre Beschreibung eher als sehr lückenhaft bis nicht existent betrachten), sie sind einfach kann nicht alle Details umfassen, die Ihr Kollege in diesem Monat ausgearbeitet hat.

Es ist, als würde man ins Krankenhaus gehen und sich die Zeit nehmen, dass ein Arzt Ihren Zustand über einen Monat lang mit wiederholten Untersuchungen, Blutproben, EKG, Röntgenaufnahmen und allem, was sonst nützlich erscheint, sorgfältig beurteilt und dann sofort zum Chirurgen geht, um Sie zu behandeln, niemals Lassen Sie die beiden etwas Nützliches kommunizieren.


Wenn Sie nicht derjenige sind, mit dem er zusammengearbeitet hat, sollten Sie darauf hinweisen, welcher Kollege es getan hat, und warnen Sie auch, dass , obwohl es ihm viel leichter fallen würde, zu übernehmen als Sie, es immer noch erhebliche Kosten gibt, da er es war. nicht derjenige, der die Zubereitung selbst durchführt .

Wenn sonst niemand mit diesem Präparat vertraut ist, sollten Sie erwähnen, dass es hätte geben müssen und (je nachdem, wie die Forschung dokumentiert wurde), dass Sie möglicherweise zwischen x% (Ihre beste Schätzung hinsichtlich der Dokumentation und was Sie gehört haben) bis hin zur vollen Zeit, bei Null anzufangen.


Am Ende scheint es ein Managementfehler zu sein:
Der Teamleiter muss sich mit den anderen Entwicklern zusammensetzen und einen Codierungsstandard erarbeiten, sowie anfangen, tatsächlich Pair-Programming, Unit-Tests und Code-Reviews durchzuführen und alle anderen Aktivitäten zur Qualitätssicherung und Wissensverbreitung im Team.

Ist es üblich? Nicht sehr viel. Aber es kann so eingerichtet werden, dass es funktioniert.

Die Idee dahinter ist, Menschen als Single Points of Failure zu vermeiden . Natürlich ist es mit Kosten verbunden, und die Programmierer tragen die Kosten. Deshalb wird es schwierig sein, Ihren Chef davon zu überzeugen, dass es eine schlechte Idee ist. Er hat alle Vorteile und du alle Nachteile. Trotzdem macht es Sinn.

Es ist sinnvoll, Zeit mit anderen Programmierern zu verbringen, um Wissen und Praxis auszutauschen. Dies kann durch Überprüfungen, Paarprogrammierung oder alles andere geschehen, was für Sie funktioniert. Ich war in einem 22-köpfigen Team, in dem ein Berater (seit Jahren dort) die meiste Zeit damit verbrachte, in den Korridoren herumzulaufen, anstatt zu programmieren. Er war der Kitt des Teams, und mindestens 15 Leute im Team konnten an den Programmen arbeiten, die ich machte. Es kann alles andere sein, was dem Bedarf entspricht, informelle Gespräche, Wissensaustausch an der Kaffeemaschine.....

Aber es hat seinen Preis. Lohnt sich IMHO zu zahlen, aber wenn alle an der gleichen Technik arbeiten, soll es nicht zu teuer werden. Die Kosten sind ein hoher Kommunikationsaufwand. Das sollten Sie eher Ihrem Chef mitteilen, da seine Idee an sich nicht schlecht ist. Er muss nur verstehen, dass es sich um eine Investition mit nicht unmittelbaren Belohnungen handelt.

Die Begründung dafür ist, dass, wenn jeder für alles zuständig ist, wenn jemand Urlaub nimmt, andere einfach einspringen können/sollten und ihn/sie decken, damit er/sie jederzeit Urlaub machen kann/sollte.

Ich kenne ein Unternehmen ( Menlo Innovations ), das „jeden“ nach einem festgelegten Zeitplan um „jedes“ Projekt rotieren lässt. Es gibt einen Weg, damit es funktioniert.

Das Management hat sich dies als Ziel gesetzt, hat sich jedoch vollständig der Verantwortung entzogen, das Notwendige zu tun, damit es funktioniert. Es müssen mehr Leute eingestellt werden, zusammen mit längeren Lieferzeiten. Sie können dies rechtfertigen, indem sie langfristige Ergebnisse demonstrieren und nicht von einem Guru als Geisel gehalten werden, der glaubt, er sei die einzige Person auf dem Planeten, die in der Lage ist, sein spezielles Projekt zu programmieren.

Das eigentliche Problem dabei ist, zu versuchen, eine Praxis isoliert zu implementieren. Sie sollten komplementäre Praktiken wie Teamentwicklung, Tests, umfangreichere Dokumentation, tägliche Meetings zum Teilen und um alle auf dem Laufenden zu halten, was andere tun, in Erwägung ziehen.

Aus irgendeinem Grund ist der editLink deaktiviert. Das Unternehmen ist Menlo Innovations und die URL ist menloinnovations.com
@Dancrumb - Ich habe die Schreibweise von Innovationen korrigiert. Die URL war korrekt.
Ich muss darauf hinweisen, dass nur sehr wenige Organisationen jemals tägliche Meetings benötigen. Sicher mehrere pro Woche. Aber was ist aus dem Standup am Freitag und dem am Montagmorgen passiert? bupkis. (es sei denn, Sie planen Aufgaben auf stündlicher Ebene, Sie hätten mein Mitgefühl)
@ChrisMarisic – Also bei einem Stand-Up-Meeting am Montagmorgen wirst du am Freitag sagen, ich habe nichts getan, sonst hat sich nichts geändert, also werde ich heute einfach das tun, was ich gesagt habe, dass ich am Freitag tun werde?
@JeffO Zum größten Teil jedes einzelne Standup-Meeting, an dem ich teilgenommen habe, lautete so ziemlich „Ich arbeite an dem, was ich heute gesagt habe – vor X Tagen“ und vielleicht ein- oder zweimal pro Woche sagt eine Person „Fertig Y, weiter zu Z", das in jeder zugänglichen Statusanzeige (Kanban-Tafel, Rückstand usw.) sichtbar wäre. Die einzige andere Art von Standup-Meetings, an denen ich je teilgenommen habe, verwandelte sich einfach in vollständige Meetings, bei denen die Leute 30 bis 75 Minuten lang herumstanden und etwas besprachen, bei dem sich das halbe Team wahrscheinlich auf Minuten konzentrierte.
@ChrisMarisic - Hat niemand jemals ein Problem mit dem Gesamtdesign, einem bestimmten Framework oder etwas anderem? Sprechen Sie all dies in E-Mails oder anderen Gesprächen an? Diese Unterbrechungen sollten bis zur täglichen Sitzung verschoben werden. Ansonsten, wenn Ihr Projekt so reibungslos läuft, brauchen Sie kein tägliches Meeting.

Ich denke, das Folgende ist ein ausgewogener Abschluss, leider hört es jemand einfach nicht gerne. Ich habe wiederholt Aufforderungen erhalten, sie zu entfernen. In einer demokratischen Welt verdient jede Stimme gehört zu werden. Das hört man nicht gerne, aber mich zum Schweigen zu bringen ist eine andere Sache, die meiner Meinung nach nicht sehr gut ist. Also hier ist es wieder, mein Fazit, getötet von meiner OP.

Fazit

Ich denke, es ist an der Zeit, dass wir die Diskussion beenden und jetzt weitermachen. Nach sorgfältiger Prüfung habe ich die eine "konstruktive Antwort, die eine konstruktive Lösung vorschlägt" als Antwort ausgewählt. Aber tatsächlich sind alle Antworten sehr gut, ich wünschte, ich könnte mehr als eine als Antwort auswählen.

Aus den Antworten wurde mir klar, dass es sich um ein ziemlich kontroverses Thema handelt, das mir die Augen öffnet, weil ich vorher dachte, meine Chefs seien ahnungslos. Jetzt merke ich, dass ich vorher ahnungslos war.

Wie Patricia Shanahan sagte, „haben die Entwickler und die Manager extreme gegensätzliche Positionen auf dem Spektrum von individuellem Codebesitz bis hin zu gemeinsamer Verantwortung eingenommen“ , und ich kann deutlich sagen, welche Antworten/Kommentare von Managern stammen:

  • "Ein Manager sollte immer in der Lage sein, jemanden zu bitten, einen Entwickler im Urlaub abzuholen"
  • „Ich denke, der Kern des Problems ist, dass Sie anfangen sollten, mehr als Team zu arbeiten.“
  • "Was Sie tun müssen, ist, Ihren Vorgesetzten nicht einzubeziehen"
  • "Das Team muss einen Weg finden, dieses Wissen zu teilen, indem es Code-Reviews, Design-Reviews, Pair-Programming und allgemein - miteinander spricht"

Bevor Sie eine solche Schlussfolgerung ziehen, bedenken Sie bitte noch einmal die folgende Tatsache, dass dieser Typ es mehr als einen Monat lang vorbereitet hat, aber seine Erkenntnisse nie mit jemand anderem geteilt hat, und jetzt möchte mein PM, dass ich es ohne Vorkenntnisse aufnehme und fertigstelle innerhalb einer Woche . Und außerdem, dass wir für die Urlaubsantragstellung mindestens einen Monat brauchen, häufiger aber zwei oder drei Monate vor dem Urlaub. Daraus, glaube ich, würde jeder wissen, wo eigentlich das Problem liegt. Ich stimme TripeHound vollkommen zu,

Wahrscheinlich wichtiger als "Das Team muss ..." ist "Das Management muss dem Team erlauben ..." und zu akzeptieren, dass die Produktivität währenddessen erheblich beeinträchtigt wird.

Geben Sie es zu oder nicht, gazzz0x2z hat auf das eigentliche Problem hingewiesen: „Es ist mit Kosten verbunden, und die Programmierer zahlen die Kosten. Deshalb wird Ihr Chef schwer davon zu überzeugen sein, dass es eine schlechte Idee ist. Er hat alle Vorteile, und Sie alle Nachteile" , und ich persönlich stimme RemcoGerlich zu: "Wenn die Manager die Ergebnisse eines solchen Prozesses verlangen, ohne vorher in dessen Umsetzung zu investieren, sind sie unrealistisch" , denn schließlich, wie kein Komprende formuliert, "es braucht Zeit selbst den eigenen Code wieder verstehen, nachdem man ihn eine Weile nicht gesehen hat, also würde es sicherlich einige Zeit dauern, den eines anderen zu verstehen.Es gibt eine praktische Grenze für das Teilen der Verantwortung für Code" ,"Es wäre gut, wenn das gesamte Managementteam auch Jobs tauschen könnte" .

Ok, ich weiß, ich habe es zu weit getrieben, und die meisten Manager hier stimmen mir vielleicht nicht zu. Lassen Sie mich betonen, dass dies meine eigenen persönlichen Ansichten sind, und lassen Sie uns die Diskussion beenden und weitermachen. Das ist auch der Hauptgrund, warum ich die eine „konstruktive Antwort, die eine konstruktive Lösung vorschlägt“ als Antwort ausgewählt habe – Manager und Entwickler müssen einander besser verstehen, und meistens sind es die Manager, die die Entwickler besser verstehen müssen. Mit diesem Verständnis und der konstruktiven Lösung werden wir da sein, aber es wird nicht über Nacht passieren.

Ich bin in dieser Softwarefirma, und komischerweise habe ich bisher nur zwei Manager erlebt, aber diese beiden Manager sehen Programmierjobs nicht viel anders als Ziegelsteine ​​zu legen. Sie haben immer betont, ihr sollt jederzeit die Jobs des anderen übernehmen.

Das ist eine durch und durch lächerliche Vorstellung. Programmieren ist ein hochspezialisiertes Gebiet und verschiedene Aspekte des Programmierens erfordern sehr unterschiedliche Fähigkeiten. Das Beste, was Sie tun können, ist, sie darauf hinzuweisen. Während Analogien zu anderen Berufen treffend und passend sein können (Schneider, Haare schneiden usw.), glauben Ihre Chefs ihnen vielleicht nicht, also weisen Sie auf einige der massiven Unterschiede in der Programmierung hin, wie zum Beispiel, wie unterschiedlich das UI-Design von Leistungstests ist.

Aber ja, Sie sollten auf jeden Fall versuchen, diese Vorstellung von Ihren Managern zu zerstreuen, damit sie nicht ein sehr hartes Erwachen erleben, wenn sie herausfinden, wie falsch sie liegen.

Ich denke nicht, dass diese Antwort hier zutrifft, da das OP keine anderen Fähigkeiten erwähnt. Es geht um Code-Eigentum.
@Chris Hier gilt aber die allgemeine Aussage der Chefs. „Jobs programmieren, nicht viel anders als Steine ​​verlegen“ ist das Ziel.
Es ist nicht klar, ob die Manager es so angegeben haben, wahrscheinlich ist es ein Satz des OP.
"Verschiedene Aspekte der Programmierung erfordern sehr unterschiedliche Fähigkeiten" ist wahr, aber ein Entwickler, der (wenn auch nur in gewissem Maße) in den Jobs anderer Teammitglieder übergreifend qualifiziert ist, ist viel besser einzustellen als einer, der darauf besteht, nie den eigenen Fachbereich verlassen.
Der aktuelle Trend geht zu Full-Stack-Entwicklern, daher scheint zu erwarten, dass zumindest einige Entwickler mehrere Aspekte der Programmierung beherrschen werden
@Chris: Geht es wirklich nur um den Code-Besitz oder auch um die allgemeinen Kosten für das Wechseln zwischen Aufgaben?
@Deduplicator: Ja, nur Code-Besitz.

Sie können Programmierkonventionen, Tools, Ordner und Vorgehensweisen standardisieren. Aber Sie können es nicht mit dem Wissen über einige intrinsische Funktionen und die Funktionsweise einiger Codeteile gleichsetzen. Das gehört nur denen, die Stunden damit verbringen, darüber nachzudenken. Erklären Sie Ihren Chefs, dass es überhaupt keine Ziegelsteine ​​sind, ich musste mit so ignoranten Chefs umgehen, sie kommen aus der Baubranche und versuchen, die gleichen Standards in der Softwareindustrie anzuwenden, ich kann Ihnen nicht erklären, dass dies zu großen Katastrophen führt, gescheiterte Projekte und hohe Fluktuation wirklich guter Entwickler. Erkläre ihnen das. Jedes Stück hat seine eigene Arbeitsweise und ist spezifisch für die geschäftlichen Anforderungen. Zum Beispiel haben Sie einen "Ziegel", der einige Plus-Operationen ausführen kann, eine andere Minus- und Divisionsoperation, Eines Tages fragt ein Typ nach einem Ableitungs- oder Matrixfunktionskalkül. Kannst du einen solchen "Baustein" mit dem vorherigen vergleichen? Der Typ, der den neuen Matrizenkalkül programmiert hat, hat Zeit, sein Wissen zu teilen und gleichzeitig Zeit im Zeitplan zu bleiben? Ich glaube nicht.