Tylko że nie jest wystarczające aby dowozili szybciej niż pojedynczy programista. Aby ten model był opłacalny ekonomicznie to muszą dowozić co najmniej 2x szybciej, bo masz zaangażowane 2x więcej osób (albo inaczej - 2x mniej zadań równoległych przy tej samej liczbie osób). I jestem na 99% przekonany że nie dowożą szybciej niż dwóch programistów pracujących nad dwoma problemami niezależnie.
Tutaj są trzy błędy które widzę.
Po pierwsze, wychodzisz z założenia (jak już wielu przed Tobą), że proces programowania to jest po prostu "wytwarzanie linijek". Ale nagraj się kiedyś jak pracujesz przez 8h, to zobaczysz ile czasu schodzi na faktyczne pisanie i dostarczanie linijek, ile na debugowanie, ile na wymyślanie rozwiązań, ile na testowanie, ile na wymyślenie modelu, etc. Przy czym weź pod uwagę, że czasem rozwiązuje się problemy w aplikacji, które zajmują kilka dni żeby je znaleźć, a po sesji debugowania okazuje się że bugfix tego to jest np jedna linijka - w odpowiednim miejscu - tylko że znalezienie tego miejsca, i wydedukowanie że to jest najlepsze miejsce na naprawę tego buga, to jest 99% wysiłku poświęcone na jego naprawę.
Drugi błąd, to jest to że "dowiezienie więcej rzeczy" == "lepiej". Przy czym Agile uczy nas że czasem możesz dowieść więcej rzeczy, które są mniej wartościowe. Jeśli pracujesz w dwie osoby, praktycznie zawsze problem jest zrozumiany lepiej, z szerszej perspektywy, więc nawet jeśli objętościowo linijek i feater'ów jest dowiezionych mniej, to nadal one z reguły są lepiej dopasowane do wymagań klienta i product ownera. Jest oczywiście sytuacja gdzie takie coś nie ma sensu - i to by było w sytuacji w której masz perfekcyjną wiedzę o oprogramowaniu, kliencie i feature'ze który chcesz napisać - kiedy nie potrzebujesz żadnych analiz, gadać z nikim, nie potrzebujesz nic wymyślić - tylko piszesz, że tak powiem "na pałę". Wtedy faktycznie pair programming nie ma sensu, i można to zrobić samemu (jakbyś robił jakiś trywialny program). Tylko że z mojego doświadczenia wynika że w dużych aplikacjach tak praktycznie nigdy nie jest, zawsze te rzeczy są skomplikowane.
No bo czym jest Pair Programming w gruncie rzeczy - to jest rozłożenie odpowiedzialności za dostarczenie funkcjonalności na więcej osób niż jedną, w celu zwiększenia jakości, dopasowania, stopnia przetestowania, zmniejszenia ilości błędów podczas developowania.
I po trzecie, kolejne błędne przekonanie jest takie że nad jednym taskiem pracuja zawsze dwie osoby i tylko dwie osoby. Podczas gdy w pair programming z prawdziwego zdarzenia ludzie zmieniają pary w trakcie taska, więc czasem na jednym zadaniem/funkcjonalnością pracują 3-4 osoby. Jeśli jeden task zajmie powiedzmy 5 dni na dostarczenie, to nie ma żadnego powodu żeby każdego z tych 5 dni nie pairować się z kimś innym.
Natomiast co do Aby ten model był opłacalny ekonomicznie to muszą dowozić co najmniej 2x
, to weź pod uwagę, że często funkcjonalności dostarczane z PP są dużo wyższej klasy, niż przez kogoś dostarczonego w pojedynkę - takie funkcjonalności będą dostarczały mniej bugów, oraz będą łatwiejsze do zmiany w przyszłości. Więc nawet jeśli ktoś w PP dostarczałby powiedzmy z prędkością x1.8, to nadal to się opłaca, jeśli wytworzony w ten sposób kod oszczędzi późniejszych tasków na pracę z nimi.
No i jeszcze kolejny argument - jeśli pracujemy w dwie osoby, to skupiamy woje uwagi na kod nawzajem. Czasem dochodzi do sytuacji że jednej osobie jest się łatwiej rozkojarzyć, uciec na poboczne tory, etc. Nie mówię tutaj oczywiście o oglądaniu YouTube'a, tylko czasem jest sytuacja w której ktoś naprawia buga lub próbuje zrobić feature, i zaczyna go robić w nieodpowiedni sposób i zajmie mu powiedzmy 20 minut żeby się zorientować że to jest zła droga. Może też szukać jakiejś informacji gdzieś w wiki lub gdzieś w historii przez 20 minut - obecność drugiej osoby, która ma takie info od razu skraca ten czas.
I jestem na 99% przekonany że nie dowożą szybciej niż dwóch programistów pracujących nad dwoma problemami niezależnie.
Szybciej może nie.
Powiedziałbym że tak samo szybko, albo delikatnie wolniej (rzędu 4-8%).
Tylko czy oznacza to od razu że skoro dwie osoby na raz oddadzą task 4-8% wolniej, to oznacza to od razu że to jest nieopłacalne? Moim zdaniem nie, bo:
- Jeden task, dwie osoby oddadzą prawie połowę szybciej niż ktoś kto pracuje sam - dzięki temu mamy krótsze cykle wytwarzania oprogramowania, jesteśmy bardziej Agile. Jeśli przyjdzie PO i powie "ja chce mieć to na
za 3h
", to dwie osoby na raz są w stanie to dostarczyć, jedna niekoniecznie.
- Po drugie, jak już mówiłem, wytworzony w ten sposób kod jest wyższej jakości i jest tańszy do utrzymania na dłuższą metę, nie mówiąc o tym że funkcjonalność często jest lepsza i ma mniej bugów.
- Po trzecie, my w ten sposób oszczędzamy na code review - co jest dużym zyskiem czasu, więc dla nas to jest opłacalne. Na pewno każdy z was miał sytuację że czasem PR/MR'y siedziały godziny jak nie dni w review, zwłaszcza takie które miały wiele iteracji.
- Po czwarte - zysk z knowledge share'a jaki w ten sposób osiągamy jest niemierzalnie duży. Cały mój zespół składa się z programistów którzy grają do jednej bramki, myślę że w dużej mierze przez PP.
- Po piąte - jakoś nie słyszę od ludzi z góry że mój zespół jest wolniejszy, mimo że jesteśmy jedynym w firmie który stosuje PP.
A to akurat właśnie nie działa, bo dwie osoby piszące razem kod będą dobrze znały wspólny kontekst i nie zauważą np. że kod jest niezrozumiały dla kogoś z zewnątrz. Bardzo wielką zaletą CR jest możliwość pokazania kodu komuś kto go właśnie wcześniej nie widział i musi się zmierzyć z całością od razu, bez całego wcześniejszego kontekstu. Jeżeli to idzie gładko, znaczy że kod jest dobry.
Już mówiłem - nic nie stoi na przeszkodzie żeby zmieniać się podczas taska, tak żeby więcej osób mogło popracować nad zadaniem.
Poza tym - ja tylko powiedziałem że my w zespole nie robimy Code Review, bo uznaliśmy to za zbędne. Jeśli Ty masz ochotę, to nikt Ci nie broni spędzić dnia z kimś na Pair Programming, a potem i tak oddać taki task do Review, droga wolna, be must guest! :> Ja tylko mówię, że my uznaliśmy że to nic dodatkowego nie wnosi i z tego zrezygnowaliśmy, ale jeśli Ty nie chcesz to nie musisz.