Rok temu, 14 listopada z wielką nadzieją zaczynałam pracę w nowej firmie*. Dziś, chcę Wam opowiedzieć o tym, jak to jest być zadowolonym Programistą (oczywiście w zupełnie subiektywnej ocenie).
Prawdziwe problemy, prawdziwych ludzi
Zacznę od rzeczy, która wydaje mi się być chyba najważniejsza: cel.
I niby proste to jak drut i oczywiste, ale uwierzcie mi, że w mojej dotychczasowej karierze bywało z tym bardzo kiepsko. Są firmy, gdzie kolejne zadanie to bezosobowo sformułowane polecenie, ticket do zamknięcia. Pracowałam też z user story, które potrafiły lepiej wytłumaczyć co mam dostarczyć. Niemniej w większości moich poprzednich projektów użytkownik był naprawdę tajemniczym tworem. Rozmawiał z nim jego manager, który relacjonował to analitykom, którzy z kolei rozmawiali z product ownerami. Był projekt, gdzie śmieliśmy się, że użytkownicy to chyba nie istnieją, bo nigdy nikt z naszego biura nie miał okazji z nimi rozmawiać. Nawet bugi zakładane były przez QA a nie przez samych użytkowników…
I to potrafiło mi naprawdę dać w kość. Szczególnie, gdy z dokumentacji zadań wynikały dziwne rzeczy i mimo prób, nawet nasz product owner czy architekt nie był w stanie ich zweryfikować. Zdarzało mi się dodać funkcjonalność i naprawdę zastanawiać się, czy przez jej skomplikowanie ktokolwiek z niej skorzysta (albo żartować, że jak się już ją zrozumie to dostanie się awans).
W mojej obecnej pracy wszystko kręci się wokół naszych klientów. Każdy zespół, każdy produkt, rozwiązuje ich realne problemy biznesowe. Wiemy, że nasi użytkownicy korzystają z aplikacji codziennie, często to ich główne centrum dowodzenia, dlatego UX i tworzenie łatwych, spójnych i zrozumiałych interfejsów jest niesamowicie ważne. I mówię to ja, backendowiec, który na bieżąco sprawdza i dyskutuje designy, tak, żeby rozumieć zasady działania nowych funkcji i wiedzieć, co dokładnie realizuje API, które dostarczam.
Skąd wiemy co nasi użytkownicy myślą i czego potrzebują? Bo z nimi rozmawiamy. Czy to przez research, sesje z mockami, przez beta releasy. Klienci mogą w każdej chwili w łatwy sposób zostawić nam i feedback , czy też skorzystać z forum społeczności, gdzie pojawiają się pomysły na nowe rozwiązania.
Nie ma tu miejsca na wydaje mi się, że ktoś z tego skorzysta (choćby i rzucone przez dyrektora), albo bezmyślne kopiowanie konkurencji.
Takie podejście zmienia perspektywę i powoduje, że nie mam poczucia klepania kodu, a rozwiązywania realnych problemów. Dla prawdziwych ludzi. Pomagania im w ich codziennej pracy, tak by ich biznes rozwijał się jak najlepiej.
Rozwiązywanie dla klienta ma jeszcze jedną zaletę. Skutecznie motywuje programistów by nie ulepszać w nieskończoność swoich rozwiązań. Nie zrozumcie mnie źle, nie chodzi o to, że produkujemy kiepski kod, ale raczej o to, że jeśli jest good enough to przechodzimy do kolejnego zadania.
Autonomiczne zespoły
Brzmi jak catchy hasło, ale działa całkiem sensownie w praktyce.
To zespół sam odpowiada za tempo i sposób pracy. Za wybór technologii (tu do autonomii warto dorzucić naprawdę wielu wymiataczy, którzy chętnie dzielą się wiedzą, więc to nie jest tak, że niedoświadczony zespół jest wrzucony na wielką wodę podejmowania ważnych technicznych decyzji, a radę naprawdę łatwo uzyskać). Za priorytetyzację zadań. Za kierunek w jakim zmierza produkt. Każdy zespół oprócz programistów ma swojego designera, product managera i tech leada. Dodatkowo w ramach większych grup współpracujemy z data analitykami, resercherami, czy ux writerami. Wszystko po to by ograniczyć zależności i móc samodzielnie pracować.
Przykładem takiej autonomicznej decyzji może być np. praca w Kanbanie, co sprawdza się naprawdę znakomicie i daje świetną elastyczność, przez co nasz produkt powstaje szybko i w odpowiedzi na feedback. Wybraliśmy też, jeden standup na tydzień, zamiast codziennych, co nie oznacza, że się nie komunikujemy (nasz Slack czasem płonie od sucharów, merytoryczne dyskusje zazwyczaj załatwiamy jako podTalk, czyli rozmowę między biurkami (albo przy white boardzie jak ktoś chce coś narysować).
Ograniczenie bezsensu
Jeśli zapytacie mnie o jedną zasadę, która obowiązuje absolutnie na każdym szczeblu firmy i każdym dziale, to jest nią: Use Good Judgement (UGJ) i nawet nie uwierzycie jak ona wiele zmienia. Masz wątpliwość przy podjęciu decyzji? Use Good Judgement — odnosi się to do wakacji, kolacji dla zespołu, kosztów podróży służbowej, materiałów do nauki, czy korzystania z benefitów.
Większość wewnętrznych procesów jest naprawdę uproszczona (m.in logowanie czasu, pobieranie akcesoriów IT, czy raportowanie (korzystamy z 15five, które moim zdaniem jest game changerem jeśli chodzi o współpracę z bezpośrednim przełożonym).
Co więcej, nikt (prawie nikt?) nie nadużywa UGJ. Co bardzo dobrze wpływa na zaufanie w ramach firmy i działa w obie strony.
Ludzie, od których naprawdę się uczę
Dostęp do wiedzy w firmach IT potrafi być różny. Czasem zatrudniani są Geniusze czy Magicy, którzy za nic nie chcą bądź nie potrafią dzielić się wiedzą. Czasem w firmie panuje taka bieżączka, że nikt na nic nie ma czasu więc po prostu zapomnij. Z drugiej strony, gdy nie zawsze może pomóc człowiek, tworzy się dokumentację … a potem nigdy jej nie aktualizuje. Czasami pomiędzy programistami wprowadza się wręcz rywalizację, więc jeden nie pomoże drugiemu.
To co podoba mi się w mojej obecnej firmie to naprawdę dostęp do wiedzy, czy to przez dokumentacje, czy to przez kanały na slacku czy office hours organizowane przez zespoły wyspecjalizowane lub tworzące infrastrukturę, aż w końcu przez to, że zazwyczaj w ciągu krótkiej wymiany zdań jestem w stanie ustalić z kim mogę porozmawiać na dany temat, po czym zaraz potem można do tej osoby zagadać i znaleźć odpowiedź na swój problem.
Podobnie z Code Review, do którego po prostu gdy trzeba można dołącza się pożądanego programistę. I tutaj warto dodać, że ocena kodu mam naprawdę fajną kulturę, a ludzie naprawdę chcą w ten sposób przekazać swoją wiedzę i pomóc w rozwoju.
Ludzie, wśród których miło spędza się czas
I nie mam tu na myśli imprez firmowych (te też są miłe). Mam tutaj jednak na myśli atmosferę wzajemnego szacunku, otwartości, zrozumienia. Praca za granicą i w międzynarodowym zespole naprawdę robi różnice. Praca w firmie w której już od samego początku rekrutacji sprawdzane są wartości, które są ważne dla firmy również. I znowu, ja wiem, że wiele firm ma zestaw slajdów czy szkolenia odnośnie misji, wizji czy wartości. Niemniej w obecnej firmie to naprawdę żyje i jest weryfikowane (całkiem niedawno CTO zrobił nawet mały refaktor tych wartości). Ludzie z jakimi pracuję są różni, sporo jest introwertyków, ale też sporo szalonych imprezowiczów. Niemniej i jedni i drudzy potrafią się dobrze ze sobą bawić jak i współpracować.
Jak widzicie, większość z dotychczas opisanych benefitów to te niematerialne, jednak dla mnie są one na wagę złota. I oczywiście mamy też pakiet bonusów i przywilejów, na który naprawdę nie mogę narzekać (przykładem niech będą nielimitowane wakacje, z których korzystam jadąc w tym roku w grudniu na przedświeta ;)). Niemniej bez wcześniej opisanych cech żadne masaże czy kraniki z piwem nie miałyby sensu.
Pracuje w firmie, do której chce mi się wstawać rano, ale też która szanuje to, że wieczorem mam swój prywatny czas. Jestem szczęśliwa, rozwijam się i z czystym sumieniem polecam szukanie pracodawcy, który odpowie na Twoje potrzeby. To jest chyba najważniejszy przekaz tego tekstu, by szukając pracy zastanowić się co jest dla Ciebie ważne, by móc podjąć dobrą decyzje przy wyborze firmy.
*- specjalnie i konsekwentnie nie padnie tutaj nazwa mojego pracodawcy. Nie chcę, żebyście odebrali ten wpis w kategoriach ‘chwali firmę’ czy po prostu reklamy, a raczej skupili się na aspektach jakie poruszam, tym jak można to sprawdzić przed podjęciem pracy, czy co to z mojego punktu zmieniło w porównaniu do poprzednich pracodawców. Może mój wpis będzie motywacją do Twojej własnej, osobistej refleksji na temat obecnego miejsca pracy (bo pozytywne rzeczy bardzo łatwo jest przeoczyć, a na negatywne po czasie można po prostu przestać, zapominając, że może być inaczej).