bookmark_borderKomunikacja asynchroniczna

Kiedy myślimy o zespole programistów, a konkretnie o jego wydajności – przychodzi nam na myśl zapewne jego doświadczenie, motywacja, czy uzdolnienia. Tymczasem sposób w jaki porozumiewają się członkowie zespołu może zaoszczędzić lub roztrwonić znaczące ilości czasu.

Komunikację w zespole można rozróżnić na synchroniczną i asynchroniczną. Pierwsza oznacza, że nadawca i odbiorca wiadomości muszą w tym samym czasie skupić swoją uwagę. Drugi rodzaj pozwala na odpowiedź po pewnym czasie.

Dominujący rodzaj komunikacji w zespole deweloperskim ma fundamentalne znaczenie dla jego wydajności.

Jeśli zespół komunikuje się synchronicznie, to każda rzecz wymagająca wyjaśnienia rozprasza programistów. Oderwanie dewelopera od kodu, choćby na pięć minut, rujnuje jego skupienie i obniża produktywność.

Przykłady komunikacji synchronicznej:

  • programista czegoś nie wie i potrzebuje zadać pytanie, wstaje, idzie do biurka kolegi i pyta
  • product owner odpowiada na pytania podczas regularnych spotkań, gdzie omawiane są po kolei wątpliwości różnych osób
  • tester nie wie jak przetestować zadanie, podchodzi do programisty i pyta
  • programista potrzebuje pomocy w debugowaniu, podchodzi do pierwszego z brzegu kolegi i prosi o pomoc

Marnujemy w ten sposób dużo czasu i energii. Z pozoru jest łatwiej – nie musimy czekać na pomoc, możemy omówić coś na żywo, wydawać by się mogło bardziej dogłębnie, a jednak… podczas spotkań głównie czekamy na swoją kolej, w trakcie pracy przy biurku współpracownicy przerywają nam flow.

Komunikacja asynchroniczna dla sporej ilości osób jest nieintuicyjna, ma jednak ma wiele zalet:

  • pozwala osiągać długie okresy skupienia
  • pozostawia pisemny ślad, do którego można się odwołać, który można przeszukiwać po jakimś czasie
  • pozwala udzielać bardziej przemyślanych, szczegółowych odpowiedzi na pytania

O ile dla pracowników „z biznesu” asynchroniczność może wydawać się dziwna, o tyle dla programistów powinna być oczywistością. Każdy przecież wie, że ponowne załadowanie kontekstu zajmuje czas, że czekanie na odpowiedź serwera blokuje wykonanie programu. Mimo to – w realnym życiu często zdarza nam się o tych zasadach zapominać.

Przykłady komunikacji asynchronicznej:

  • product owner odpowiada na pytania mailowo, nie natychmiast, ale sprawnie
  • tester zamiast pokazywać programistom problemy opisuje je słownie albo nagrywa filmy pokazujące błędy
  • programista mający pytanie zadaje je na slacku lub mailowo, a osoby z zespołu w momencie, gdy nie potrzebują skupienia odpowiadają mu

Najbardziej efektywne zespoły, w jakich miałem przyjemność pracować komunikowały się w dużym stopniu asynchronicznie. Analogicznie – najbardziej niewydajne, omawiały godzinami na spotkaniach w dużych grupach kwestie, które mogły zostać omówione w e-mailu.

Warto pochylić się nad sposobem w jaki organizujemy sobie pracę i dostrzec wzorce, a następnie zastanowić się, czy nie sabotujemy własnej produktywności złymi praktykami.

Please follow and like us:

bookmark_borderProgramista 10x

Programista 10x to osoba, której wydajność jest dziesięciokrotnie większa od przeciętnego inżyniera oprogramowania. Niektórzy nie wierzą, że jest to możliwe, inni twierdzą, że sami są programistami 10, a nawet 100x.

Czy programista 10x istnieje? Jak zostać programistą 10x?

Początki

Źródeł terminu można się dopatrywać w eseju Zespół chirurgiczny z książki Legendarny osobomiesiąc Freda Brooksa, w którym pisze on o różnicach w wydajności programistów:

…w skrócie programista zarabiający 20 000$ rocznie może być 10 razy bardziej produktywny od od tego, który zarabia 10 000$ rocznie. Jak również na odwrót…

Sama idea bycia 10x krążyła w środowisku biznesowym od dość dawna – bycia dziesięć razy lepszym, tworzenia produktu przewyższającego konkrencję, organizowania czasu w sposób optymalny i w ogóle bycia produktywnym najbardziej jak się da.

Wydaje się, że do narodzin terminu Programista 10x bezpośrednio przyczynił się Grant Cardone, autor Reguły 10x. Jego książkę wydano w 2011 i właśnie od tamtego czasu termin zaczął żyć własnym życiem:

Mit, czy rzeczywistość?

Wiele osób przeczy możliwości istnienia programisty 10x. Wydaje się, że niemożliwym jest, by jedna osoba była dziesięciokrotnie bardziej produktywna od drugiej. Jest w tym jednak mentalna pułapka. Mysleć tak można tylko patrząc na programowanie jak na sport lub pracę fizyczną, w której jeden robotnik na taśmie nie może być znacząco szybszy od drugiego, gdzie wybitny sprinter nie przebiegnie dystansu czterokrotnie szybciej od konkurentów choćby był półbogiem.

Programowanie to dziedzina intelektualna, a inteligencja nie skaluje się liniowo.

Jakiś czas temu Jordan Peterson podczas jednego ze swoich wykładów, IQ, a rynek pracy, zaprezentował tabelę, w której rozpisał zalecane zawody odpowiadające różnym poziomom ilorazu inteligencji. Przykładowo przedział 87-93 IQ predestynować miałby do bycia pakowaczem lub dozorcą, zaś do bycia programistą zalecał kanadyjski psycholog coś pomiędzy 100, a 115.

Oczywiście IQ nie jest miarą programistycznego mnożnika. Warto o tym jednak pamiętać, że to geniusze posuwali ludzkość do przodu, że bez kilku tysięcy zaledwie wybitnych osób nie mielibyśmy elektryczności, silnika spalinowego, czy telefonii komórkowej.

Nie ma wątpliwosci, że jest możliwe, iż jedna osoba będzie umysłowo wielokrotnie bardziej wydajna od innej.

Cechy

Kim trzeba być by zostać programistą 10x? Co mają ze sobą wspólnego wysokowydajni inżynierowie oprogramowania?

Pewnie, by z należytą starannością odpowiedzieć na to pytanie trzebaby przeprowadzić badania, wziąć pod lupę takich programistów jak Linus Torvalds, Donald Knuth, Niklaus Wirth, Guido van Rossum, czy Dennis Ritchie.

Na to jednak czasu nie ma, więc trzeba pogdybać. Zacząłbym jednak od tego, że niekoniecznie musi to być osoba o wysokim IQ. Programowanie to nie fizyka teoretyczna. Inne cechy osobowe są tu równie istotne.

Pasja, profesjonalizm i odpowiedzialność

To te trzy cechy postawił bym na pierwszym miejscu ex aequo.

Nie wyobrażam sobie bycia efektywnym programistą nie pasjonując się swoim zawodem. Banał, a jednak jest to rzecz kluczowa. Nawet jeśli programistą zostaliśmy z pasji do bezpieczeństwa finansowego i klimatyzowanego biura, to wierzę, że da się zapałać miłością do pisania kodu. Bez niej trudno nam będzie wybić sie przed szereg.

Profesjonalizm to szeroki temat. Na pewnym forum przeczytałem kiedyś interesujące sformułowanie bazujące na zasadzie Pareto: 80% osób pracujących w dowolnym  zawodzie wykonuje go nieprofesjonalnie, jedynie 20% to prawdziwi specjaliści. W dużej mierze jest to spostrzeżenie trafne. Przy odpowiedniej dozie samokrytyki przyznamy autorowi rację.

Być profesjonalnym programistą oznacza dla mnie przede wszystkim traktowanie swojej pracy poważnie. Nieprofesjonalne jest:

  • pisanie kodu złej jakości
  • wybieranie technologii tylko dlatego, że nie chce nam się uczyć nowej
  • wybieranie technologii tylko dlatego, że chcemy się jej nauczyć
  • wszelkie formy lenistwa
  • nadmierna pedanteria

Programista 10x – jeśli można go opisywać przez brak – tych cech miał nie będzie. Wysoka jakość pracy, chłodne, analityczne podejście do wyboru narzędzi, pracowitość, pragmatyzm. Taki zestaw cech bez wątpienia podniesie naszą wydajność, jeśli nie dziesięciokrotnie, to przynajmniej dwukrotnie.

Ostatnia rzecz to odpowiedzialność – programista odpowiedzialny nie będzie obiecywał gruszek na wierzbie, nie będzie twierdził, że wykona produkt choć doskonale zdaje sobie sprawę, że w zadanym budżecie i czasie nie uda się zachować choćby minimalnej wymaganej przez zdrowy rozsądek jakośći. Programista wydajny będzie też odpowiedzialny w tym sensie, że nie będzie zaciągał bez wiedzy managementu długu technicznego, chwaląc się potem swoją wydajnością, a po cichu pozostawiając problem swoim następcom i firmie.

Warunki pracy i zaangażowanie

Nie wszędzie da się być wysokowydajnym. Jeśli jedno przedsiębiorstwo dysponuje łopatą, a drugie koparką, to siłą rzeczy nawet najbardziej zmotywowany, silny, zdrowy i wydajny kopacz rowów nie będzie bardziej efektywny przy użyciu łopaty.

Programistę 10x mogą pomóc stworzyć warunki pracy polegające na zapewnieniu mu dobrego sprzętu, świętego spokoju bez przerywania co chwila pracy, dostępu do wiedzy i partnerskiej, profesjonalnej relacji z przełożonymi.

Programista 10x jest bez wątpienia osobą bardzo, ale to bardzo zaangażowaną, wewnętrznie zmotywowaną. Być może lubi swoją pracę, może wierzy w projekt, możliwe, że ma w sobie ogromną dyscyplinę. Jaki by nie był powód – bez zaangażowania nie będzie pracowitości, a bez niej nie będzie efektu.

Podsumowanie

Programista 10x to ideał. Wymarzony pracownik każdej firmy, dla której tworzenie oprogramowania jest kluczowe. Można jego narodziny wspomóc tworząc odpowiednią strukturę organizacji, ale trzeba też umieć znaleźć go na rynku pracy. Warto jednak. Warto poświęcić czas, poszukać go, doskonale opłacić i wykorzystać ten rzadki talent. Być może dzięki tej jednej, kilku osobom to nasza organizacja będzie kolejnym gigantem, może to u nas powstanie przełomowa technologia, genialny produkt…

Please follow and like us: