Czy własność indywidualnego kodu jest ważna? [Zamknięte]

48

Jestem w trakcie sporu z niektórymi współpracownikami o to, czy własność zespołowa całej bazy kodu jest lepsza niż własność poszczególnych składników.

Jestem wielkim zwolennikiem przydzielania każdemu członkowi zespołu mniej więcej równej części bazy kodu. Pozwala ludziom być dumnym z ich tworzenia, daje przeglądarkom błędów oczywiste pierwsze miejsce do przydzielania przychodzących biletów i pomaga złagodzić „syndrom pękniętego okna”.

Koncentruje również wiedzę o konkretnej funkcjonalności z jednym (lub dwoma) członkami zespołu, co znacznie ułatwia naprawianie błędów.

Przede wszystkim decyduje o najważniejszych decyzjach jedna osoba, która ma duży wkład zamiast komitetu.

Nie opowiadam się za wymaganiem zgody, jeśli ktoś chce zmienić kod; być może przegląd kodu powinien zawsze należeć do właściciela. Nie sugeruję też budowania silosów wiedzy: w tej własności nie powinno być nic wyłącznego.

Ale sugerując to moim współpracownikom, otrzymałem mnóstwo odpowiedzi zwrotnych, z pewnością znacznie więcej niż się spodziewałem.

Pytam więc społeczność: jakie są Twoje opinie na temat pracy z zespołem przy dużej bazie kodów? Czy brakuje mi czegoś w czujnym zachowaniu własności zbiorowej?

Jim Puls
źródło
Co to jest „zespół rozbite okno”? Nie znam tego terminu.
um
1
Zespół
rozbitego
1
„Koncentruje także wiedzę na temat konkretnej funkcjonalności z jednym (lub dwoma) członkami zespołu” ... „Nie sugeruję też budowania silosów wiedzy”. Czy to nie jest sprzeczność? Dla mnie koncentracja wiedzy z jednym / dwoma członkami jest definicją silosu wiedzy.
śleske
Wydaje się to bardzo podobne do innego pytania, które pojawiło się kilka lat później.
Eric King,

Odpowiedzi:

46

Wierzę, że własność zespołu jest znacznie bardziej korzystna na dłuższą metę.

Wystarczy spojrzeć na następujące 2 scenariusze, aby zrozumieć, dlaczego koncentracja wiedzy na minimalnej liczbie osób jest mniejsza niż idealna:

  • Członek zespołu spotyka niefortunny wypadek
  • Członek zespołu spotyka się z lepszymi możliwościami zatrudnienia

Oczywiście osoba / osoby, które piszą poszczególne sekcje, będą miały większą wiedzę na ten temat, ale nie ulegają pokusie, aby uczynić je jedynym silosem wiedzy. Silosy zapewnią Ci krótkoterminowe wygrane przez długotrwałe bóle.

To, że nie masz indywidualnej własności części kodu, ponieważ go napisałeś, nie oznacza, że ​​nadal nie będziesz mieć aspektów „dumy ze swojego dzieła” itp. Nie sądzę, aby posiadanie zespołu znacznie zmniejsz wszelkie osobiste poczucie własności napisanego kodu.

Dan McGrath
źródło
7
Z perspektywy OO oba scenariusze brzmią: „Członek zespołu nie jest w pobliżu”. Czy „lepsze zatrudnienie” nie jest tylko podklasą „niefortunnego wypadku”?
Dan Rosenstark
4
@ Yar: tak, ale myślę, że nadal możesz poprosić kogoś, kto znalazł „lepsze zatrudnienie”, aby wrócił po więcej pieniędzy ... żadna kwota nie zwróci go spod autobusu :-)
Dean Harding
4
Zachęcam deweloperów z mojej grupy, aby zapytali / sparowali z oryginalnym autorem w ten sposób, aby uzyskać szybszą naprawę błędu wraz z pewną dystrybucją wiedzy.
dietbuddha
17
Wiesz, jest to jedna z tych rzeczy, które są tak cudowne w teorii, ale rzadko działają w praktyce. To z powodu tragedii społeczności. Jeśli wszystko jest obowiązkiem wszystkich, to nic nie jest odpowiedzialnością nikogo, ponieważ wszystko jest obowiązkiem kogoś innego. Psychologowie nazywają to „próżnowaniem społecznym”. Potrzebujesz równowagi między indywidualną odpowiedzialnością a odpowiedzialnością zespołu.
Jason Baker
4
Kłóciłbym się z tym @Jason. W takim przypadku potrzebujesz lepszych pracowników, mniejszych zespołów. Presja ze strony rówieśników powinna być w stanie utrzymać to w ryzach, o ile drużyna nie jest pęczkiem płatków. Własność zespołu nie rodzi braku indywidualnej odpowiedzialności.
Dan McGrath
27

Ostatecznie zespół jest właścicielem kodu. Jednak z wszystkich wymienionych przez ciebie powodów wyznaczyliśmy poszczególnych autorów dla określonych części kodu. Każdy autor ponosi główną odpowiedzialność za swoją część kodu, a wtórną odpowiedzialność za bazę kodu jako całość.

Jeśli problem z częścią bazy kodu pojawia się na powierzchni, próbuję wrócić do osoby, która pierwotnie napisała kod w celu naprawy. Oczywiście nic nie stoi na przeszkodzie, aby inni członkowie zespołu zastosowali poprawkę; wszyscy członkowie zespołu powinni znać kod wszystkich innych. Ale zawsze najpierw staramy się uzyskać poprawkę od oryginalnego autora. W końcu napisali kod; oni są najbardziej obeznani z tym.

Pracowałem w środowiskach zespołowych, ponieważ ponieważ ludzie nie mieli poczucia własności w tym, co napisali, nie byli zmuszeni do pisania doskonałego kodu, a jedynie zwykły kod.

Robert Harvey
źródło
5
+1 Za kwestię dotyczącą lepszej jakości kodu ze względu na poczucie własności. To z pewnością istnieje.
Orbling
+1 (+10, gdybym mógł): własność wpływa na jakość kodu, nie tylko dlatego, że daje poczucie dumy, a wraz z nim silniejszą motywację, ale także dlatego, że pomaga zarządzać złożonością kodu, jak wyjaśniono bardzo dobrze w eseju „Trzymanie programu w głowie”, patrz paulgraham.com/head.html .
Giorgio
19

Chociaż zgadzam się ze stanowiska biznesowego co do powodów, dla których warto szerzyć wiedzę o produkcie; rzeczywistość jest taka, że ​​jednostka skupiająca swoje wysiłki na danym obszarze czegokolwiek z czasem stanie się znacznie bardziej zorientowana w danym obszarze.

Zignorowanie tego oznacza zignorowanie nauki. Mózg niestety nie jest w stanie zatrzymać wszystkiego, co napotka. Przypomina, co jest ważne i cenne w danym momencie, ale nawet to przechowywanie zmniejsza się z czasem.

Zgadzam się z tobą, że posiadanie określonego modułu lub przedziału w ramach większej bazy kodu generalnie przyniesie lepsze wyniki. Czy ktoś odejdzie bez powiadomienia utrudni sukces? Na pewno. Ale udawanie, że wszyscy członkowie zespołu powinni mieć taką samą wiedzę na temat bazy kodu, jest naiwne i nie robi nic, aby poprawić kod; próbuje chronić kod. Ochrona kodu jest rolą firmy z oczywistych powodów. Czas pracy włożony w ochronę kodu może często stać się szkodliwy tak samo.

Nie upewniasz się, że każdy gracz w twojej drużynie może zagrać w rozgrywającego, prawda? Argumentowałbym, że upewnienie się, że każdy członek zespołu ma stawkę w całej bazie kodu, działa tak samo, jak próba nakłonienia każdego gracza w zespole do rozgrywającego rozgrywającego na satysfakcjonującym poziomie ... nie sumuje się. Czy masz kopie zapasowe? Jasne, że tak ... ale członkowie zespołu powinni mieć tożsamość w zespole. Wierzenie, że wszyscy są tacy sami, wymaga innego rodzaju bólu ...

Aaron McIver
źródło
5
pro drużyny mają rezerwowych rozgrywających
Steven A. Lowe
1
@ Steven Już to powiedziałem; ale dziękuję za powtórzenie ... „Czy masz kopie zapasowe? Jasne, że tak ... ale członkowie zespołu powinni mieć tożsamość w zespole. Wierzenie, że wszyscy są tacy sami, wymaga innego rodzaju bólu”.
Aaron McIver
Drużyny NFL mają trzech rozgrywających, nie przeszkolonych zawodników. Analogie sportowe rzadko działają w IT ;-)
Steven A. Lowe
3
@ Steven Wiem, jak działa NFL, znowu nie powiedziałem, że kopie zapasowe nie istnieją, ale próba rozpowszechnienia tej wiedzy w całym zespole jest bezcelowa. Deweloperzy == gracze. Jeśli chcemy wprowadzić takie tytuły, jak rozgrywający == architekt, moglibyśmy, ale sprowadza się to do pojedynczego zespołu próbującego osiągnąć jeden cel. Każdego tygodnia 45 graczy pasuje, a spośród tych 45 graczy 6,6% ma wiedzę na temat obsługi pozycji rozgrywającego. Brzmi dla mnie idealnie; w przeciwieństwie do większości tych postów, chcąc, aby 75% zespołu miało wiedzę na temat obsługi rozgrywającego.
Aaron McIver
10

Nie wiem, czy własność poszczególnych kodów jest dobrym pomysłem. Przynajmniej nie w tym sensie, że ludzie mogą powiedzieć „To jest mój kod i zrobię z nim, co chcę”. Może lepiej powiedzieć, że powinieneś mieć indywidualne zarządzanie kodem : kod powinien być własnością zespołu, ale jest jedna konkretna osoba, której zespół przekazuje odpowiedzialność i uprawnienia.

Powodem tego jest to, że jeśli jest to odpowiedzialność wszystkich, to nie jest to odpowiedzialność nikogo.

Jason Baker
źródło
+1 za „Powodem tego jest to, że jeśli jest to odpowiedzialność wszystkich, to nie jest to odpowiedzialność nikogo”.
Karthik Sreenivasan
@KarthikSreenivasan: Dokładnie, a wtedy niektórzy dysfunkcyjni członkowie zespołu zaczną (1) wprowadzać losowe zmiany w kodzie „ponieważ cały zespół jest właścicielem kodu” i (2) nie naprawiając błędów, które wprowadzają ”, ponieważ obowiązkiem całego zespołu jest napraw je". Myślę, że idealne rozwiązanie gdzieś pomiędzy własnością indywidualną a własnością zespołową.
Giorgio
8

Byłbym zwolennikiem posiadania zespołu nad osobą z następujących powodów:

  • Spójność kodu w całym projekcie
  • Promuje dyskusję o kodzie, która zawsze prowadzi do lepszych, bardziej sprawdzonych rozwiązań
  • Jeśli jeden członek zespołu jest chory (lub gorzej), cała sekcja kodu nie podlega opóźnieniom
  • Członkowie zespołu mogą pracować nad wszystkimi częściami projektu, co służy wbudowanemu przeglądowi kodu w proces programowania
morganpdx
źródło
6

Specjalizacja jest w porządku - w przypadku dużej bazy kodu może to na dłuższą metę zaoszczędzić sporo czasu na komunikację - ale własność nie.

Chodzi mi o to, że postawa powinna być taka, że zespół ma błąd i nikt nie powinien mówić, że „och, tylko X może dotknąć tego kodu, więc to nie mój problem”. Jeśli jesteś częścią zespołu, Twoim obowiązkiem jest również poprawianie błędów w całej bazie kodu, jeśli możesz, i robienie tego poprawnie. Osoba X może być najlepszym wyborem, ale należy się spodziewać, że ktoś to zrobi, jeśli będzie musiał to zrobić. To oczywiście wymaga napisania kodu w sposób, który pozwala i zachęca członków zespołu do pracy z nim. Posiadanie kodowego kodu tego zabrania, dlatego staraj się krystalicznie czystego, prostego kodu, ponieważ pozwala to większości programistów na pracę z nim. Możesz iść z przeglądu, aby utrzymać go w ten sposób.


źródło
5

Muszę się z tobą nie zgodzić: własność zespołu w bazie kodu jest znacznie lepszą opcją niż własność indywidualna.

Oczywistym minusem indywidualnej własności jest to, że jeśli coś się stanie jednemu pracownikowi (zwolnienie, przejście na emeryturę, zachorowanie itp.), To chyba, że naprawdę napisał czystego kodu, trochę potrwa, zanim ktoś inny przyjmie jego kod, zwłaszcza jeśli muszą również zarządzać własnym kodem.

To także zbyt wiele narzędzi, które ułatwiają posiadanie zespołu. Przeglądy kodu, kontrola źródła - są to rzeczy, które zachęcają zespół do zaangażowania w całej bazie kodu. Poza tym, w jaki sposób przypisujesz określoną część bazy kodu tylko jednej osobie? Czy tylko mówisz, że tylko ta osoba może modyfikować ten plik?

Wreszcie myślę, że jeśli jedna część bazy kodu się zepsuje, zbyt łatwo jest obwiniać osobę odpowiedzialną za to, a to tylko powoduje więcej problemów.

Saurabh Sharan
źródło
5

Myślę, że potrzebujesz obu, ponieważ istnieje napięcie między obiema metodami.

Jeśli dla dowolnego fragmentu kodu jest tylko jedna osoba, która może nad nim popracować, to jest to naprawdę złe w perspektywie długoterminowej dla firmy, szczególnie gdy rośnie, ponieważ każdy programista staje się punktem porażki. Z drugiej strony własność indywidualnego kodu (miejmy nadzieję) umożliwia szybszy czas dostawy, ponieważ deweloper ogólnie woli takie podejście (zachęta), ponieważ programista bardzo dobrze zna kod itp. Istnieje również problem z czasem: powinno być możliwe przydzielać programistom konkretne projekty w zależności od potrzeb biznesowych, ale jeśli robisz to codziennie, to jest okropne (choćby dlatego, że programiści go nienawidzą, ale także dlatego, że koszt zmiany jest po prostu zbyt duży i spędzasz większość czasu robiąc to nic).

IMO, jedna rola menedżera polega na znalezieniu równowagi między nimi. Przegląd kodu, standardy kodowania, standaryzacja na zestawie narzędzi powinny również pomóc zmniejszyć problem awarii. W końcu głównym celem konserwowalnego kodu jest rozwiązanie tego problemu.

David Cournapeau
źródło
4

Myślę, że zbiorowe posiadanie kodu jest nieporównywalnie lepsze niż indywidualne posiadanie kodu.

Nie przejmuję się argumentem ciężarówki - w indywidualnym modelu własności utrata właściciela jest kosztowna pod względem czasu potrzebnego na przejęcie kogoś przez kogoś innego, ale zdarzenie jest na tyle rzadkie, że zamortyzowany koszt jest niski.

Uważam raczej, że zbiorowe posiadanie kodu prowadzi bezpośrednio do kodu wysokiej jakości. Wynika to z dwóch bardzo prostych powodów. Po pierwsze, ponieważ bolesną prawdą jest to, że niektórzy z waszych programistów nie są tak dobrzy jak inni, a jeśli posiadają kod, kod ten będzie słaby; udostępnienie go lepszym programistom poprawi go. Po drugie, przegląd kodu: jeśli każdy jest właścicielem kodu, każdy może go przejrzeć i ulepszyć; nawet dobrzy programiści piszą kod częściowy, jeśli pozostawieni są na swoich urządzeniach.

Mówię to na podstawie doświadczenia z mojego obecnego projektu. Chcemy ćwiczyć własność zbiorową, ale są pewne elementy systemu, które się wyspecjalizowały - ja i inny facet jesteśmy de facto właścicielami systemu kompilacji, na przykład jest facet, który wykonuje większość pracy nad przychodzącymi strumieniami danych , inny facet zajmujący się importem obrazów i tak dalej. W kilku z tych obszarów (szczególnie, muszę przyznać, w mojej okolicy!) Poważnie ucierpiała jakość kodu - są błędy, nieporozumienia, kłótnie i włamania, które po prostu nie przetrwałyby uwagi innych osób w zespole.

Zauważam, że możesz zyskać niektóre korzyści z kolektywnego posiadania kodu, posiadając indywidualną własność kodu, gdy własność określonego fragmentu kodu przemieszcza się regularnie między różnymi programistami regularnie (np. Co trzy miesiące lub każde wydanie - może nawet każda iteracja?) . Programowy odpowiednik płodozmianu. To może być zabawne. Jednak nie zamierzam tego próbować.

Tom Anderson
źródło
1

Nie sądzę, aby własność kodu zespołu była tak ważna, jak to, że wielu współtwórców rozumie podstawową architekturę panujących podsystemów.

Na przykład mamy kilku facetów w naszym zespole, którzy tworzą administracyjne strony internetowe dla naszych produktów serwerowych. Zbudowaliśmy niestandardowy silnik skryptowy po stronie serwera, abyśmy mogli zasadnie wywoływać funkcje C na serwerze bezpośrednio z naszych skryptów Java lub HTML. Myślę, że ważniejsze jest, aby nasi faceci z „sieci” rozumieli, jak korzystać z tego silnika, a nie być współwłaścicielem aplikacji stron internetowych.

Pemda
źródło
0

Myślę, że w momencie pisania kodu przejmujesz indywidualną własność kodu, a następnie przekazujesz go zespołowi. W ten sposób wszyscy biorą odpowiedzialność i wnoszą swój wkład. Każdy powinien chcieć naprawić błąd kodowania, który stworzył. Wraz z przeglądem kodu tworzy to wyższe standardy. Nikt nie chce sprzątania po innych.

Pomyśl więcej odpowiedzialności i mniej własności. W końcu ten, kto pisze czeki, jest prawdziwym właścicielem.

JeffO
źródło
0

Jim, jestem z tobą na 100%. Jestem w trakcie tej samej bitwy w moim miejscu pracy - dlatego natknąłem się na twoje pytanie.

Widzę to tak: „gdy każdy jest właścicielem, nikt nie jest właścicielem”.

Dla mnie nie ma jednego ważniejszego czynnika dla jakości kodu niż własność i odpowiedzialność.

Przykład z prawdziwego życia ilustruje to dobrze. co lepiej zadbać: prywatny trawnik lub park społeczności? Dość oczywiste.

Nawiasem mówiąc, to niekoniecznie musi być zamienione na „elastyczność zespołu”. Oznacza to jedynie, że gdy ktoś jest właścicielem czegoś, jest WŁAŚCICIELEM - i to tylko na jeden dzień.

acohen
źródło
0

Dla mnie zależy to od dynamiki twojego zespołu.

Na przykład, jeśli masz zespół, który nie jest zunifikowany według standardów, recenzji, testów metodycznych lub jeśli masz zespół, w którym poziomy kompetencji różnią się znacznie między członkami, dobrze jest poszukać silniejszego pojęcia własności kodu z bardziej modułowym sposobem myślenia.

Brak tego, na przykład, twój starannie zaprojektowany interfejs zgodny z zasadami SOLID może szybko zostać zrujnowany przez kogoś, kto nawet nie wie, że „SOLID” oznacza i chce cały czas dodawać do interfejsu nowe eklektyczne funkcje dla „wygody”, np. To zdecydowanie najgorsze.

Możesz także poradzić sobie z niechlujnymi współpracownikami, których pomysł naprawienia błędu polega na naprawieniu symptomu bez zrozumienia głównego problemu (np. Próba odpowiedzi na raport o awarii po prostu poprzez umieszczenie obejść w kodzie tylko po to, aby ukryć błąd i przenieść śmiertelne działania niepożądane u kogoś innego). W takim przypadku nie jest tak źle, jak sabotaż projektu interfejsu i możesz chronić swoje intencje dzięki starannie skonstruowanym testom jednostkowym.

Idealnym rozwiązaniem jest jednak zaostrzenie zespołu do tego stopnia, że ​​pojęcie autorstwa i własności nie staje się już tak ważne. Recenzowanie nie polega tylko na poprawie jakości kodu, ale także na poprawie pracy zespołowej. Normy nie polegają tylko na spójności, poprawiają pracę zespołową.

Są jednak scenariusze, w których wzajemna ocena i faktyczne dostosowanie wszystkich do standardu jest po prostu beznadziejna i przyciągnie wielu beznadziejnie niedoświadczonych krytyków. Powiedziałbym, że wiele z tego, czy własność kodu czy własność zespołu ma większy priorytet, będzie zależeć od zdolności Twojego zespołu do przeprowadzenia efektywnej oceny wzajemnej i pozostawienia wszystkich, którzy skorzystali z niej (zarówno pod względem samej recenzji) i dzięki temu zbliżamy się do siebie pod względem sposobu myślenia i standardów). W dużych, luźnych i / lub odmiennych zespołach może się to wydawać beznadziejne. Jeśli twój zespół może funkcjonować jak „oddział”, w którym ledwo możesz nawet powiedzieć, kto co napisał, wyłączna własność zacznie wydawać się głupim pomysłem.

W tego typu scenariuszach dalekich od idealnych koncepcja własności kodu może w rzeczywistości pomóc. Stara się wyjść z najgorszego scenariusza, ale może pomóc, jeśli praca zespołowa jest generalnie beznadziejna, jeśli chodzi o ogrodzenie kodu autora. W takim przypadku zmniejsza się praca zespołowa, ale może być lepiej, jeśli „praca zespołowa” prowadzi tylko do chodzenia.


źródło