* Code-Besitzer * System: Ist es ein effizienter Weg? [geschlossen]

50

Es gibt einen neuen Entwickler in unserem Team. In unserem Unternehmen wird eine agile Methodik angewendet. Der Entwickler hat jedoch eine andere Erfahrung: Er ist der Ansicht, dass bestimmte Teile des Codes bestimmten Entwicklern zugewiesen werden müssen. Wenn also ein Entwickler eine Programmprozedur oder ein Modul erstellt hätte, würde es als normal angesehen, dass alle Änderungen an der Prozedur / dem Modul nur von ihm vorgenommen würden.

Positiv zu vermerken ist, dass wir mit dem vorgeschlagenen Ansatz gemeinsame Entwicklungszeit sparen, da jeder Entwickler seinen Teil des Codes gut kennt und Korrekturen schnell vornimmt. Der Nachteil ist, dass Entwickler das System nicht vollständig kennen.

Glauben Sie, dass der Ansatz für ein mittelgroßes System gut funktioniert (Entwicklung einer Site für soziale Netzwerke)?

Sergzach
quelle
23
Ich habe auf diese Weise gearbeitet und musste am Ende immer Code ändern, den ich nicht besaß. Da der Code nicht "meins" war, hat er immer jemanden beleidigt, und der Code wurde nie gut genug dokumentiert oder getestet, damit die Änderungen einfach sind. In Projekten, die ich besaß, habe ich die Gruppenverantwortung immer zusammen mit einer schnellen Integration gefördert (um lange Zusammenführungen zu verhindern).
Danny Varod
26
Ich kann Ihnen gar nicht genug betonen, wie schlecht diese Vorstellung ist. Die folgenden Antworten fassen alles zusammen, was mit dem Besitz von Code nicht stimmt. Das einzige, was ich hinzufügen kann, ist meine persönliche Erfahrung, wie sich ein Softwareentwicklungsgeschäft, für das ich gearbeitet habe, von einem großartigen Ort für die Arbeit mit guten Leuten zu einem Albtraum egoistischer Entwickler entwickelt hat, der doppelt so faul ist Entwickler und schrecklicher, nicht zu wartender Cowboy-Code.
maple_shaft
6
Ich habe diese Frage vor langer Zeit total gestellt: programmers.stackexchange.com/questions/33460/…
Jim Puls
7
Klingt so, als würde er versuchen, sich unersetzbar zu machen.
Iain Holder
6
Eine Klarstellung: Wenn Sie sagen, dass "alle Änderungen des Verfahrens / Moduls nur von ihm vorgenommen würden", meinen Sie, dass niemand anderes dieses Modul berühren darf, oder meinen Sie, dass wir beim Verteilen von Aufgaben Aufgaben zuweisen Bezogen auf dieses Modul auf den Programmierer, der es zuerst geschrieben hat (oder mit ihm vertraut ist), wenn möglich? Das ist ein subtiler Unterschied, aber es ändert wirklich die Art der Frage.
Scott Whitlock

Antworten:

37

Wie so viele dieser Fragen, denke ich, lautet die Antwort:

Es hängt davon ab, ob

Es gibt Grund zu der Annahme, dass es falsch ist, die Position einzunehmen, dass jeder Programmierer jede Codezeile kennen sollte.

Wenn wir für einen Moment davon ausgehen, dass jemand mit einem tiefen Verständnis eines Codeteils Änderungen fünfmal schneller vornimmt als jemand, der dies überhaupt nicht weiß (nach meiner Erfahrung kein riesiger Vertrauenssprung), und das dauert ungefähr einen Monat Um ein wirklich gutes Verständnis für ein Modul von beträchtlicher Größe zu erhalten (auch nicht unangemessen), können wir einige (völlig falsche und fiktive) Zahlen ausführen:

  • Programmierer A: hat ein tiefes Verständnis
  • Programmierer B: keine

Nehmen wir an, Programmierer A erledigt 1 Arbeitseinheit pro Tag. In 4 Wochen an 5 Arbeitstagen kann er / sie 20 Arbeitseinheiten erledigen.

Programmierer B, der mit 0,2 Arbeitseinheiten pro Tag beginnt und mit 0,96 Arbeitseinheiten an seinem / ihrem 20. Tag endet (am 21. Tag sind sie so gut wie Programmierer A), wird 11,6 Arbeitseinheiten in demselben erledigen Zeitraum von 20 Tagen. In diesem Monat erzielte Programmierer B einen Wirkungsgrad von 58% im Vergleich zu Programmierer A. Jetzt haben Sie jedoch einen anderen Programmierer, der dieses Modul sowie das erste Modul kennt.

Natürlich könnten Sie in einem Projekt mit angemessener Größe ... 50 Module haben? Das bedeutet, dass der lernende Programmierer im Durchschnitt mit einer Effizienz von 58% im Vergleich zu Programmierer A ... hmmm arbeitet.

Stellen Sie sich also folgendes Szenario vor: Dieselben Programmierer, dasselbe Projekt (A weiß alles und B weiß nichts davon.) Nehmen wir an, das Jahr hat 250 Arbeitstage. Nehmen wir an, dass die Arbeitslast zufällig auf die 50 Module verteilt wird. Wenn wir beide Programmierer gleichmäßig aufteilen, erhalten A und B jeweils 5 Arbeitstage für jedes Modul. A kann 5 Arbeitseinheiten für jedes Modul ausführen, aber B erhält meiner kleinen Excel-Simulation zufolge nur 1,4 Arbeitseinheiten für jedes Modul. Insgesamt (A + B) sind 6,4 Arbeitseinheiten pro Modul. Das liegt daran, dass B die meiste Zeit ohne Vorkenntnisse mit dem Modul verbringt, an dem sie arbeiten.

In dieser Situation ist es optimaler, B auf eine kleinere Teilmenge von Modulen zu konzentrieren. Wenn sich B auf nur 25 Module konzentriert, erhalten sie jeweils 10 Tage mit insgesamt 3,8 Arbeitseinheiten. Programmierer A könnte dann jeweils 7 Tage mit den 25 Modulen verbringen, an denen B nicht arbeitet, und jeweils 3 Tage mit den gleichen Modulen wie B. Die Gesamtproduktivität liegt zwischen 6,8 und 7 Einheiten pro Modul, durchschnittlich 6,9, und das ist bedeutend höher als die 6,4 Einheiten pro Modul, die wir gemacht haben, als A und B die Arbeit gleichmäßig verteilten.

Wenn wir den Umfang der Module, an denen B arbeitet, einschränken, erhalten wir (bis zu einem gewissen Punkt) noch mehr Effizienz.

Ausbildung

Ich würde auch argumentieren, dass jemand, der nicht so viel über ein Modul weiß, die Person unterbricht, die viel mehr macht als jemand mit mehr Erfahrung. Die oben genannten Zahlen berücksichtigen nicht, dass A umso mehr Zeit benötigt, um Fragen zu stellen, je mehr Zeit B für den Code aufgewendet hat, den sie nicht verstehen. Manchmal muss A dabei helfen, die Probleme von B zu beheben oder zu beheben. Jemanden zu trainieren ist eine zeitaufwändige Tätigkeit.

Optimale Lösung

Aus diesem Grund denke ich, dass die optimale Lösung auf folgenden Fragen beruhen muss:

  • Wie groß ist dein Team? Ist es sinnvoll, dass jeder Teilnehmer über Kreuz geschult wird, oder wenn wir ein 10-köpfiges Team haben, können wir dann sicherstellen, dass mindestens 3 Personen über jedes Modul Bescheid wissen? (Bei 10 Programmierern und 50 Modulen muss jeder Programmierer 15 Module kennen, um eine dreifache Abdeckung zu erhalten.)
  • Wie ist Ihre Mitarbeiterfluktuation? Wenn Sie die Mitarbeiter durchschnittlich alle 3 Jahre wechseln und es länger dauert, bis Sie wirklich alle Bereiche des Systems kennen, werden sie nicht lange genug da sein, damit sich die Schulung auszahlt.
  • Benötigen Sie wirklich einen Experten, um ein Problem zu diagnostizieren? Viele Leute benutzen die Ausrede "Was ist, wenn diese Person in den Urlaub fährt?", Aber ich wurde mehrfach angerufen, um ein Problem in einem System zu diagnostizieren, mit dem ich noch keine Erfahrung hatte. Es mag sein, dass die erfahrene Person es viel schneller findet, aber es bedeutet nicht, dass Sie nicht ein oder zwei Wochen ohne sie leben können. Nur wenige Softwaresysteme sind so unternehmenskritisch, dass das Problem innerhalb von 1 Stunde anstelle von 5 Stunden diagnostiziert werden muss, da sonst die Welt untergeht. Sie müssen diese Risiken abwägen.

Deshalb denke ich "es kommt darauf an". Sie möchten nicht 20 Module genau in der Mitte auf zwei Programmierer aufteilen (jeweils 10), da Sie dann keine Flexibilität haben. Sie möchten jedoch nicht 10 Programmierer auf allen 50 Modulen überqueren, da Sie viel davon verlieren Effizienz und Sie brauchen nicht so viel Redundanz.

Scott Whitlock
quelle
3
Es ist natürlich, dass manche Menschen einige Teile besser kennen als andere. Aber das Konzept des "Eigentums" impliziert, dass andere Menschen diesen Code nicht ohne Erlaubnis berühren dürfen oder dass nur der Eigentümer das letzte Wort hat, und das geht zu weit. Offensichtlich ja, "es kommt darauf an", ob es das ist, was sie tatsächlich bedeuten.
Poolie
1
@poolie - Ich stimme zu, aber ich weiß nicht, ob es so geschnitten und getrocknet ist. Bedeutet Besitz wirklich "darf nicht berühren"? Davon bin ich nicht überzeugt. Ich denke, dies impliziert, dass "dies die Person mit der endgültigen Autorität" für dieses bestimmte Stück Code ist. Es gibt hier mehr als ein Problem ... aber ich denke, die Wurzel der Frage liegt darin, Programmierern Aufgaben zuzuweisen, und bestimmten Programmierern nicht zu gestatten, an bestimmten Codes zu arbeiten. Zu sagen, "Programmierer B darf nicht an diesem Code arbeiten", ist einfach albern.
Scott Whitlock
Ich denke, Besitz bedeutet höchste Priorität , um mit einem Codefragment zu arbeiten. Wenn Programmierer A frei ist und die höchste Priorität hat, sollte er beginnen, mit dem Fragment zu arbeiten, Programmierer B sollte dies jedoch nicht tun.
Sergzach
76

Das ist eine schreckliche Idee . Kurzfristig mag es schneller gehen, aber es fördert schlecht dokumentierten, schwer verständlichen Code, da nur der Codierer, der es geschrieben hat, für die Pflege verantwortlich ist. Wenn jemand das Unternehmen verlässt oder in den Urlaub fährt, ist der gesamte Plan durcheinander. Außerdem ist es sehr schwierig, Arbeitslasten zuzuweisen. Was passiert, wenn zwei dringende Fehler mit dem Code auftauchen, den ein Codierer "besitzt"?

Sie sollten als Team programmieren . Den Menschen werden natürlich Aufgaben zugewiesen, und sie konzentrieren sich auf bestimmte Bereiche. Die Aufteilung der Arbeitsbelastung und die Zusammenarbeit sollten jedoch gefördert und nicht entmutigt werden.

Tom Squires
quelle
5
Ich stimme im Prinzip der Arbeit im Team zu, aber in der Praxis scheinen die Leute es besser zu machen, wenn sie ein Gefühl der Eigenverantwortung für ihre Arbeit haben, solange es nicht so weit geht wie "Sie können diesen Code nicht ändern, es ist Bergwerk!" Während wir Teamprojekte haben, in denen ich arbeite, sind daher einzelne Entwickler für das Ausfüllen der zugewiesenen Teile des Codes verantwortlich.
Robert Harvey
1
Eines der größten Probleme beim Besitz von Code ist die Serialisierung. Was passiert, wenn 90% der Arbeit im Bereich einer Person liegt? Soll der Rest des Teams auf den Daumen sitzen und warten?
Neal Tibrewala
5
Wo ich arbeite, haben wir Codeabschnitte, die jemandem (oder einer Gruppe) "gehören", aber keineswegs sind sie die einzigen, die diese Dateien berühren. Es gibt einfach zu viel Code, als dass jeder alles wissen könnte. Daher sind die Leute auf bestimmte Subsysteme spezialisiert und dafür verantwortlich, dass sie wissen und in der Lage sind, größere Entwurfsentscheidungen für ein bestimmtes System zu treffen. Für andere ist es jedoch nicht ungewöhnlich, dass kleinere Änderungen bei Bedarf vorgenommen werden.
Alex
3
@ Robert Harvey: Das Team besitzt den gesamten Code.
Steven A. Lowe
2
"schreckliche Idee" ist zu stark. Der Linux-Kernel verwendet dieses Modell und es scheint, dass es gut funktioniert hat.
Joh
28

Es kommt darauf an, in welcher Domäne das Problem liegt.

Wenn es sich um allgemeine Dinge handelt (z. B. einfache CRUD-Aktionen usw.), stimme ich Tom Squires zu (jeder sollte in der Lage sein, daran zu arbeiten und es zu bearbeiten).

Wie auch immer ...

Wenn für die betreffende Lösung Fachwissen erforderlich ist (entweder wurde in der Vergangenheit viel Zeit investiert, oder es muss vor der Implementierung viel Forschung betrieben werden, da dies in einer Stellenanforderung als Fachwissen aufgeführt wird, das nicht jeder am Projekt hat), dann sollte ein Eigentümer auf jeden Fall diesem Teil des Codes zugewiesen werden. Trotzdem sollte jeder in der Lage sein, nach Bedarf Änderungen daran vorzunehmen, sie sollten jedoch immer von der Person überprüft werden, die den betreffenden Bereich des Projekts besitzt.

Sie möchten nicht, dass Ihr gesamtes Team (oder mehrere Personen im Team) dasselbe Thema erforscht und lernt (verschwendete Zyklen). Weisen Sie einen Eigentümer zu, lassen Sie ihn jedoch seine Erkenntnisse und Entwürfe dokumentieren, und lassen Sie ihn möglicherweise informelle (oder formelle, nicht wirklich wichtige) Schulungen zur Technologie durchführen.

Demian Brecht
quelle
2
Guter Punkt zu den Randfällen. +1
Tom Squires
1
@Danny: Ich glaube nicht, dass du den Beitrag gründlich gelesen hast. Ich habe gesagt, dass jeder in der Lage sein sollte, Änderungen am Code vorzunehmen, solange er vom Eigentümer überprüft wird. Ich schlug auch vor, dass der Domain-Experte sein Wissen in formellen oder informellen Schulungen weitergibt.
Demian Brecht
Sorry, war müde und habe diesen Teil verpasst.
Danny Varod
+1 Ich denke, dies ist die einzige Antwort, die darauf hinweist, dass je nach Projekt unterschiedliche Eigentumsverhältnisse von Vorteil sein können.
Thomas Levine
1
Ich sehe das nicht wirklich als Eigentum. Codeüberprüfungen sind natürlich (ja, natürlich), und es ist genauso natürlich, dass der erfahrenste Entwickler eines bestimmten Subsystems Änderungen an diesem Subsystem überprüft.
Matthieu M.
10

Das ist eine schreckliche Idee . Ich habe in einer Firma gearbeitet, die diesen Ansatz verwendet hat und es ist so ziemlich ein Rezept für jede Menge technischer Schulden . Unter dem Strich sind zwei Köpfe fast immer besser als einer. Warum? Denn wenn Sie kein Idiot sind, wissen Sie, dass Sie kein perfekter Programmierer sind und Sie werden nicht jeden Fehler bemerken, den Sie machen. Deshalb brauchen Sie ein Team - mehr Augen, die denselben Code aus verschiedenen Perspektiven betrachten.

Es läuft auf eines hinaus: Disziplin . Wie viele Einzelprogrammierer kennen Sie, die in ihrem Codierungsstil wirklich diszipliniert sind? Wenn Sie nicht diszipliniert programmieren, verwenden Sie Verknüpfungen (da Sie diese später korrigieren), und die Wartbarkeit des Codes leidet. Wir alle wissen, dass "später" niemals kommt. Fakt ist : Es ist schwieriger, Verknüpfungen zu verwenden, wenn Sie Ihren Kollegen in einem Team gegenüber sofort rechenschaftspflichtig sind. Warum? Weil Ihre Entscheidungen in Frage gestellt werden und es immer schwieriger ist, Verknüpfungen zu rechtfertigen. Endresultat? Sie produzieren besseren, besser wartbaren Code, der auch robuster ist.

Carl
quelle
9

Der Vorteil ist, dass nicht jeder alles erforschen und verstehen muss. Der Nachteil ist, dass dies jede Person für ihren eigenen Code-Bereich benötigt und niemand sonst weiß, wie er zu pflegen ist.

Ein Kompromiss wäre, mindestens zwei Eigentümer für jeden Codebereich zu haben. Dann kann jemand in den Urlaub fahren, einen neuen Job annehmen oder in den Ruhestand gehen, und es gibt immer noch jemanden, der den Code kennt (und die neue zweite Person trainieren kann). Nicht jeder muss alles lernen, was ein bisschen effizienter ist.

Es müssen nicht immer die gleichen 2 (oder 3) Personen zusammenarbeiten. Vertauschen Sie Paare für verschiedene Bereiche, damit das Wissen auch versehentlich geteilt wird, wenn Sie mit einer anderen Person in einem verwandten Programmbereich arbeiten.

donnerstagswoche
quelle
1
Oder mit anderen Worten, Sie empfehlen XP :-)
Danny Varod
6

Ja, es ist kurzfristig etwas effizienter. Und hier endet der Nutzen. Das übersteigt nicht einmal die Kosten.

Was passiert, wenn er im Urlaub ist oder unerwartet krank ist oder geht oder vom sprichwörtlichen Bus angefahren wird? Was passiert, wenn Sie Ressourcen einsetzen möchten, um einen Job schneller als einen anderen zu erledigen? Wie effektiv können Code-Reviews sein? Wie kann ein Manager, insbesondere einer, der nicht in der Codebasis ist, wissen, ob der Entwickler hart arbeitet oder die Wolle über seine Augen zieht? Wer wird es bemerken, wenn die technischen Schulden anfangen zu laufen?

Nach meiner Erfahrung sind Leute, die gerne auf diese Weise arbeiten, bestenfalls Ruhmesjäger, im schlimmsten Fall Faulenzer. Sie möchten die einzige Person sein, mit der Sie bei einem bestimmten Problem Kontakt aufnehmen können, und sie möchten, dass ihr Code privat bleibt. Und sie schreiben oft schnell, ohne auf die Lesbarkeit zu achten.

Das heißt nicht, dass in einem Team von 50 Entwicklern jeder den gesamten Code kennen sollte, aber ein Team von 5-7 sollte ein Modul besitzen, das groß genug ist, um diese Leute am Arbeiten zu halten. Niemand sollte etwas besitzen.

pdr
quelle
Ich würde sagen, es hängt von der Größe und dem Umfang der Codebasis ab. Sobald Sie ein paar Hundert Millionen Zeilen erreicht haben, befinden Sie sich definitiv außerhalb des Bereichs "Ein Mensch kann alles im Kopf haben", und Sie müssen anfangen, die Hauptverantwortung zu teilen.
Vatine
1
@Vatine: Richtig. Sie unterteilen Ihren Code in Module und haben ein Team, das an jedem Modul arbeitet. Sie haben immer noch keinen Code, der einer Person gehört.
pdr
Ja, es ist (wahrscheinlich) nicht sinnvoll, es auf einzelne Personen aufzuteilen, aber es gibt sicherlich einige Argumente für "unterschiedliche Eigentumsverhältnisse für verschiedene Teile der Codebasis".
Vatine
6

Es gibt mindestens drei Punkte, auf die die anderen Antworten hinweisen. aber ich möchte versuchen, beide zusammen zu behandeln. Die beiden Probleme sind:

  • Fachwissen : Jemand im Team verfügt über detailliertes Fachwissen in einem bestimmten Bereich. Dieses Wissen ist unabhängig von der spezifischen Implementierung dieser Domäne im Projekt
  • Führung : Obwohl die Arbeit am Aufbau des Projekts von vielen Entwicklern geteilt werden kann; Die Roadmap sowie unmittelbare Entscheidungen über wichtige Implementierungsdetails liegen in den Händen eines bestimmten Teammitglieds oder nur einiger weniger Teammitglieder.
  • Egoloser Code : Die Art und Weise, wie das Projekt implementiert wird, hängt nicht von den Codierungsstilen, -praktiken oder -kenntnissen eines bestimmten Entwicklers im Team ab. und durch strikte Einhaltung eines bekannten Codierungsstils oder einer gut gepflegten Spezifikation hat jedes neue Teammitglied die gleiche Chance, das Wie und Warum des Projekts wie die erfahrenen Entwickler zu verstehen.

Wenn es sich nur um ein Fachthema handelt, hängt der Erfolg des Projekts möglicherweise von einem hohen Kenntnisstand über den Bereich ab. Dies hängt jedoch nicht vom Fachwissen eines bestimmten Experten in diesem Bereich ab. Die Experten sind zwar selten und wertvoll, aber im Wesentlichen austauschbar. Ein erfahrener Steuerberater ist für ein Steuerplanungs-Softwareprojekt vom Standpunkt seines Fachwissens aus genauso nützlich wie ein anderer. Es geht darum, wie gut die Expertin ihr Wissen auf das Projekt übertragen kann.

Wenn es sich nur um ein Führungsthema handelt, hängt der Erfolg des Projekts hauptsächlich von der Konsistenz und Einsicht der vom Projektleiter getroffenen Entscheidungen ab. Obwohl wir dazu neigen, Projektleiter zu bevorzugen, die Erfahrung auf diesem Gebiet haben oder als Projektleiter nachgewiesen sind, ist dies manchmal zweitrangig. Der "Anführer" könnte von Tag zu Tag wechseln, wenn die getroffenen Entscheidungen von Fall zu Fall konsistent sind und jede Entscheidung vom Team schnell ausgeführt wird. Wenn das richtig funktioniert; Viele Entscheidungen müssen nicht vom Projektleiter "getroffen" werden, da das Team bereits versteht, welche Entscheidungen getroffen werden.

Ich glaube nicht, dass es sich bei der Frage wirklich um egolosen Code handelte, aber es ist schwierig, über den Besitz von Code zu sprechen, ohne auch zu diskutieren, wie wichtig dieses Problem ist. Die Pflege eines Projekts ist wahrscheinlich der größte Teil des Entwicklungszyklus. Um dieses Problem zu verstehen, muss man sich fragen, was passieren würde, wenn einige Entwickler es sofort verlassen müssten. Was würde passieren, wenn das gesamte Team ersetzt werden müsste ? Wenn das Projekt in Zweifel gezogen wird, weil es von einigen Hauptakteuren abhängt, besteht ein hohes Ausfallrisiko. Selbst wenn Sie nie ein einzelnes Teammitglied verlieren, bedeutet die einfache Tatsache, dass ein oder mehrere Entwickler erforderlich sind, um das Projekt voranzutreiben, dass Sie möglicherweise nicht so effizient arbeiten, wie Sie es könnten, wenn mehr Entwickler eingeschätzt würden.

SingleNegationElimination
quelle
6

Code-Inhaberschaft kann Refactoring verhindern, Entwicklungsengpässe verursachen und Ego-Probleme verursachen, wenn Code Probleme aufweist, die behoben werden sollten.

Ich empfehle, sich vor einer Änderung mit den Code-Autoren zu beraten, auch wenn Code mit hohem Standard gut genug dokumentiert, Unit-getestet, Integration-getestet und System-getestet sein sollte, um diese Redundanz zu gewährleisten, kann es immer noch nicht schaden, eine andere Meinung einzuholen.

Danny Varod
quelle
5

Das ist aus vielen Gründen schlimm. Ich habe in einem Geschäft gearbeitet, in dem versucht wurde, dies durch etwas Vernünftigeres zu ersetzen, und es war hässlich.

Die Gründe, warum dies schlecht ist:

  • Wenn der Code-Besitzer Urlaub macht und ein großer Fehler in seinem Material auftaucht, wird es sehr schwierig und zeitaufwendig sein, den Code zu lernen UND den Fehler zu beheben
  • Wenn der Codebesitzer das Unternehmen verlässt, werden seine Projekte stark zurückgeworfen, da das gesamte Erbe und Stammeswissen nur aus dem Haus ging
  • Die Dokumentation ist schlecht. Wenn ich die einzige Person bin, die darin kodiert, warum sollte ich es dokumentieren? In Verbindung steht das Problem, dass jede Dokumentation, die erstellt werden muss, wahrscheinlich auch schlecht ist, da niemand genug über den Code weiß, um wirklich zu sagen, ob die Dokumentation vollständig oder sogar genau ist.
  • Code Holy Wars kann sich leicht entzünden, wenn jeder seinen eigenen kleinen Sandkasten hat, wie andere bereits erwähnt haben. Dies kann sehr schnell sehr dumm werden. Hierbei handelt es sich um ein Problem, bei dem zwei Personen zusammenarbeiten müssen. Beide sind es nicht gewohnt, jemals Kompromisse einzugehen.
  • Aufgrund des obigen Punktes bilden die Teamfähigkeiten niemals eine Form - Menschen müssen niemals mit anderen zusammenarbeiten.
  • Lehen können sich leicht bilden, kleine Königreiche aus Abfalltaschen, die dem Unternehmen nichts kaufen. Sie wissen nicht, dass dies geschieht, bis es zu spät ist, da Modul oder Tool X in Bobs Verantwortung liegt, und wehe Ihnen, wer sich überhaupt erkundigen sollte, was Bob in seinem Code tut .
  • Code Reviews und Peer Reviews leiden darunter, dass niemand etwas über den Code weiß. Wenn Sie den Code nicht kennen, können Sie die nicht richtigen Stellen nicht erkennen und können nur Textformatierungen und Namenskonventionen kommentieren.
  • Und wenn Sie für mich arbeiten ... besitzt die Firma den Code, nicht Sie. Wir sind stolz darauf, was wir tun und was wir erreichen und was wir schreiben, aber es ist eine Gruppensache, wie wenn Ihre Mannschaft ein schwieriges Spiel gewinnt. Jeder Mitarbeiter, der für das Unternehmen arbeitet, besitzt den Code gleichermaßen und kann ihn im Rahmen seiner Arbeit auf jede Art und Weise bearbeiten, die er zur Erfüllung seiner Aufgaben benötigt, um die Unternehmensziele zu erreichen.

Die größten sind wirklich die Personalfragen und die Dokumentation. Diese Person wird eines Tages gehen, und Junge, Sie werden den Zeitplan für ein paar Wochen nach links verschieben.

Der bessere Ansatz ist, dass jeder mit jedem Teil der Codebasis vertraut ist (oder mit einem halben Dutzend Teilen, wenn sie wirklich groß und vielfältig sind), bis sie es können

  • Beheben Sie alle Fehler in diesem Bereich
  • Fügen Sie kleinere oder mittelgroße neue Funktionen oder Verbesserungen hinzu

Jeder weiß ein bisschen mehr über einige Dinge als andere, sodass sich zwei oder drei für die schwierigen Probleme zusammenschließen können oder der Defacto-Experte es übernehmen kann. Ich habe in Gruppen gearbeitet, in denen dies der Fall war und es hat sehr gut geklappt. Es gab nicht nur keine der oben aufgeführten Nachteile, die Besetzung war auch vorhersehbarer, da wir nicht nach Experten suchten.

Der Vorteil der alleinigen Code-Inhaberschaft besteht darin, dass der "Code-Besitzer" die Dinge wahrscheinlich schneller erledigen kann als andere. Dies gilt jedoch nur, wenn jeder in nicht überlappenden Projekten ein "Code-Besitzer" ist. Mit anderen Worten, wenn sich die Leute um den Vorteil des "alleinigen Code-Besitzers" drehen, verschwindet dieser.

anon
quelle
2
Sie sprechen von einer Art von schwerem Silo, das ich nicht befürworte und das ich für selten halte. Es ist überhaupt kein Problem, jemandem einen Auftrag zu geben und ihn damit laufen zu lassen, solange er versteht, dass er immer noch Teil eines Teams ist. Das bedeutet, dass er die Programmierstandards und -praktiken des Shops befolgen und im Allgemeinen freundlich zu der Person sein muss, die seinen Code nach ihm pflegen muss. Dies bedeutet, dass das Team auch verstehen muss, wie sein Code funktioniert, und über das Quellcodeverwaltungssystem vollständigen Zugriff darauf haben muss, damit bei Bedarf jemand anderes die "Eigentümerschaft" übernehmen kann.
Robert Harvey
5

Siehe Truck Nummer aka Bus Factor

Der Busfaktor (auch als LKW-Faktor oder Bus- / LKW-Nummer bezeichnet ) ist eine Messung der Informationskonzentration in einzelnen Teammitgliedern. Der Busfaktor ist die Gesamtzahl der Schlüsselentwickler, die außer Gefecht gesetzt werden müssten (z. B. wenn sie von einem Bus / LKW angefahren würden), um das Projekt in eine solche Unordnung zu bringen, dass es nicht weitergehen könnte. Das Projekt würde Informationen (wie den Quellcode ) behalten, mit denen kein verbleibendes Teammitglied vertraut ist. Ein hoher Busfaktor bedeutet, dass viele Entwickler entfernt werden müssten, bevor das Projekt notwendigerweise scheitern würde.

"Von einem Bus angefahren werden" kann viele verschiedene Formen annehmen. Dies könnte eine Person sein, die einen neuen Job annimmt, ein Baby bekommt, ihren Lebensstil oder ihren Lebensstatus ändert oder buchstäblich von einem Bus angefahren wird: Der Effekt wäre der gleiche ...

Joshua Drake
quelle
Angesichts der historischen Bedeutung der Quelle empfand ich sie als maßgebend. en.wikipedia.org/wiki/WikiWikiWeb es scheint, dass die allgemeine Nutzung von Bus Factor um etwa 4 Jahre älter ist.
Joshua Drake
1

Wie bei vielen Dingen ist es ein großes "hängt". Wenn es ein striktes "niemand anderes kann an dem Code arbeiten" ist, ist es wahrscheinlich schlecht. Wenn es sich um "Der Eigentümer muss eine Codeüberprüfung durchführen, bevor er eine Änderung akzeptiert" handelt, ist dies zu gut, je nachdem, wie bereit der Eigentümer ist, externe Änderungen zu akzeptieren.

Vatine
quelle
1

Der Nachteil ist schwerwiegend; Die "LKW-Nummer" Ihres Teams wird so ziemlich zu 1.

Zur Überprüfung wird die "LKW-Nummer" einfach definiert als "wie viele Mitglieder des Teams, im schlimmsten Fall, von einem LKW getroffen werden könnten, bevor das für die Ausführung einer kritischen Aufgabe erforderliche Wissen an das Team verloren geht."

Es ist eine Selbstverständlichkeit und ein wenig zu empfehlen, dass sich Entwickler auf Unterdisziplinen konzentrieren. Wenn jeder alles wissen müsste, was mit dem Projekt zu tun hat, würde nichts getan, weil jeder lernen würde, was alle anderen getan haben, warum es funktioniert und wie es geändert werden kann, ohne es zu zerstören. Darüber hinaus ist es weniger wahrscheinlich, dass Änderungen kollidieren, wenn Entwickler in verschiedenen Bereichen unterschiedliche Aufgaben ausführen. Daher ist es im Allgemeinen gut, zwei oder drei Entwickler oder Entwicklerpaare zu haben, die hauptsächlich in einem bestimmten Subsystem des Projekts arbeiten und es gut kennen.

Wenn jedoch nur eine Person eine bestimmte Codezeile berühren soll, wird diese Codezeile als Ursache für einen Fehler angezeigt, wenn dieser Typ kündigt, gefeuert wird, in den Urlaub geht oder im Krankenhaus landet das muss behoben werden, jemand anderes muss den Code verstehen. Wenn niemand anderes als derjenige, der es geschrieben hat, es jemals gesehen hat, wird es einige Zeit dauern, bis ein Verständnis erreicht ist, das es dem Entwickler ermöglicht, die Änderung vorzunehmen, die den Fehler behebt, ohne weitere Änderungen vorzunehmen. TDD kann helfen, aber nur, indem es dem Entwickler mitteilt, dass er die "falsche" Änderung vorgenommen hat. Auch hier muss der Entwickler verstehen, welche Tests welchen Code ausüben, um sicherzustellen, dass bei fehlgeschlagenen Tests nicht versucht wird, die falschen Aussagen zu treffen.

KeithS
quelle
1

Ich nehme es nicht so extrem, aber ich bevorzuge die Verantwortung für den Code . Wenn Sie fehlerhaften Code schreiben, sollten Sie ihn beheben. Dies kann auf Einzel-, Paar- oder Teamebene erfolgen. Es verhindert, dass Sie Ihr Chaos an eine andere Person weitergeben, um aufzuräumen. Dies gilt auch für Änderungen.

Arbeitslast- und Planungsprobleme werden dies überschreiben. Es wäre dumm, die Behebung eines größeren Fehlers zu unterbrechen, da der Schuldige zwei Wochen Urlaub hat.

Das Ziel ist nicht, dass Ihre Mannschaft "das Spiel der Schuld" spielt oder die Anzahl der Fehler zu weit geht (sie sind sowieso nicht alle gleich). Beruhen Sie darauf, wer den Code zuletzt eingecheckt hat oder ob ein Vorgesetzter die Entscheidung trifft und ihn jemandem zuweist, anstatt jeden Teil jeder Codezeile durchzugehen.

Bessere Programmierer reparieren wahrscheinlich viel Code anderer Leute, egal wie Sie ihn zuweisen.

JeffO
quelle