Najpierw działa. Potem wygląda.

Ostatnio wracając do domu przez Sikornik zastanawiałem się nad prawami walki zdefiniowanymi w Extreme Ownership. I przyszło mi do głowy, że ja sam mam jedno nadrzędne prawo, którym kieruję się od wielu lat.

Najpierw ma działać. Potem zajmujemy się wyglądem.

Co jeśli chcemy nawiązać do Extreme Ownership brzmiałoby zapewne:

Misja jest nadrzędna. Nie sposób jej realizacji.

Problem pojawia się kiedy rzemiosło staje się celem samym w sobie. A uwierzcie mi — byłem osobą, software developerem, który bardzo dążył do tego by kod był dobrze zaprojektowany, charakteryzujący się najwyższymi standardami. I to czasami stawało się problemem.

Kiedy kupuję śrubokręt, oczekuję że będzie wkręcał śruby. To jest jego misja. To jest jego nadrzędny cel istnienia. Potem przychodzą inne wymagania — czy dobrze leży w ręce, czy ma tryb lewostronny, czy nie męczy nadgarstka po godzinie. Ale to wszystko jest drugorzędne wobec jednego: musi wkręcać śruby. Śrubokręt który pięknie leży w dłoni i nic nie wkręca to dekoracja, nie narzędzie.

Kod jest narzędziem. Produkt jest narzędziem. Obydwa mają misję.

Szkolenie

Pamiętam szkolenie dla praktykantów kiedy po raz pierwszy mnie olśniło. Zadanie było proste: w określonym czasie napisać kod który czyta karty w formacie YAML i przetwarza je według określonych reguł. Godzina zero — nikt nie miał nic działającego. Wszyscy mieli za to pięknie podzielony kod na klasy, elegancką architekturę, przemyślaną strukturę folderów.

Poza jedną osobą.

Jego kod był brzydki. Metody statyczne wszędzie — coś co wtedy błędnie uznawaliśmy za antywzorzec. Ale działał. Robił dokładnie to co miał robić. Nic ponadto, nic poniżej.

Pochwała poszła do właściciela “brzydkiego” kodu. Bo jako jedyny wykonał misję.

A nam z Żółwiem — głównym prowadzącym tamto szkolenie — przyszło po raz pierwszy powiedzieć na głos zasadę według której żyliśmy od lat, która dla nas była intuicyjna, a dla innych — ze zrozumiałych powodów — nie.

Na polu walki w Extreme Ownership misja jest nadrzędna. Dowódca wydaje rozkaz z intencją — co ma zostać osiągnięte. Nie jak. To nie jest istotne, bo sytuacja na polu walki może zmieniać się dynamicznie. Operator ma zrozumieć intencję zadania i je wykonać, mając na uwadze swoje mocne i słabe strony, to co umie. To samo tyczy się ludzi z którymi pracuje.

Nasz praktykant — czy to przypadkowo, czy intencjonalnie, to nieistotne — zrobił to co do niego należało, mając na uwadze ograniczenia czasowe oraz swoje własne, i skupił się by dowieźć rozwiązanie.

Deadline24Lite-wyniki

Mój własny kod z Deadline24 był nieelegancki. Duplikaty, słabe testy, zero architektury. Ale robił to co powinien i mogłem szybko zmieniać fragmenty nie wpływając na inne zachowania — co w warunkach zawodów było krytyczne. Nikt z jury nie patrzył na strukturę folderów. Patrzyli na ilość punktów na tablicy.

Good enough is the target.

To nie jest pozwolenie na lenistwo. To jest precyzja w definiowaniu celu. “Good enough” oznacza: spełnia misję. Nie więcej, nie mniej — na tym etapie. Refaktoryzacja ma sens kiedy kod działa i kiedy jego niedoskonałość zaczyna kosztować. Nie wcześniej.

Wiele razy widziałem produkty, które wyglądały jak dopracowane przez szwajcarskiego zegarmistrza, które nie robiły tego czego w danym momencie potrzebowali użytkownicy.

Wiele razy też widziałem produkty prowizoryczne, sklejone taśmą — jak ten który mój znajomy zrobił na szybko na drukarce 3D — które ludzie chętnie kupowali. Potem je technologicznie ulepszył.

Coś prowizorycznego które działa

Jeśli mogę rozwiązać problem klienta nie pisząc ani jednej linijki kodu — to czemu miałbym pisać? Kod nie jest celem. Jest jednym z narzędzi do osiągnięcia celu. Czasem najlepszym, czasem nie.

Zawiodłem kiedy mój produkt nie robi tego co powinien. Nie wtedy kiedy mój kod jest nieelegancki.

Jest jeszcze jeden słoń w pokoju, o którym trzeba powiedzieć wprost. “Good enough” nie jest stałą. W dużej mierze zależy od doświadczenia danej osoby.

Kiedy zaczynałem przygodę w pierwszym projekcie, mój “good enough” wyglądał jak kod praktykanta z tamtego szkolenia — działał, ale ledwo, i często był kruchy i niepodatny na zmiany.

Dziś mój “good enough” wygląda inaczej, bo wiem więcej. Wiem co mogę sobie odpuścić bez konsekwencji, a które zaniedbanie kopnie mnie w cztery litery za jakiś czas. To wszystko nauczyłem się w boju, na własnych błędach.

Często używamy metafory “małych kroków” jako strategii tylko dla początkujących. Małe kroki dotyczą każdego — ale to doświadczenie zmienia definicję “małego” kroku.

Juniorowi mały krok to działający skrypt. Seniorowi mały krok to działający skrypt z granicą, którą wie że może przekroczyć — i wie dlaczego jej nie przekracza.

Działanie jest nadrzędnym celem. Reszta jest w Twojej gestii.