Czy własność funkcji jest dobrą praktyką?

22

Ostatnio w mojej firmie zasugerowano, że jeden programista powinien skupić się (i tylko jeden) na jednej funkcji. Oznaczałoby to coś takiego, jak odejście dewelopera od normalnej rutyny zespołu, zwolnienie go z innych obowiązków (spotkań itp.), A ta osoba byłaby „jedyna” odpowiedzialna za tę funkcję, pod względem technologicznym.

Dla przypomnienia, używamy SCRUM w SAFe i mamy pełnoetatowych programistów na zespół, dzieląc kontrolę jakości i właścicieli produktów między naszymi dwoma zespołami (Android i iOS).

Chociaż zgadzam się, że zwiększyłoby to wydajność w krótkim okresie, mam wrażenie (i myślę, że nauczyłem się tego na uniwersytecie), że jest to zła praktyka z wielu powodów:

  • Przegląd kodu traci wartość.
  • Minimalne dzielenie się wiedzą.
  • Przyrost ryzyka
  • Utrata elastyczności zespołu.

Czy mam rację, czy to wcale nie jest zła praktyka?

mdelolmo
źródło
3
Moja natychmiastowa reakcja jest taka, że ​​może to zadziałać, jeśli zrobisz to z umiarem, ale masz rację co do problemów, jeśli posunę się za daleko. Z drugiej strony, z mojego doświadczenia wynika, że ​​każda funkcja ma już faktycznego właściciela: ostatnią osobę, która spędzała dużo czasu nad nią pracując.
Ixrec,
jeden programista powinien się skoncentrować (i tylko jeden) ” - jeśli chcesz mieć SPOF, warto to zrobić w ten sposób. Niedawno sformułowałem teorię empiryczną, zgodnie z którą osoba, której najbardziej potrzebujesz w określonej sytuacji („ wtf?! Dlaczego tak to napisał? ”), Jest zazwyczaj dokładnie tą, która jest absolutnie nieosiągalna.
JensG,
@JensG: Meh, mam teorię empiryczną, że osobą, której najczęściej potrzebuję („wtf? Dlaczego on tak to napisał?”), Jestem ja, i jako taki czynnik autobusowy dla „zapamiętywania rzeczy, które powinny były zostać zapisane w tym momencie „wynosi 0. Jest to po prostu bardziej zauważalne, gdy ktoś mnie blokuje, ponieważ martwię się tym, zamiast ponownie sprawdzać istniejący kod od zera na jego podstawie ;-)
Steve Jessop
@SteveJessop: Jasne, próbując inżynieryjne innych ludzi sposób myślenia, badając kilka KLOC ich kodu, podczas gdy klient krzyczy na ciebie, że potrzebuje rozwiązanie teraz ( ! Lub inny ) może być fajny pomysł dla niektórych osób, ale Nie jestem na tyle bystry, by zobaczyć coś śmiesznego w marnowaniu czasu, że zamiast tego mógłbym spędzić bardziej produktywnie.
JensG,
@JensG: na szczęście moi klienci są bardziej towarzysko niż twoi. Dlatego nie jestem pod tak dużą presją, aby angażować się w takie magiczne myślenie, które prowadzi do wniosku, że bycie dla mnie ważnym naprawdę powoduje, że ludzie są mniej osiągalni przeze mnie. Jako taki, pomyślałem, że w tym, co powiedziałeś, był element żartowania, więc tak, jestem na tyle nerdy, aby znaleźć zabawną sytuację, w której rekompensujesz niezrozumiały kod, próbując zatrzymać wielu ludzi, którzy pamiętają, jak to działa. Zwłaszcza, że ​​takie wtfi są często moją własną głupią winą, a nie winą moich kolegów.
Steve Jessop,

Odpowiedzi:

37

Na podstawie mojego 20-letniego doświadczenia lepiej jest zmieniać obowiązki właścicieli kodu między projektantami lub przynajmniej mieć parę właścicieli. Własność pojedynczej funkcji wiąże się z następującymi problemami, o których kilka wspomniałeś:

  • ma tendencję do projektowania szufladek i ograniczania ich możliwości rozwoju
  • umieszcza wszystkie jajka w jednym koszyku, więc jeśli ktoś zostanie potrącony przez autobus lub zrezygnuje, może być dziura w wiedzy
  • jedna osoba może nie widzieć problemu w kodzie i bez recenzji właściciela kodu opinie są znacznie mniej skuteczne
  • trudno jest zachować spójność i czytelność kodu, jeśli wszyscy pracują nad kodem przy użyciu własnego stylu - chociaż można to obejść za pomocą wytycznych dotyczących stylu, subtelności mogą się wkradać, szczególnie gdy stosuje się konwencję nad konfiguracją, w której ludzie polegają na domyślnym zachowaniu
  • programiści mogą dążyć do ochrony i obrony swojego kodu, jeśli są jego właścicielami, co może hamować ewolucję kodu - jeśli kilka osób jest właścicielami, tendencja ta jest zmniejszona
Jason K.
źródło
6
Absolutnie. Ważne jest, aby wspomnieć o czynniku autobusowym jako najbardziej widocznym pojedynczym problemie z własnością tylko dla jednej osoby.
JensG,
1
Czynnik autobusowy należy jednak wymieniać w stosunku do kosztów i YAGNI, a także czy autobus rzeczywiście okaleczy Twoją organizację, czy po prostu spowoduje wiele problemów. Gdyby istniał wybór między utratą, powiedzmy, 3 godzin tygodniowo na zawsze, upewnieniem się, że dwie osoby są wykształcone na temat określonego fragmentu kodu zamiast tylko jednego, lub straceniem, powiedzmy, 60 godzin jako jednorazowej dla kogoś, kto mógłby się wychować aby przyspieszyć w przypadku trafienia jednego z programistów, w wielu przypadkach wybrałbyś jednorazowy koszt. Ale z podanych powodów silosy wiedzy mają inne wady, ważniejsze (choć mniej oczywiste).
Steve Jessop,
13

Własność funkcji jest nieunikniona, a dobre wykonanie może być dobrą rzeczą. Pomaga budować mistrzostwo i pozwala na autonomię - dwa ogólnie uznane filary zaangażowania . Wyjaśnia, kto jest odpowiedzialny za ten kod, i pomaga w delegowaniu, komunikacji i innych sprawach.

Ale nie mówisz o tym. Mówisz o stworzeniu nowego zespołu - odcięciu tej osoby od reszty kodu. To nie jest świetne. To ogranicza ich karierę. Dodaje to ryzyko do projektu / firmy. Szkodzi towarzyszowi.

Więc może być trochę umiaru, aby odwrócić to od złego pomysłu.

Telastyn
źródło
1
Nie zgadzam się, że posiadanie kodu przez jedną osobę jest nieuniknione, ale będzie własnością niewielkiej liczby osób. Widziałem organizacje, które źle radziły sobie z udostępnianiem kodu, ale robiły to samo. Najbardziej efektywne konfiguracje, które widziałem, to kiedy 2-3 osoby znały fragmenty kodu i współpracowały. Zmniejszyło to stres i izolację między programistami, ponieważ nie byli sami na haczyku, gdy coś się nie udawało, a opóźnionym funkcjom można poświęcić więcej uwagi, aby dotrzymać terminów bez szybkich ramp szkoleniowych innych osób w organizacji.
Jason K.,
1
@Jason - na pewno w zespole powinno być kilka osób wygodnych i zdolnych do pracy nad fragmentem kodu. Ale jedna osoba skończy jako ekspert od tematu po prostu pracując nad tym najbardziej.
Telastyn
zgadzają się, że często się to zdarza, jest najbardziej prawdopodobnym scenariuszem i że wiedza specjalistyczna w tej dziedzinie jest dobra - jedynym nieporozumieniem jest to, że jest nieuniknione tylko dlatego, że widziałem lepsze sukcesy, ponieważ kilka osób jest MŚP w danym obszarze, ponieważ w znacznym stopniu się pokrywają
Jason K ,