* System właściciela kodu *: czy to skuteczny sposób? [Zamknięte]

50

W naszym zespole jest nowy programista. W naszej firmie stosowana jest zwinna metodologia . Ale programista ma inne doświadczenie: uważa, że ​​określone części kodu muszą być przypisane do konkretnych programistów. Więc jeśli jeden programista utworzył procedurę lub moduł programu, byłoby uważane za normalne, że wszystkie zmiany procedury / modułu byłyby dokonywane tylko przez niego.

Na plus, podobno dzięki proponowanemu podejściu oszczędzamy wspólny czas programowania, ponieważ każdy programista dobrze zna swoją część kodu i szybko wprowadza poprawki. Minusem jest to, że programiści nie znają całkowicie systemu.

Czy uważasz, że to podejście będzie dobrze działać w przypadku systemu średniej wielkości (rozwój witryny sieci społecznościowej)?

sergzach
źródło
23
Pracowałem w ten sposób i zawsze musiałem zmieniać kod, którego nie posiadałem. Ponieważ kod nie był „mój”, zawsze obrażał kogoś, a kod nigdy nie był dokumentowany ani testowany wystarczająco dobrze, aby zmiany były łatwe. W projektach, które posiadałem, zawsze zachęcałem do posiadania grupy wraz z szybką integracją (aby zapobiec długim połączeniom).
Danny Varod,
26
Nie mogę ci wystarczająco podkreślić, jak kiepski jest to pomysł. Poniższe odpowiedzi podsumowują wszystko źle z posiadaniem kodu, więc jedyne, co mogę dodać, to moje osobiste doświadczenie, w jaki sposób sklep z oprogramowaniem, dla którego pracowałem, zmienił się ze świetnego miejsca do pracy z dobrymi ludźmi w koszmar egotystycznych programistów, dwa razy tyle leniwych programistów i okropny, niemożliwy do utrzymania kod kowboja.
wałek klonowy
6
Dawno temu całkowicie zadałem to pytanie: programmers.stackexchange.com/questions/33460/...
Jim Puls
7
Wygląda na to, że próbuje zakodować się jako niezastąpiony.
Iain Holder
6
Wyjaśnienie: kiedy mówisz: „wszystkie zmiany procedury / modułu byłyby dokonywane tylko przez niego”, czy masz na myśli, że nikt inny nie może dotykać tego modułu, czy masz na myśli, że kiedy rozdajemy zadania, przydzielamy zadania związane z tym modułem z programistą, który napisał go (lub zna go) najpierw, jeśli to możliwe? To subtelna różnica, ale naprawdę zmienia charakter pytania.
Scott Whitlock,

Odpowiedzi:

37

Podobnie jak wiele z tych pytań, myślę, że odpowiedź brzmi:

To zależy

Istnieje powód, by sądzić, że zajmowanie stanowiska, że ​​każdy programista powinien znać każdą linię kodu, jest błędne.

Jeśli przez chwilę założymy, że ktoś z głębokim zrozumieniem fragmentu kodu wprowadzi zmiany 5 razy szybciej niż ktoś, kto go nie zna (nie jest to ogromny skok wiary w moje doświadczenie) i zajmuje to około miesiąca doświadczenia w kodowaniu, aby naprawdę dobrze zrozumieć moduł o znacznych rozmiarach (również nie bezzasadny), możemy uruchomić niektóre (całkowicie fałszywe i fikcyjne) liczby:

  • Programista A: ma głębokie zrozumienie
  • Programator B: brak

Powiedzmy, że programista A wykonuje 1 jednostkę pracy dziennie. W ciągu 4 tygodni 5 dni roboczych może wykonać 20 jednostek pracy.

Tak więc programista B, zaczynając od 0,2 jednostki pracy na dzień, a kończąc na 0,96 jednostki pracy w jego / jej 20. dniu (21 dnia jest tak dobry jak programista A), wykona 11,6 jednostki pracy w tym samym Okres 20 dni. W tym miesiącu programista B osiągnął wydajność 58% w porównaniu z programistą A. Jednak teraz masz innego programistę, który zna ten moduł tak samo jak pierwszy.

Oczywiście, przy przyzwoitym projekcie możesz mieć ... 50 modułów? Zapoznanie się z nimi wszystkimi zajmuje około 4 lat, a to oznacza, że ​​programista uczący się pracuje średnio z wydajnością 58% w porównaniu do programisty A ... hmmm.

Rozważmy więc ten scenariusz: ci sami programiści, ten sam projekt (A wie wszystko, a B nie wie o niczym.) Powiedzmy, że w roku jest 250 dni roboczych. Załóżmy, że obciążenie rozkłada się losowo na 50 modułów. Jeśli podzielimy obu programistów równomiernie, zarówno A, jak i B otrzymają 5 dni roboczych na każdy moduł. A może wykonać 5 jednostek pracy na każdym module, ale B otrzymuje, zgodnie z moją małą symulacją Excela, 1,4 jednostki pracy wykonanej na każdym module. Łącznie (A + B) wynosi 6,4 jednostki pracy na moduł. To dlatego, że B spędza większość czasu bez umiejętności korzystania z modułu, nad którym pracują.

W tej sytuacji bardziej optymalne jest skupienie B na mniejszym podzbiorze modułów. Jeśli B skupia się tylko na 25 modułach, otrzymują 10 dni na każdy, co daje 3,8 jednostki pracy na każdym. Programista A mógłby następnie spędzić 7 dni na 25 modułach, nad którymi B nie pracuje, i 3 dni każdy na tych samych modułach co B. Całkowita wydajność waha się od 6,8 ​​do 7 jednostek na moduł, średnio 6,9, a to znacznie więcej niż 6,4 jednostek na moduł wykonaliśmy, gdy A i B równomiernie rozłożyły pracę.

Gdy zawężamy zakres modułów, na których działa B, uzyskujemy jeszcze większą wydajność (do pewnego stopnia).

Trening

Argumentowałbym również, że ktoś, kto nie wie tyle o module, przerwie osobie, która robi o wiele więcej niż ktoś z większym doświadczeniem. Tak więc powyższe liczby nie biorą pod uwagę, że im więcej czasu B spędza na kodzie, którego nie rozumieją, tym więcej czasu A zajmują, zadając pytania, a czasem A musi pomagać w naprawie lub rozwiązywaniu problemów. Trenowanie kogoś jest zajęciem czasochłonnym.

Optymalne rozwiązanie

Dlatego uważam, że optymalne rozwiązanie musi opierać się na pytaniach takich jak:

  • Jak duży jest twój zespół? Czy sensowne jest przeszkolenie wszystkich osób w każdej części, czy jeśli mamy 10-osobowy zespół, czy możemy po prostu upewnić się, że każdy moduł jest znany co najmniej 3 osobom? (Przy 10 programatorach i 50 modułach każdy programista musi znać 15 modułów, aby uzyskać 3-krotny zasięg).
  • Jaka jest rotacja twojego pracownika? Jeśli oddajesz pracowników średnio co 3 lata, a to naprawdę zajmuje więcej czasu, aby poznać każdy zakątek systemu, to nie będzie ich wystarczająco długo, aby szkolenie się zwróciło.
  • Czy naprawdę potrzebujesz eksperta, aby zdiagnozować problem? Wiele osób używa wymówki „co, jeśli ta osoba jedzie na wakacje”, ale wiele razy wzywano mnie do diagnozowania problemu w systemie, z którym nie miałem doświadczenia. Może być prawdą, że doświadczona osoba może znaleźć ją znacznie szybciej, ale to nie znaczy, że nie możesz bez niej żyć przez tydzień lub dwa. Niewiele systemów oprogramowania jest tak krytycznych dla misji, że problem musi zostać zdiagnozowany w ciągu 1 godziny zamiast 5 godzin, inaczej świat się skończy. Musisz rozważyć te zagrożenia.

Dlatego myślę, że „to zależy”. Nie chcesz dzielić 20 modułów pomiędzy dwóch programistów w połowie (10 każdego), ponieważ wtedy nie masz elastyczności, ale nie chcesz też krzyżować 10 programistów na wszystkich 50 modułach, ponieważ tracisz dużo wydajność i nie potrzebujesz aż tak dużej redundancji.

Scott Whitlock
źródło
3
To naturalne, że niektórzy ludzie poznają niektóre części lepiej niż inne. Ale pojęcie „własności” oznacza, że ​​inni ludzie nie mogą dotykać tego kodu bez pozwolenia lub że tylko właściciel ma ostatnie słowo, a to idzie za daleko. Oczywiście tak, „to zależy”, jeśli o to właściwie chodzi.
poolie
1
@poolie - zgadzam się, ale nie wiem, czy to jest takie cięte i suszone. Czy własność naprawdę oznacza „nie wolno dotykać”? Nie jestem do tego przekonany. Myślę, że implikuje to „osoba posiadająca ostateczny autorytet” w tym konkretnym fragmencie kodu. Jest tutaj więcej niż jeden problem ... ale myślę, że sedno pytania dotyczy przydzielania zadań programistom, a nie niedozwolania niektórym programistom pracy na określonym kodzie. Mówienie „programista B nie może działać na tym kodzie” jest po prostu głupie.
Scott Whitlock,
Myślę, że własność oznacza najwyższy priorytet w pracy z fragmentem kodu. Jeśli programista A jest wolny i ma najwyższy priorytet, powinien zacząć pracować z fragmentem, ale programista B nie powinien tego robić.
sergzach
76

To okropny pomysł . W krótkim okresie może być szybszy, ale zachęca do źle udokumentowanego trudnego do zrozumienia kodu, ponieważ tylko koder, który go napisał, jest odpowiedzialny za jego utrzymanie. Kiedy ktoś odchodzi z firmy lub jedzie na wakacje, cały plan zostaje zmarnowany. Utrudnia także przydzielanie obciążeń; co się stanie, gdy dwa pilne błędy wymyślą kod, który „właściciel” jest koderem?

Powinieneś kodować jako zespół . Ludziom w naturalny sposób przydzielane będą zadania i koncentrować się na określonych obszarach, ale należy zachęcać do dzielenia się pracą i współpracować, a nie zniechęcać.

Tom Squires
źródło
5
Zasadniczo zgadzam się na pracę w zespole, ale w praktyce ludzie wydają się radzić sobie lepiej, gdy mają poczucie odpowiedzialności za swoją pracę, o ile nie posuwa się tak daleko, że „nie można zmodyfikować tego kodu, to jest moje!" Dlatego, chociaż mamy projekty zespołowe, w których pracuję, indywidualni programiści są odpowiedzialni za wypełnienie przypisanych części kodu.
Robert Harvey
1
Jednym z największych problemów związanych z posiadaniem kodu jest serializacja. Co się stanie, gdy 90% całej pracy leży w obszarze jednej osoby? Czy reszta zespołu ma siedzieć na kciukach i czekać?
Neal Tibrewala
5
Tam, gdzie pracuję, mamy sekcje kodu, które są „własnością” kogoś (lub jakiejś grupy), ale w żadnym wypadku nie są jedynymi, które dotykają tych plików. Po prostu jest za dużo kodu, aby każdy mógł wszystko wiedzieć, więc ludzie specjalizują się w niektórych podsystemach i są odpowiedzialni za wiedzę i możliwość podejmowania decyzji projektowych na większą skalę w niektórych systemach, ale w innych przypadkach nie jest to rzadkie i w razie potrzeby mogą wprowadzać mniejsze zmiany.
Alex
3
@Robert Harvey: zespół jest właścicielem całego kodu.
Steven A. Lowe
2
„okropny pomysł” jest zbyt silny. Jądro Linux używa tego modelu i wygląda na to, że działało dobrze.
Joh
28

To zależy od dziedziny problemu.

Jeśli chodzi o rzeczy ogólne (tj. Proste akcje CRUD itp.), To zgadzam się z Tomem Squiresem (każdy powinien móc nad tym pracować i edytować).

Jednak ...

Jeśli dane rozwiązanie wymaga wiedzy specjalistycznej w dziedzinie (dużo czasu zostało zainwestowane w przeszłości lub przed wdrożeniem należy przeprowadzić wiele badań, ponieważ jest to coś, co wymieniasz jako wymaganie dotyczące pracy jako specjalistyczną wiedzę, która: nie wszyscy w projekcie mają), wtedy zdecydowanie należy przypisać właściciela do tej części kodu. To powiedziawszy, każdy powinien mieć możliwość wprowadzania modyfikacji w razie potrzeby, ale zawsze powinien być sprawdzony przez osobę, która jest właścicielem tego obszaru projektu.

Nie chcesz, aby cały zespół (lub kilka osób w zespole) badał i uczył się tego samego przedmiotu (zmarnowane cykle). Przypisz właściciela, ale poproś go, aby udokumentował swoje ustalenia i projekty, a może poprowadzi nieformalne (lub formalne, nieważne) szkolenia dotyczące technologii.

Demian Brecht
źródło
2
Dobra uwaga na temat skrzynek krawędziowych. +1
Tom Squires,
1
@ Danny: Nie sądzę, że dokładnie przeczytałeś post. Powiedziałem, że każdy powinien mieć możliwość modyfikowania kodu, o ile jest on sprawdzany przez właściciela. Zasugerowałem również, że ekspert w tej dziedzinie powinien podzielić się swoją wiedzą podczas formalnych lub nieformalnych sesji szkoleniowych.
Demian Brecht
Przepraszam, byłam zmęczona i tęskniłam za tą częścią.
Danny Varod,
+1 Myślę, że to jedyna odpowiedź, która wskazuje, że różne poziomy własności mogą mieć zalety w zależności od projektu.
Thomas Levine
1
Nie uważam tego za własność. Przeglądy kodu są naturalne (tak, naturalne) i równie naturalne jest to, że najbardziej doświadczony programista w danym podsystemie dokonuje przeglądu zmian w tym podsystemie.
Matthieu M.,
10

To okropny pomysł . Pracowałem w firmie, która zastosowała to podejście i jest to prawie przepis na mnóstwo długów technicznych . Najważniejsze jest to, że dwie głowy są prawie zawsze lepsze niż jedna. Dlaczego? Ponieważ jeśli nie jesteś idiotą, wiesz, że nie jesteś doskonałym programistą i nie dostaniesz każdego błędu, który popełnisz. Dlatego potrzebujesz zespołu - więcej oczu patrzy na ten sam kod z różnych perspektyw.

Sprowadza się do jednej rzeczy: dyscypliny . Ilu znasz samotnych programistów, którzy są naprawdę zdyscyplinowani w swoim stylu kodowania? Kiedy nie kodujesz z dyscypliną, bierzesz skróty (ponieważ „naprawisz to później”) i cierpi na łatwości konserwacji kodu. Wszyscy wiemy, że „później” nigdy nie nadejdzie. Fakt : Trudniej jest stosować skróty, gdy jesteś bezpośrednio odpowiedzialny przed kolegami z zespołu. Dlaczego? Ponieważ twoje decyzje będą kwestionowane i zawsze trudniej jest uzasadnić skróty. Wynik końcowy? Tworzysz lepszy, łatwiejszy w utrzymaniu kod, który jest również bardziej niezawodny.

Carl
źródło
9

Zaletą jest to, że nie wszyscy muszą wszystko badać i rozumieć. Wadą jest to, że sprawia, że ​​każda osoba jest niezbędna dla własnego obszaru kodu, a nikt inny nie wie, jak go utrzymać.

Kompromisem byłoby posiadanie co najmniej 2 właścicieli dla każdego obszaru kodu. Wtedy ktoś może iść na urlop, podjąć nową pracę lub przejść na emeryturę, a nadal jest ktoś, kto zna kod (i może przeszkolić nową drugą osobę). Nie wszyscy muszą się uczyć wszystkiego, co jest nieco bardziej wydajne.

Nie pozwól, aby te same 2 (lub 3) osoby cały czas pracowały razem. Wymieniaj pary dla różnych obszarów, aby wiedza została również przypadkowo udostępniona podczas pracy z inną osobą na powiązanym obszarze programu.

czwartek
źródło
1
Lub innymi słowy, polecasz XP :-)
Danny Varod
6

Tak, w krótkim okresie jest nieco bardziej wydajny. I na tym kończą się korzyści. To nawet nie zbliża się do przeważenia kosztów.

Co dzieje się, gdy jest na wakacjach, jest niespodziewanie chory, odchodzi lub zostaje potrącony przez przysłowiowy autobus? Co się stanie, gdy chcesz zwiększyć zasoby, aby uzyskać jedno zadanie szybciej niż inne? Jak skuteczne mogą być recenzje kodu? W jaki sposób menedżer, zwłaszcza ten, który nie jest w bazie kodu, może wiedzieć, czy programista ciężko pracuje, czy naciąga wełnę na oczy? Kto zauważy, że dług techniczny zacznie się zaciągać?

Z mojego doświadczenia wynika, że ​​ludzie, którzy lubią pracować w ten sposób, to w najlepszym razie łowcy chwały, w najgorszym razie leniwi. Lubią być jedyną osobą, z którą możesz się spotkać z danym problemem i lubią, aby ich kod pozostawał prywatny. I często lubią szybko kodować, bez względu na czytelność.

Nie oznacza to, że w zespole 50 programistów każdy powinien znać cały kod, ale zespół 5-7 powinien posiadać moduł wystarczająco duży, aby utrzymać tych ludzi w pracy. Nikt nie powinien posiadać niczego.

pdr
źródło
Powiedziałbym, że zależy to od wielkości i zakresu podstawy kodu. Po osiągnięciu kilku setek milionów linii zdecydowanie jesteś poza obszarem „jeden człowiek może mieć wszystko w swojej głowie” i będziesz musiał zacząć dzielić główne obowiązki.
Vatine
1
@Vatine: Right. Więc dzielisz swój kod na moduły i masz zespół pracujący nad każdym modułem. Nadal nie masz kodu należącego do jednej osoby.
pdr
Tak, podzielenie go na pojedyncze osoby (prawdopodobnie) nie ma sensu, ale z pewnością istnieją pewne argumenty przemawiające za „inną własnością różnych części bazy kodu”.
Vatine
6

Istnieją co najmniej trzy kwestie, na które wskazują pozostałe odpowiedzi; ale chciałbym spróbować potraktować oba z nich razem. Dwie kwestie to:

  • wiedza specjalistyczna : ktoś w zespole ma szczegółową wiedzę na temat określonej dziedziny; wiedza ta jest niezależna od konkretnego wdrożenia tej domeny w projekcie
  • przywództwo : Chociaż prace nad budową projektu mogą być dzielone przez wielu programistów; mapa drogowa, a także natychmiastowe decyzje dotyczące ważnych szczegółów wdrożenia są w gestii konkretnego członka zespołu lub tylko kilku członków zespołu.
  • kod bez kodu : szczególny sposób realizacji projektu nie zależy od stylów kodowania, praktyk ani wiedzy konkretnego programisty w zespole; a dzięki ścisłemu przestrzeganiu dobrze znanego stylu kodowania lub dobrze utrzymanej specyfikacji każdy nowy członek zespołu ma równe szanse na zrozumienie, jak i do czego służy projekt jako doświadczeni twórcy.

Gdy temat dotyczy wyłącznie wiedzy specjalistycznej, sukces projektu może zależeć od wysokiego poziomu wiedzy na temat dziedziny; ale nie zależy to od wiedzy konkretnego eksperta w tej dziedzinie. Eksperci, choć być może rzadcy i cenni, nadal są zasadniczo wymienni; jeden doświadczony księgowy podatkowy jest równie przydatny w projekcie oprogramowania do planowania podatkowego, jak inny, z punktu widzenia wiedzy w swojej dziedzinie. Kwestia staje się jednym z tego, jak dobrze ekspert jest w stanie przenieść swoją wiedzę do projektu.

Gdy tematem jest wyłącznie przywództwo, powodzenie projektu zależy głównie od spójności i wglądu w decyzje podejmowane przez kierownika projektu; chociaż faworyzujemy kierowników projektów, którzy mają doświadczenie w tej dziedzinie lub są dowodzeni jako liderzy projektów, czasami ma to drugorzędne znaczenie. „Lider” może zmieniać się z dnia na dzień, jeśli podejmowane decyzje będą spójne w poszczególnych przypadkach, a każda decyzja zostanie szybko wykonana przez zespół. Jeśli to działa poprawnie; wiele decyzji nie musi być „podejmowanych” przez kierownika projektu, ponieważ zespół już rozumie, jakie decyzje zostaną podjęte.

Nie sądzę, aby pytanie dotyczyło kodu bez ego, ale ciężko jest rozmawiać o własności kodu, nie omawiając również, jak ważna jest ta kwestia. Utrzymanie projektu jest prawdopodobnie większą częścią cyklu rozwoju. Aby zrozumieć ten problem, należy zastanowić się, co by się stało, gdyby niektórzy programiści musieli go natychmiast opuścić. Co by się stało, gdyby cały zespół musiał zostać zastąpiony? Jeśli projekt jest poddany w wątpliwość, ponieważ zależy od niektórych kluczowych graczy, istnieje wysokie ryzyko niepowodzenia. Nawet jeśli nigdy nie stracisz ani jednego członka zespołu, sam fakt, że do realizacji projektu potrzebny jest jeden lub kilku programistów, oznacza, że ​​możesz nie pracować tak wydajnie, jak gdybyś mógł się dowiedzieć, czy jest więcej programistów.

SingleNegationElimination
źródło
6

Własność kodu ma tendencję do zapobiegania refaktoryzacji, tworzenia wąskich gardeł programowania i powodowania problemów z ego, gdy w kodzie występują problemy, które należy rozwiązać.

Polecam skonsultować się z autorami kodu przed zmianą, mimo że kod o wysokim standardzie powinien być wystarczająco udokumentowany, przetestowany jednostkowo, przetestowany pod kątem integracji i przetestowany systemowo, aby uczynić to zbędnym, nadal nie może zaszkodzić uzyskanie innej opinii.

Danny Varod
źródło
5

Jest to złe z wielu powodów, pracowałem w sklepie, w którym próbowali zmienić to z bardziej rozsądnego i było brzydkie.

Powody, dla których jest to złe:

  • Jeśli właściciel kodu bierze urlop i pojawia się jakiś duży błąd w ich materiałach, bardzo trudno i czasochłonnie jest nauczyć się kodu ORAZ naprawić błąd
  • Jeśli właściciel kodu odejdzie z firmy, ich projekty zostaną poważnie cofnięte, ponieważ cała wiedza o dziedzictwie i wiedzy plemiennej właśnie wyszła za drzwi
  • Dokumentacja jest słaba. Jeśli jestem jedyną osobą, która w nim koduje, dlaczego miałbym to dokumentować? Powiązany jest problem polegający na tym, że wszelka dokumentacja, która musi zostać utworzona, będzie prawdopodobnie słaba, ponieważ nikt nie będzie wiedział wystarczająco dużo o kodzie, aby naprawdę stwierdzić, czy dokumentacja jest kompletna, a nawet dokładna.
  • Kod święte wojny mogą łatwo rozpalić się, gdy każdy ma swoją własną piaskownicę, ponieważ inni wspominali, że to może stać się naprawdę głupie bardzo szybko. Problem polega na tym, że dwie osoby muszą ze sobą współpracować, ale żadna z nich nie jest przyzwyczajona do kompromisu.
  • Z tego powodu umiejętności pracy zespołowej nigdy się nie kształtują - ludzie nigdy nie muszą współpracować z innymi.
  • Można łatwo tworzyć lenna, małe królestwa zbudowane z kieszeni odpadów, które niczego nie kupują. Nie wiesz, że tak się dzieje, dopóki nie jest za późno, ponieważ za moduł X lub narzędzie odpowiada Bob, i biada tobie, kto powinien nawet zapytać, co robi Bob w swoim kodzie.
  • Przegrywają recenzje i recenzje użytkowników, ponieważ nikt nie wie nic na temat kodu. Jeśli nie znasz kodu, nie możesz dostrzec miejsc, które nie są właściwe i ograniczają się do komentowania samych konwencji formatowania tekstu i nazewnictwa.
  • A jeśli pracujesz dla mnie ... firma jest właścicielem kodu, a nie ty. Jesteśmy dumni z tego, co robimy i z tego, co osiągamy, i z tego, co piszemy, ale jest to sprawa grupowa, na przykład gdy twoja drużyna wygrywa trudny mecz. Każdy pracownik, który pracuje dla firmy, jest w równym stopniu właścicielem kodu, a podczas wykonywania swojej pracy może go edytować w dowolny sposób, aby wykonać zadanie polegające na realizacji celów firmy.

Największe z nich to problemy personalne i dokumentacja. Ta osoba pewnego dnia wyjdzie, a chłopcze przez kilka tygodni będziecie przesuwać harmonogram w lewo.

Lepszym rozwiązaniem jest zaznajomienie wszystkich z każdą częścią podstawy kodu (lub z pół tuzina części, jeśli jest naprawdę duża i różnorodna) do tego stopnia, że ​​mogą

  • Napraw wszelkie usterki w tym obszarze
  • Dodaj drobne lub umiarkowane nowe funkcje lub ulepszenia

Każda osoba zwykle wie trochę więcej na temat niektórych rzeczy niż inne, więc w przypadku trudnych problemów dwie lub trzy osoby mogą się łączyć, lub ekspert od defacto może wziąć na siebie. Pracowałem w grupach, w których tak było i wyszło naprawdę ładnie. Nie tylko nie było żadnego z wymienionych powyżej wad, personel był znacznie bardziej przewidywalny, ponieważ nie szukaliśmy ekspertów.

Zaletą wyłącznego posiadania kodu jest to, że „właściciel kodu” może robić rzeczy szybciej niż inni, ale jest to prawdą tylko wtedy, gdy każdy jest „właścicielem kodu” w projektach, które się nie pokrywają. Innymi słowy, jeśli ludzie obracają się wokół przewagi „wyłącznego właściciela kodu” odchodzi.

zaraz
źródło
2
Mówisz o rodzaju silnego silosu, którego nie zalecam, i który, jak przypuszczam, jest rzadki. Nie ma żadnego problemu z przydzieleniem komuś zadania i pozwoleniem mu z nim biegać, pod warunkiem, że rozumie, że nadal jest częścią zespołu. Oznacza to, że musi stosować się do standardów i praktyk programistycznych sklepu i ogólnie być życzliwym dla osoby, która musi zachować swój kod za nim. Oznacza to, że zespół musi również zrozumieć, jak działa jego kod i mieć pełny dostęp do niego za pośrednictwem systemu kontroli źródła, aby w razie potrzeby ktoś inny mógł przejąć „własność”.
Robert Harvey
5

Zobacz numer ciężarówki aka Bus Factor

współczynnik autobusowy (znany również jako współczynnik ciężarówki lub numer autobusu / ciężarówki ) to pomiar koncentracji informacji w poszczególnych członkach zespołu. Czynnikiem autobusowym jest całkowita liczba kluczowych programistów, którzy musieliby być obezwładnieni (np. Przez potrącenie przez autobus / ciężarówkę), aby doprowadzić projekt do takiego chaosu, że nie byłby w stanie kontynuować; projekt zachowałby informacje (takie jak kod źródłowy ), z którymi żaden pozostały członek zespołu nie jest zaznajomiony. Wysoki współczynnik magistrali oznacza, że ​​wielu programistów musiałoby zostać usuniętych, zanim projekt musiałby zawieść.

„Uderzenie autobusem” może przybierać różne formy. Może to być osoba podejmująca nową pracę, rodząca dziecko, zmieniająca styl życia lub status życiowy lub dosłownie potrącona przez autobus: efekt byłby taki sam ...

Joshua Drake
źródło
Biorąc pod uwagę historyczne znaczenie źródła, czułem, że jest on autorytatywny. en.wikipedia.org/wiki/WikiWikiWeb wydaje się wyprzedzać powszechne użycie Bus Factor o około 4 lata.
Joshua Drake
1

Podobnie jak w przypadku wielu rzeczy, jest to duże „zależy”. Jeśli jest to ścisłe „nikt inny nie może popracować nad kodem”, prawdopodobnie ma zły wpływ. Jeśli jest to „właściciel musi dokonać przeglądu kodu przed zaakceptowaniem zmiany”, jest to średnio dobre, w zależności od tego, jak chętny jest właściciel, aby zaakceptować zmianę zewnętrzną.

Vatine
źródło
1

Wada jest poważna; „numer ciężarówki” twojego zespołu zmienia się prawie na 1.

Aby przejrzeć, „numer ciężarówki” definiuje się po prostu jako „ilu członków zespołu, w najgorszym przypadku, może zostać trafionych ciężarówką, zanim zespół niezbędny do wykonania jakiegoś krytycznego zadania zostanie utracony”.

Jest rzeczą naturalną i do pewnego stopnia zachęcić deweloperów do skupienia się na subdyscyplinach; gdyby wszyscy musieli wiedzieć wszystko, co ma związek z projektem, nic by się nie stało, ponieważ wszyscy dowiedzieliby się, co zrobili wszyscy inni, dlaczego działa i jak można go zmienić bez zerwania. Ponadto, jeśli deweloperzy robią różne rzeczy w różnych obszarach, jest mniej prawdopodobne, że zmiany się zderzą. Na ogół dobrze jest mieć dwóch lub trzech programistów lub pary programistów, które działają przede wszystkim w określonym podsystemie projektu i dobrze o tym wiedzą.

Jeśli jednak tylko jedna osoba ma kiedykolwiek dotknąć określonej linii kodu, to kiedy ten facet rezygnuje, zostaje zwolniony, idzie na urlop lub kończy w szpitalu, a ta linia kodu jest wykazywana jako przyczyna błędu to musi zostać naprawione, ktoś inny musi wejść i zrozumieć kod. Jeśli nikt inny, jak tylko facet, który to napisał, nigdy go nie widział, zajmie to trochę czasu, aby dojść do takiego poziomu zrozumienia, który pozwoli programistom wprowadzić zmiany, które naprawią błąd, nie robiąc więcej. TDD może pomóc, ale tylko informując programistę, że dokonali „złej” zmiany; ponownie, programista musi zrozumieć, jakie testy wykonują dany kod, aby upewnić się, że testy zakończone niepowodzeniem nie będą próbowały sformułować błędnych twierdzeń.

KeithS
źródło
1

Nie podchodzę do tego ekstremalnie, ale wolę odpowiedzialność za kod . Piszesz uszkodzony kod, powinieneś go naprawić. Można to zrobić na poziomie indywidualnym, pary lub zespołu. Zapobiega przekazaniu bałaganu komuś innemu do posprzątania. Dotyczy to również zmian.

Zastąpią go problemy z obciążeniem i harmonogramem. Byłoby głupotą powstrzymywać się od naprawienia poważnego błędu, ponieważ winowajca jest na dwa tygodnie wakacji.

Nie chodzi o to, aby twoja drużyna grała w „grę obwinianą” lub nie przesadzała z licznymi błędami (i tak nie wszystkie są równe). Oprzyj go na tym, kto ostatni sprawdził kod lub poprosił przełożonego o podjęcie decyzji i przypisanie go komuś zamiast przejścia przez każdą część każdego wiersza kodu.

Lepsi programiści prawdopodobnie naprawią wiele kodów innych osób, bez względu na to, jak je przypisujesz.

JeffO
źródło