Ist der individuelle Code-Besitz wichtig? [geschlossen]


48

Ich bin mit einigen Kollegen in einem Streit darüber, ob die Team-Inhaberschaft an der gesamten Codebasis besser ist als die individuelle Inhaberschaft an Komponenten davon.

Ich bin ein großer Befürworter, jedem Mitglied des Teams einen ungefähr gleichen Anteil der Codebasis zuzuweisen. Es lässt die Leute stolz auf ihre Kreation sein, gibt den Bug Screenern einen offensichtlichen ersten Platz, um eingehende Tickets zuzuweisen, und hilft, das "broken window syndrome" zu lindern.

Darüber hinaus konzentriert es das Wissen über bestimmte Funktionen auf ein (oder zwei) Teammitglieder, was die Behebung von Fehlern erheblich vereinfacht.

Vor allem entscheidet sie endgültig über wichtige Entscheidungen mit einer Person, die viel Einfluss hat, anstatt mit einem Ausschuss.

Ich befürworte nicht, dass eine Erlaubnis erforderlich ist, wenn jemand anderes Ihren Code ändern möchte. Vielleicht muss die Codeüberprüfung immer beim Besitzer sein, klar. Ich schlage auch nicht vor, Wissenssilos zu bauen: Es sollte nichts Exklusives an diesem Eigentum sein.

Aber als ich dies meinen Kollegen vorschlug, bekam ich eine Menge Rückschläge, sicherlich viel mehr als ich erwartet hatte.

Also frage ich die Community: Wie stehen Sie zur Zusammenarbeit mit einem Team auf einer großen Codebasis? Fehlt mir etwas daran, das kollektive Eigentum wachsam aufrechtzuerhalten?


Was ist "broken window syndrome"? Ich kenne den Begriff nicht.
Uman


1
"Es konzentriert auch das Wissen über bestimmte Funktionen auf ein (oder zwei) Teammitglieder" ... "Ich schlage auch nicht vor, Wissenssilos aufzubauen". Ist das nicht ein Widerspruch? Die Konzentration von Wissen auf ein oder zwei Mitglieder ist für mich die Definition eines Wissenssilos.
Sleske

Dies scheint einer anderen Frage , die sich einige Jahre später stellte , sehr ähnlich zu sein .
Eric King

Antworten:


46

Ich glaube, dass Team Ownership auf lange Sicht viel vorteilhafter ist.

Sie müssen sich nur die folgenden zwei Szenarien ansehen, um zu verstehen, warum die Konzentration von Wissen auf eine Mindestanzahl von Personen nicht optimal ist:

  • Teammitglied trifft unglücklichen Unfall
  • Teammitglied trifft bessere Beschäftigungsmöglichkeiten

Natürlich ist die Person / Personen , die bestimmte Abschnitte schreiben müssen mehr Wissen davon, aber geben Sie nicht in der Versuchung , sie die einzige zu machen Silo des Wissens. Silos geben Ihnen kurzfristige Gewinne durch langfristige Schmerzen.

Nur weil Sie keinen individuellen Besitz von Codeabschnitten haben, heißt das nicht, dass Sie nicht immer noch die Aspekte "Stolz auf Ihre Kreation" usw. haben. Ich glaube nicht, dass Teambesitz eine große Rolle spielt das persönliche Gefühl des Besitzes von geschriebenem Code mindern.


7
Aus einer OO-Perspektive werden beide Szenarien: "Teammitglied ist nicht in der Nähe von no mo '." Ist "bessere Beschäftigung" nicht nur eine Unterklasse von "unglücklichen Unfällen"?
Dan Rosenstark

4
@Yar: Ja, obwohl ich vermute, Sie könnten immer noch jemanden bitten, der "bessere Anstellung" gefunden hat, für mehr Geld zurückzukommen ... kein Geldbetrag wird ihn unter einem Bus zurückbringen :-)
Dean Harding

4
Ich ermutige die Entwickler in meiner Gruppe, sich mit dem ursprünglichen Autor in Verbindung zu setzen, damit Sie die schnellere Fehlerbehebung und eine gewisse Wissensverteilung erhalten.
Dietbuddha

17
Wissen Sie, dies ist eines der Dinge, die theoretisch so wunderbar sind, aber in der Praxis nur selten funktionieren. Es ist wegen der Tragödie der Commons. Wenn alles in der Verantwortung eines jeden liegt, dann liegt nichts in der Verantwortung eines jeden, weil alles in der Verantwortung eines anderen liegt. Psychologen nennen es "Social Loafing". Sie brauchen ein Gleichgewicht zwischen Eigenverantwortung und Teamverantwortung.
Jason Baker

4
Ich würde dagegen argumentieren, @Jason. In diesem Fall brauchen Sie bessere Mitarbeiter, kleinere Teams. Der Gruppenzwang sollte das in Schach halten können, solange das Team nicht aus Flocken besteht. Team Ownership bedeutet nicht, dass Sie keine individuelle Verantwortung tragen.
Dan McGrath

27

Letztendlich besitzt das Team den Code. Aus all den von Ihnen genannten Gründen haben wir einzelne Autoren für bestimmte Teile des Codes bestimmt. Jeder Autor trägt die Hauptverantwortung für seinen Teil des Codes und die Nebenverantwortung für die gesamte Codebasis.

Wenn ein Problem mit einem Teil der Codebasis auftritt, versuche ich, zu der Person zurückzukehren, die den Code ursprünglich für eine Fehlerbehebung geschrieben hat. Natürlich hindert nichts andere Teammitglieder daran, einen Fix anzuwenden. Von allen Teammitgliedern wird erwartet, dass sie mit dem Code aller anderen vertraut sind. Wir versuchen jedoch immer, zuerst eine Lösung vom ursprünglichen Autor zu erhalten. Immerhin haben sie den Code geschrieben; sie sind die vertrautesten damit.

Ich habe in Teamumgebungen gearbeitet, in denen die Leute nicht gezwungen waren, exzellenten Code zu schreiben, sondern nur durchschnittlichen Code, weil sie kein Gefühl für Eigenverantwortung hatten.


5
+1 Für den Punkt bezüglich einer besseren Codequalität aufgrund eines Gefühls der Eigenverantwortung. Das gibt es schon.
Orbling

+1 (+10, wenn ich könnte): Eigentum wirkt sich nicht nur auf die Codequalität aus, weil es ein Gefühl des Stolzes und damit eine stärkere Motivation vermittelt, sondern auch, weil es hilft, die Komplexität des Codes zu verwalten, wie im Aufsatz sehr gut erläutert "Ein Programm im Kopf behalten ", siehe paulgraham.com/head.html .
Giorgio

19

Ich stimme aus geschäftlicher Sicht zwar den Gründen zu, das Wissen über das Produkt zu verbreiten. Die Realität ist, dass ein Individuum, das sich auf ein bestimmtes Gebiet konzentriert, sich im Laufe der Zeit viel mehr mit diesem Gebiet auskennt.

Das zu ignorieren heißt, die Wissenschaft zu ignorieren. Das Gehirn ist leider nicht in der Lage, alles, was ihm begegnet, zurückzuhalten. Es erinnert an das, was zu einem bestimmten Zeitpunkt gültig und wertvoll ist, obwohl die Lagerfähigkeit mit der Zeit abnimmt.

Ich stimme Ihnen eher zu, dass der Besitz eines bestimmten Moduls oder Fachs in der größeren Codebasis im Allgemeinen zu besseren Ergebnissen führt. Würde jemand, der ohne Vorankündigung geht, den Erfolg behindern? Bestimmt. Es ist jedoch naiv und tut nichts, um den Code zu verbessern, vorzutäuschen, dass jeder im Team die gleichen Kenntnisse in Bezug auf die Codebasis haben sollte. Es wird versucht, den Code zu schützen. Der Schutz des Codes ist aus offensichtlichen Gründen die Aufgabe des Unternehmens. Die Anstrengungen, die ein Unternehmen unternehmen wird, um den Code zu schützen, können sich jedoch oft nachteilig auswirken.

Sie stellen nicht sicher, dass jeder Spieler in Ihrem Team Quarterback spielen kann, oder? Ich würde argumentieren, dass es in der gleichen Weise ist, sicherzustellen, dass ein Teammitglied einen Anteil an der Codebasis hat, als würde man versuchen, jeden Spieler in Ihrem Team dazu zu bringen, Quarterback auf einem zufriedenstellenden Niveau zu spielen ... das summiert sich nicht. Haben Sie Backups? Sicher, aber die Teammitglieder sollten eine Identität im Team haben. Zu glauben, dass alle gleich sind, verlangt nach Schmerzen einer anderen Art ...


5
Pro-Teams haben Backup-Quarterbacks
Steven A. Lowe

1
@Steven das habe ich schon gesagt; Aber danke, dass Sie es wiederholt haben ... "Haben Sie Backups? Sicher haben Sie das. Aber Teammitglieder sollten eine Identität im Team haben. Zu glauben, dass alle gleich sind, verlangt nach Schmerzen einer anderen Art."
Aaron McIver

NFL-Teams haben drei Quarterbacks, keine cross-trainierten Spieler. Sportanalogien funktionieren in der IT selten ;-)
Steven A. Lowe

3
@Steven Mir ist bewusst, wie die NFL funktioniert. Ich habe auch nicht gesagt, dass es keine Backups gibt, sondern es ist sinnlos, dieses Wissen über das gesamte Team zu verbreiten. Entwickler == Spieler. Wenn wir Titel wie quarterback == architect einführen wollen, können wir das, aber es läuft darauf hinaus, dass ein einziges Team versucht, ein einziges Ziel zu erreichen. Jede Woche passen 45 Spieler auf und von diesen 45 Spielern haben 6,6% Kenntnisse in der Bedienung der Quarterback-Position. Hört sich für mich ideal an; Im Gegensatz zu den meisten dieser Posten sollten 75% des Teams wissen, wie man die Quarterback-Position bedient.
Aaron McIver

10

Ich weiß nicht, dass der Besitz von individuellem Code eine gute Idee ist. Zumindest nicht in dem Sinne, dass die Leute sagen können "Das ist mein Code, und ich werde damit machen, was ich will". Vielleicht ist es besser zu sagen , dass Sie einzelne Code haben sollte managership : der Code durch das Team im Besitz sein sollte, aber es gibt eine bestimmte Person das Team delegiert Verantwortung und Autorität über sie.

Der Grund dafür ist, dass, wenn es in der Verantwortung aller liegt, niemand dafür verantwortlich ist.


+1 für "Der Grund dafür ist, dass niemand dafür verantwortlich ist, wenn es in der Verantwortung eines jeden liegt."
Karthik Sreenivasan

@KarthikSreenivasan: Genau, und dann werden einige dysfunktionale Teammitglieder anfangen (1) zufällige Änderungen am Code vorzunehmen, "weil das gesamte Team den Code besitzt" und (2) die von ihnen eingeführten Fehler nicht zu beheben ", da dies in der Verantwortung des gesamten Teams liegt repariere sie". Ich denke, die ideale Lösung zwischen Einzel- und Teambesitz.
Giorgio

8

Ich würde mich aus folgenden Gründen für Teambesitz gegenüber Einzelpersonen aussprechen:

  • Codekonsistenz über das gesamte Projekt
  • Fördert die Diskussion von Code, was immer zu besseren, überprüften Lösungen führt
  • Wenn ein Teammitglied krank (oder schlimmer) ist, unterliegt ein ganzer Codeabschnitt keinen Verzögerungen
  • Die Teammitglieder können an allen Teilen des Projekts arbeiten, wodurch die Codeüberprüfung in den Entwicklungsprozess integriert wird

6

Spezialisierung ist in Ordnung - für eine große Codebasis kann dies auf lange Sicht einiges an Zeit für die Kommunikation einsparen - Eigentümer sind es jedoch nicht.

Was ich meine, ist, dass die Einstellung sein sollte, dass das Team einen Fehler hat, und niemand sollte sagen, dass "oh, nur X diesen Code berühren kann, also ist es nicht mein Problem". Wenn Sie Teil des Teams sind, liegt es auch in Ihrer Verantwortung, Fehler in der gesamten Codebasis zu beheben, wenn Sie können, und dies ordnungsgemäß zu tun. Möglicherweise ist Person X die beste Wahl, aber es sollte von jedem erwartet werden, dass er dies tut, wenn er dies tun muss. Dies erfordert natürlich, dass der Code so geschrieben wird, dass die Teammitglieder mit ihm arbeiten können und dazu aufgefordert werden. Gnarly Code wird dies verhindern, also streben Sie nach kristallklarem, einfachem Code, da dies den meisten Entwicklern erlaubt, damit zu arbeiten. Möglicherweise möchten Sie mit Peer Review fortfahren, damit dies auch so bleibt.


5

Ich muss Ihnen widersprechen: Teambesitz an einer Codebasis ist eine viel bessere Option als Einzelbesitz.

Der offensichtliche Nachteil der Eigenverantwortung ist, dass es eine Weile dauern wird, bis jemand anderes diese Person adoptiert, wenn einem Mitarbeiter etwas passiert (entlassen wird, in Rente geht, krank wird usw.), es sei denn, er / sie hat wirklich sauberen Code geschrieben Code, vor allem, wenn sie auch ihren eigenen Code verwalten müssen.

Sie sind auch einfach zu viele Tools, die die Teamverantwortung erleichtern. Codeüberprüfungen, Quellcodeverwaltung - dies sind Dinge, die die Teambeteiligung in der gesamten Codebasis fördern. Wie ordnen Sie außerdem einen bestimmten Teil einer Codebasis nur einer Person zu? Sagen Sie nur, dass nur diese Person diese Datei ändern kann?

Schließlich denke ich, wenn ein Teil einer Codebasis kaputt geht, ist es zu einfach, die Person zu beschuldigen, die dafür verantwortlich war, und das verursacht einfach mehr Probleme.


5

Ich denke, Sie brauchen beides, weil es eine Spannung zwischen beiden Ansätzen gibt.

Wenn es für einen Code nur eine Person gibt, die daran arbeiten kann, ist das auf lange Sicht sehr schlecht für das Unternehmen, insbesondere, wenn es wächst, weil jeder Entwickler zu einer Schwachstelle wird. Andererseits ermöglicht der Besitz von individuellem Code (hoffentlich) eine schnellere Lieferzeit, da Entwickler diesen Ansatz (Anreiz) im Allgemeinen bevorzugen, weil der Entwickler den Code sehr gut kennt usw. Es gibt auch ein Zeitproblem: Es sollte möglich sein Entwickler für bestimmte Projekte neu zuzuteilen, je nach Geschäftsanforderungen, aber wenn Sie es täglich tun, ist das schrecklich (schon allein, weil Entwickler es hassen, aber auch, weil die Switch-Kosten einfach zu hoch sind und Sie die meiste Zeit damit verbringen nichts).

IMO, eine Rolle eines Managers ist es, ein gutes Gleichgewicht zwischen beiden zu finden. Die Überprüfung des Codes, die Kodierung von Standards und die Standardisierung einer Reihe von Tools sollten ebenfalls dazu beitragen, das Problem der Fehlerursache zu verringern. Schließlich besteht der Hauptpunkt des wartbaren Codes darin, dieses Problem anzugehen.


4

Ich denke, kollektiver Code-Besitz ist unvergleichlich besser als individueller Code-Besitz.

Mich stört das Truck-Argument nicht so sehr - in einem individuellen Eigentumsmodell ist der Verlust eines Eigentümers teuer in Bezug auf die Zeit, die jemand anderes für die Übernahme benötigt, aber das Ereignis ist selten genug, dass die amortisierten Kosten niedrig sind.

Ich denke eher, dass kollektiver Code-Besitz direkt zu qualitativ hochwertigem Code führt. Dies hat zwei sehr einfache Gründe. Erstens, weil die schmerzhafte Wahrheit ist, dass einige Ihrer Programmierer nicht so gut sind wie die anderen, und wenn sie Code besitzen, wird dieser Code schlecht sein; Wenn Sie Ihren besseren Programmierern Zugriff darauf geben, wird dies verbessert. Zweitens: Codeüberprüfung: Wenn jeder den Code besitzt, kann jeder ihn überprüfen und verbessern. Selbst gute Programmierer schreiben unterdurchschnittlichen Code, wenn sie sich selbst überlassen.

Ich sage dies basierend auf Erfahrungen in meinem aktuellen Projekt. Wir wollen das kollektive Eigentum üben, aber es gibt einige Teile des Systems, die sich spezialisiert haben - ich und ein anderer Typ sind de facto Eigentümer des Build-Systems, zum Beispiel ein Typ, der den größten Teil der Arbeit an den eingehenden Datenfeeds erledigt , ein anderer Typ, der am Import von Bildern arbeitet, und so weiter. In einigen dieser Bereiche (insbesondere in meinem Bereich muss ich gestehen!) Hat die Codequalität ernsthaft gelitten - es gibt Fehler, Missverständnisse, Tricks und Hacks, die die Aufmerksamkeit anderer Teammitglieder einfach nicht überleben würden.

Ich stelle fest, dass Sie einige der Vorteile des kollektiven Code-Besitzes erhalten könnten, wenn Sie einen individuellen Code-Besitz haben, bei dem der Besitz eines bestimmten Code-Stücks regelmäßig zwischen verschiedenen Programmierern wechselt (z. B. alle drei Monate oder bei jeder Veröffentlichung - vielleicht sogar bei jeder Iteration?). . Ein Programmieräquivalent zur Fruchtfolge. Das könnte Spaß machen. Ich werde es aber nicht selbst versuchen.


1

Ich denke nicht, dass Team-Code-Besitz so wichtig ist, wie wenn mehrere Mitwirkende die Grundarchitektur der vorherrschenden Subsysteme verstehen.

Zum Beispiel haben wir ein paar Jungs in unserem Team, die administrative Webseite für unsere Server-Produkte zu machen. Wir bauten eine benutzerdefinierte Server-Skript-Engine, so dass wir konnten wesentliche Aufruf C-Funktionen auf dem Server direkt von unserem Java-Scripts oder html. Ich denke, dass es wichtiger ist, dass unsere "Web" -Typen verstehen, wie man diese Engine verwendet, als Miteigentümer der jeweils anderen Webseitenanwendungen zu sein.


0

Ich denke, Sie übernehmen den individuellen Besitz von Code zum Zeitpunkt des Schreibens und geben ihn dann an das Team weiter. Auf diese Weise übernimmt jeder Verantwortung und trägt dazu bei. Jeder sollte einen Codierungsfehler beheben wollen, den er erstellt hat. Zusammen mit einer Codeüberprüfung schafft dies höhere Standards. Niemand will die Arbeit aufräumen nach anderen.

Denken Sie mehr Verantwortung und weniger Eigenverantwortung. Denn wer die Schecks ausstellt, ist sowieso der eigentliche Besitzer.


0

Jim, ich bin zu 100% bei dir. Ich bin mitten in genau der gleichen Schlacht an meinem Arbeitsplatz - deshalb bin ich über Ihre Frage gestolpert.

Ich sehe es so: "Wenn jeder es besitzt, besitzt niemand es".

Für mich gibt es keinen wichtigeren Faktor für die Codequalität als Eigenverantwortung und Verantwortung.

Beispiele aus dem wirklichen Leben veranschaulichen dies gut. Um was würden Sie sich besser kümmern: Ihren privaten Rasen oder den Park der Gemeinde? Ganz schön offensichtlich.

Das muss übrigens nicht unbedingt gegen "Teamflexibilität" eingetauscht werden. Es bedeutet lediglich, dass eine Person, die etwas besitzt, es BESITZT - und sei es nur für den Tag.


0

Für mich kommt es auf die Dynamik Ihres Teams an.

Wenn Sie beispielsweise ein Team haben, das nicht durch Standards, Peer Review, methodische Tests oder ein Team mit stark unterschiedlichen Kompetenzstufen unter den Mitgliedern vereinheitlicht ist, empfiehlt es sich, eine stärkere Vorstellung von Code-Inhaberschaft anzustreben mit einer Black-Box-modularen Denkweise.

Fehlt dies zum Beispiel, kann Ihre sorgfältig gestaltete Oberfläche, die den SOLID-Prinzipien entspricht, schnell von jemandem zerstört werden, der nicht einmal "SOLID" kennt und der aus "praktischen Gründen" ständig neue vielseitige Funktionen hinzufügen möchte, z Dies ist bei weitem das Schlimmste.

Sie können sich auch mit schlampigen Mitarbeitern befassen, deren Idee, einen Fehler zu beheben, darin besteht, das Symptom zu beheben, ohne das Grundproblem zu verstehen (z. B .: Sie versuchen, auf einen Absturzbericht zu reagieren, indem Sie einfach Problemumgehungen in den Code einfügen, um den Fehler zu verbergen und den tödlichen Fehler zu übertragen Nebenwirkungen zu jemand anderem). In diesem Fall ist es nicht ganz so schlimm wie die Sabotage des Schnittstellendesigns, und Sie können Ihre Absichten mit sorgfältig ausgearbeiteten Komponententests schützen.

Die ideale Lösung besteht darin, Ihr Team zu einem Punkt zusammenzuziehen, an dem dieser Begriff von Urheberschaft und Eigenverantwortung nicht mehr so ​​wichtig ist. Beim Peer Reviewing geht es nicht nur um die Verbesserung der Codequalität, sondern auch um die Verbesserung der Teamarbeit. Bei Standards geht es nicht nur um Konsistenz, sie verbessern auch die Teamarbeit.

Es gibt jedoch Szenarien, in denen Peer Review und die Konformität aller mit einem Standard einfach hoffnungslos sind und viele hoffnungslos unerfahrene Kritiker in die Mischung bringen. Ich würde sagen, dass eine Menge davon, ob Code-Besitz oder Team-Besitz eine höhere Priorität haben, von der Fähigkeit Ihres Teams abhängt, eine effektive Peer-Überprüfung durchzuführen und tatsächlich alle so herauszuholen, wie sie davon profitiert haben (sowohl in Bezug auf die Überprüfung selbst) und dadurch in Denkweise und Standards enger zusammenrücken). In großen, lockeren und / oder ungleichen Teams mag dies hoffnungslos erscheinen. Wenn Ihr Team wie ein "Kader" funktioniert, in dem Sie kaum sagen können, wer was geschrieben hat, wird Alleinbesitz wie eine dumme Idee erscheinen.

In solchen Szenarien, die alles andere als ideal sind, kann dieser Begriff der Code-Inhaberschaft tatsächlich hilfreich sein. Es wird versucht, ein Worst-Case-Szenario zu verbessern, aber es kann hilfreich sein, wenn Teamwork im Allgemeinen hoffnungslos ist, den Code eines Autors zu umzäunen. In diesem Fall verringert sich die Teamarbeit, aber das kann besser sein, wenn "Teamarbeit" nur zu Zehensprüngen führt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.