czwartek, 29 września 2011

W co się gra w projektach?

Był sobie zespół programistyczny złożony z paru osób. Wszyscy z żyłką pasji zabrali się do projektu. Ponieważ wychodzili założenia, że dobrze się uczyć na własnych błędach, przeprowadzali regularne retrospekcje. W trakcie retrospekcji analizowali sprawy takie jak:
  • zgodność szacowania z oczekiwaniami
  • pokrycie testami i ich skuteczność
  • ilość błędów znalezionych w fazie testów
  • czytelność kodu
i jeszcze parę innych rzeczy. Świetnie się przy tym bawili, bo mieli poczucie, że się rozwijają w obszarze, w którym pracują. Na bazie wspomnianych retrospekcji zaczęły wyodrębniać się różne rodzaju reguły i standardy. Wszyscy w zespole zgodnie uznawali, że odkryte zasady pozwalają efektywniej pracować i chętnie się im podporządkowywali. Postawili własne wiki, na którym spisywali standardy przyjmowane w zespole, i które potem stopniowo modyfikowali, dopasowując je do aktualnych potrzeb i doświadczenia.

Ponieważ praca szła wyjątkowo sprawnie, sponsor zespołu począł rekrutować kolejnych programistów i kolejnych i kolejnych. Pierwsi członkowie zespołu zostali liderami, potem kierownikami. Wszystko szło sprawnie. Naturalnie nowe osoby w dziale (tak, tak zespół stał się Działem, a jakże!) były zapoznawane z obowiązującymi i sprawdzonymi standardami i zobligowane do ich przestrzegania.

Po jakimś czasie nasi kierownicy zauważyli, że standardy są kiepsko przestrzegane. Trudno im było zmobilizować programistów do ich stosowania. Długo zastanawiali się jak zaradzić tej sytuacji. Ponieważ byli wytrawnymi inżynierami, podeszli do sprawy stricte analitycznie. Wykombinowali wcale skomplikowany wzór, który uzależniał dodatek premiowy od stopnia przestrzegania standardów. Na przykład: za 80% pokrycia testami +2%premii, za każde 50 błędów zgłoszonych przez testerów + 1,3%premii, za utrzymanie szacowania +3,2% premii....pomysł genialny...

i wtedy zaczęła się GRA.

Zasady gry

Intencją kierowników było nagradzanie osób z zespołu za przestrzeganie standardów i zachęcanie do ich stosowania. Jednak zupełnie nieświadomie stworzyli GRĘ, o następujących zasadach:
  • uczestnikami gry są członkowie zespołu projektowego
  • wygrywasz wtedy, gdy zdobywasz jak największą ilość pieniędzy
  • reguły zdobywania pieniędzy określone są poprzez standardy obowiązujące w zespole
Szybko okazało się, że programiści i testerzy są bardzo wytrawnymi graczami. Często wygrywali...,ale:
  • pokrycie testami było idealne, lecz: testowane były gettery, settery, testy bardziej przeszkadzały niż pomagały
  • programiści szacowali idealnie co do dnia, lecz bardzo, ale to bardzo pesymistycznie
  • testerzy znajdowali tysiące błędów, lecz większość z nich dotyczyła nadmiarowych spacji w labelkach, braku kropek itp
  • standard kodowania był przestrzegany, lecz tam gdzie było można programiści i tak pisali po swojemu
  • retrospekcje upadły; standardy przestały się rozwijać, w końcu stały się nieadekwatne do obecnej sytuacji i przeszkadzały w pisaniu
Co się u licha stało? - zapytali kierownicy. Przecież chcieliśmy dobrze :(

Konflikt wartości

Znajomy metodolog zajmujący się badaniem hierarchii wartości u pracowników (bywa, że firmy chcą wiedzieć co jest dla Ciebie ważne: rozwój, profesjonalizm, bezpieczeństwo, kariera i w jakiej kolejności) wyłożył mi cierpliwie, że w żadnym poważnym teście nie zestawia się wartości istotnych w miejscu pracy z wartościami typu: rodzina, zdrowie, gdyż te pierwsze zawsze muszą przegrać. Gdy test nie szanuje tej zasady, to otrzymujemy zafałszowane dane, gdyż wyniki testu będą "skrzywione" w kierunku właśnie rodziny, zdrowia itp. W sumie logiczne, że gdy mam do wyboru karierą versus trwały uszczerbek na zdrowiu, to motywowany samozachowawczym instynktem, będę chronił swoje zdrowie, nawet kosztem kariery.

W omawianym wyżej zespole, kierownicy popełnili właśnie ten metodologiczny błąd No, bo jeśli wybieram między zmieszczeniem się w szacowaniach (nawet jeśli trzeba by ociupinkę je zawyżyć), a gwiazdkowymi prezentami dla rodziny, to szacowanie będzie idealne - choćby nie wiem co! I wcale nie w tym rzecz, że jesteśmy źli, upadli, oszuści. Nic z tych rzeczy. Tak jesteśmy skonstruowani, a granica między rzetelnym oszacowaniem a nieco zawyżonym jest tak płynna, tak rozmyta, że bardzo łatwo i bardzo szybko racjonalizujemy sobie drobne jej przekroczenia. Myślę, że większą winę ponosi ten, kto doprowadził do sytuacji sprzyjającej takiemu postępowaniu, niż ten kto rzeczywiście tak postępuje.

Opłakane skutki

Ponieważ przestrzeganie standardów było tylko środkiem do celu, standardy przestały się rozwijać, przestały żyć. W niczyim interesie nie było modyfikowanie standardów i ulepszanie ich. Po zmieniać i komplikować sposób na zarabianie, skoro już mam opracowane sposoby wygrywania?

Motywowanie pieniędzmi jest w porządku, gdy w działaniu ludzi o pieniądze przede wszystkim chodzi. Weźmy takich na przykład sprzedawców. W uproszczeniu: sprzedawca sprzedaje produkt/usługę i przynosi pracodawcy fakturę, od której otrzymuje procent. To będzie działać. Ale jeśli sprzedawca będzie dostawał premię za ilość spotkań, to znów zaczyna się GRA. Bo oto może się okazać, że spotkania są i owszem, ale z firmami, które prawdopodobnie nigdy nie zostaną naszymi klientami. Kto za to ponosi odpowiedzialność? Przede wszystkim ten, kto stworzył GRĘ.

Gdy Twoi pracownicy pracują kreatywnie (tu programiści) i zasady pracy muszą dojrzewać i ulepszać się wraz z nimi, to nigdy przenigdy nie wolno uzależniać wynagrodzenia od ich przestrzegania. Takie działanie zabije kreatywność i zasady pracy szybko się usztywnią.

Przestrzegaj standardów "bo warto"

By standardy w zespole działały i ewoluowały muszą być ważne tak po prostu. Ludzie muszą widzieć w nich wartość, muszą chcieć ich przestrzegać, muszą dostrzegać, że dzięki nim stają się lepsi. Tak właśnie działali pierwsi członkowie zespołu z naszego obrazka. Wtedy standardy będą ewoluowały, a ludzie będą chętnie je rozwijać. W przeciwnym razie ryzykujesz, że standardy będziesz wprowadzał sam, siłowo, albo za pomocą nowo zatrudnionych członków Komitetów Standaryzacyjnych i tak skomplikujesz zasady GRY, że już nikt nie połapie się o co w ogóle na samym początku chodziło.

A co z pieniędzmi?

Opisaną scenę można by streścić następująco: Motywuj ludzi pozafinansowo, ale płać im dobrze...:) W sumie nic dziwnego - jeśli podstawowe potrzeby nie są zaspokojone, to nie ma co myśleć o tych wyższych. Oczywiście, że potrzeba tu wyważenia, złotego środka, w końcu każdy budżet jest ograniczony. "Płacić dobrze" zazwyczaj nie oznacza "więcej niż konkurencja". Może być nawet mniej w zamian za inne pozafinansowe dobra. To jest sprawa bardzo indywidualna i chcę robić nieuprawnionych uogólnień.

3 komentarze:

Jacek Laskowski pisze...

Trochę błędów językowych, ale mimo to czytało się wspaniale! Proszę o więcej historyjek. Proszę.

chlebik pisze...

Bardzo ładne, dodam do tego, iż może te standardy były przestrzegane właśnie dlatego, iż to obecni kierownicy 'nauczyli się na własnych błędach'.

Zawsze człowiek jest w stanie o wiele więcej pracować (w sensie samych godzin, jak i 'dorzucania' sobie pracy by przestrzegać standardów), jeśli to ON SAM doszedł do takiego wniosku i przekonania. W związku z tym, iż obecni kierownicy sami stworzyli standardy bo zauważyli, że podnoszą one ich wydajność, przestrzegają ich z chęcią i mają z tego 'fun'.

Jednakże wdrożenie nowego programisty w przestrzeganie standardów (danych na zasadzie 'tak sie u nas koduje') jest... trudne. I może gdyby któryś z tych kierowników usiadł z takim koderem i pokazał na przykładach dlaczego te standardy są OK to byłoby łatwiej. Ale to takie moje gdybanie.

Konrad Garus pisze...

Dwa bardzo luźne skojarzenia:

1. "W organizacji hierarchicznej każdy awansuje aż do osiągnięcia własnego progu niekompetencji." Programiści być może powinni zostać programistami i w ten sposób prowadzić i inspirować zespół.

2. Całe programowanie to gra, ale należy pamiętać że to gra zespołowa, a pierwszym i najważniejszym celem jest dobry produkt (wiadomo co to "dobry" oznacza). (polecam http://helion.pl/ksiazki/agile-software-development-gra-zespolowa-wydanie-ii-alistair-cockburn,agilsd.htm)