Od seniora do CTO. Historia Adama Goryczki
W jaki sposób senior może rozwijać swoją ścieżkę kariery? Jedną z opcji jest zostanie CTO. Adam Goryczka w ciągu ostatnich pięciu lat tę funkcję pełnił w dwóch startupach z Singapuru. Czego nauczyło go to doświadczenie? Tego i wielu innych rzeczy dowiecie się z rozmowy z Adamem.
Zaczynałeś w korporacji. Myślisz, że dla początkującego programisty to był najlepszy możliwy start?
Praca dla Whirlpool’a była ciekawym doświadczeniem. Mimo że odbiorcą była duża firma o międzynarodowym zasięgu, to było to przedsięwzięcie, które realizowałem na zasadzie wewnętrznego projektu, mającego dostarczyć rozwiązanie dla agregacji i prezentacji danych. Miałem dużo swobody, jeżeli chodzi o sposób dostarczenia rozwiązania, ponadto pracowałem wtedy zdalnie. To była pierwsza styczność z zastosowaniem praktyk Agile w praktycznym, komercyjnym projekcie. Praca zdalna, w dodatku z zastosowaniem praktyk Agile, wymaga dobrego zarządzania czasem, samodzielności, dobrej komunikacji i zbierania wymagań biznesowych.
Nie miałeś wrażenia, że praca w dużej firmie sprawi, że będziesz tylko trybikiem w maszynie?
Nie był to typowy projekt, gdzie dołączając do dużej organizacji developer staje się częścią dużego zespołu i ma mały wpływ na jego rozwój. Myślę, że nie ma większego znaczenia jaka jest to pierwsza konkretna praca czy projekt. Z każdej można wynieść wartościowe doświadczenia jeśli tylko podchodzi się do niej z otwartym umysłem. Niezależnie od tego, czy jest to duża firma, startup, czy też praca zdalna dla klienta, w każdej z nich będą plusy i minusy. Ważne, żeby skupić się na pozytywnych aspektach i możliwie jak najwięcej się nauczyć; wtedy również z tych mniej pozytywnych stron możliwe jest wyniesienie cennych informacji merytorycznych, np. czego unikać w przyszłych projektach. Osobiście cieszę się, że miałem okazję spędzić jakiś czas w korporacji i mieć punkt odniesienia w późniejszych, znacznie już mniejszych firmach.
Jak wyglądał dalej przebieg Twojej kariery?
W trakcie studiów pracowałem nad kilkoma projektami w różnych miastach w kraju: we Wrocławiu, gdzie kończyłem Politechnikę, w stolicy oraz w Katowicach. Podczas ostatnich dwóch lat miałem na tyle elastyczności, że mogłem dojeżdżać na uczelnie jedynie raz na dwa tygodnie. Większość z tych projektów nie była dłuższa niż pół roku, jednak moim celem było wtedy zdobycie doświadczenia i większa próbka różnych projektów dawała taką możliwość.
Miałeś mentora, który wspierał Cię na każdym kroku?
Nie miałem mentora, byłem natomiast otoczony wieloma zdolnymi osobami w czasie studiów, od których w jakimś stopniu mogłem podchwycić pewne pomysły. Z wielu trendów dotyczących wyboru technologii oraz potencjalnej ścieżki kariery starałem się wybrać to co najbardziej pasowałoby do mnie. I tak, kiedy wielu moich kolegów rozpatrywało decyzje pomiędzy .net czy java oraz w której z dużych wrocławskich firm znaleźć pracę, ja zdecydowałem, że na jakiś czas zostanę przy webowych technologiach, w tym konkretnym przypadku korzystając z frameworków opartych o Ruby. Patrząc z perspektywy czasu, nie mogę powiedzieć żebym żałował tej decyzji.
W 2012 roku przeniosłeś się Zurychu. Dlaczego właśnie tam znalazłeś pracę?
Miałem okazję dołączyć do zespołu jako pierwszy developer specjalizujący się w technologii, na którą była przepisywana znaczna część systemu. Ciekawe i mocno angażujące zajęcie. Pracowałem w klonie Groupona, który później przechodził kilka stadiów platformy e-commerce. Kiedy dołączyłem pracowało tam prawie 200 osób, w trakcie mojej pracy zespół techniczny rozwinął się z 7 do 35 osób.
Poza tym, Szwajcaria to świetne miejsce do życia – blisko natury, doskonale zorganizowane. Takie, w którym wszystko się układa. Zimą można tam pojeździć na nartach, a latem na rowerach górskich albo na motorze. Jeżeli ktoś lubi jazdę na dwóch kółkach to jest tam mnóstwo malowniczych ścieżek, w szczególności polecam 'Furka Pass’ oraz 'San Bernardino Pass’. Szczycą się one pięknymi widokami i nieskończoną ilością zakrętów,
Czym zajmowałeś się na co dzień? Jakie zadania spoczywały na Twoich barkach?
Od pierwszego dnia pracowałem nad procesem płatności, tj. integracją lokalnego Payment System Provider. W Szwajcarii poza typowymi kartami kredytowymi popularną formą płatności są ich lokalne produkty bankowe/pocztowe. Początkowo platforma, na której działał ów checkout, obejmował tylko dwa wertykale spośród kilkunastu, w niedługim czasie jednak revenue całej platformy przechodziło przez moduł w całości napisany przeze mnie. Nie powiem, żeby nie było to stresujące biorąc pod uwagę wysokość revenue, dziennie przekraczającego kilkaset tysięcy franków.
Spędziłem trochę czasu, także swojego prywatnego, budując narzędzie monitorujące proces płatności. Potencjalnym problemem nie tyle był kod tej części aplikacji, która miała wysokie pokrycie testami, ale liczność różnych podsystemów niezależnych od nas, rodzajów klientów, oraz metod płatności. Dzięki monitorowaniu tych procesów wiedzieliśmy o potencjalnych defektach lub problemach naszych providerów, co pozwalało nam szybciej reagować oraz ustalić z dużym prawdopodobieństwem, gdzie leży problem.
Poza tym, byłem odpowiedzialny za integrację i wdrożenie różnych narzędzi m.in Email Service Providers (ESP), personalizacji, kampanii marketingowych wspierający pracę działu online marketingu.
Poza technicznym aspektem, znaczną część czasu poświęcałem metodyce w jakiej pracował zespół, starając się ją usystematyzować. Zdarzyło mi się odwiedzać w ówczesnym czasie konferencje dot. Agile / Lean, jak również pomagać w organizacji konferencji: Agile Lean Europe Berlin ’11, Barcelona ’12. Metodykę Agile wprowadziliśmy, kiedy zespół zaczął się powiększać, ale też ze względu na fakt, iż zezwalała ona na lepszą komunikację z działem Produktu. Moją pracę w szwajcarskim projekcie podzieliły trzy kroki milowe, które również miały swoje odwzorowanie w stanowiskach, które obejmowałem.
Początkowo jako developer byłem odpowiedzialny za tworzenie, utrzymywanie kodu, budowanie procesu płatności, czy integrację narzędzi używanych przez dział online marketing. Obejmując stanowisko Lead Developera byłem odpowiedzialny za development zespołu zajmującego się backendem oraz onboarding nowych osób w firmie. Spędzałem wtedy więcej czasu robiąc pair-programming z młodszymi programistami oraz tymi pracującymi zdalnie.
Najciekawsza była na pewno praca na stanowisku R&D Managera.
Miałem pod opieką własny dział, prowadziłem rozmowy z potencjalnymi partnerami, sprawdzałem możliwości realizacji integracji i współpracy z partnerskimi firmami. Był to zdecydowanie najciekawszy okres, kiedy to miałem okazję pracować nad szerokim wachlarzem zagadnień: nowych metod płatności, personalizacji, sposobu wizualizacji produktów oraz interakcji użytkownika, a także zmian architektury platformy.
Jednym z efektów tej pracy była nowatorska metoda płatności zintegrowana na platformie, oferowana przez niemiecką firmę, która pozwalała na dokonanie zakupu dóbr, za które użytkownik płacił dopiero po tym, jak otrzymał przesyłkę. Innym ważnym projektem, który powstał w moim dziale była zmiana architektury całej platformy – celem było wsparcie procesu zmiany modelu biznesowego. Po kilkutygodniowym sprawdzaniu wykonalności tego projektu, do pracy nad nim dołączyło kilku kluczowych developerów. Stanowiło to alternatywę zakupu oprogramowania wspierającego nowe wymagania biznesowe. Dzięki wspólnej pracy udało się nam utrzymać technologie in-house, zamiast zmieniać znaczną jej część na zewnętrzny, gotowy produkt.
Trzy lata później przeniosłeś się do Singapuru – zostałeś CTO Roomorama, a później Aureso. Jak przygotowywałeś się do wyjazdu?
Odwiedziłem wcześniej to miasto przy okazji technologicznej konferencji, na którą tu przyleciałem. Miasto jak i okolica robi niesamowite wrażenie, jest zdecydowanie inne od Zurychu. Po prawie trzech latach w Szwajcarii postanowiłem się tutaj przenieść. Sama przeprowadzka nie była jednak wyzwaniem, bo zawsze dużo podróżowałem, a o ile ruch wizowy pozwala, reszta jest prosta: od spakowania walizki po złapanie lotu. Myślę, że największą trudność stanowiła decyzja o opuszczeniu projektu w Szwajcarii oraz osób, z którymi pracowałem.
Co spowodowało, że ostatecznie przekonałeś się do tego kraju i postanowiłeś tu zostać?
Singapur jest specyficznym miejscem. Sam kraj ma niewiele ponad 50 lat, zdecydowanie różni się od miast, które rosły organicznie na przestrzeni wielu stuleci, jak również od innych stolic w regionie. Jest czysto, bezpiecznie, niezwykle dogodnie, przez cały rok ciepło. Ze względu na brak pór roku, trudno znaleźć punkt odniesienia, czas płynie tutaj niezwykle szybko. Miasto jest bardzo różnorodne pod względem etnicznym – ludzie różnych narodowości, religii i kultur żyją tu na relatywnie niedużym kawałku lądu i mają dużo szacunku dla siebie nawzajem. Podobnie jak w Szwajcarii są oni przyzwyczajeni do faktu, że prawo i regulacje mają za zadanie służyć ich dobru, dzięki czemu wiele rzeczy po prostu tu działa. Wiele z tych czynników powoduje, że można skupić się na rzeczach, które są ważne, i nie martwić o resztę.
Dzięki skupieniu na lokalnym rynku oraz całkiem sporemu kapitałowi, który pochodzi od prywatnych inwestorów, firm venture capital, jak i rządowych grantów, rozwija się tu wiele firm technologicznych, od kilkuosobowych startupów, po jednorożce, których szacowana wartość wynosi kilka miliardów dolarów.
To wszystko powoduje, że scena technologiczna rozwija się dość prężnie, w ciągu tygodnia można znaleźć wiele tematycznych meetup’ów z praktycznie każdej znanej technologii, frameworka czy języka. Można się wiele nauczyć na temat popularnych tematów, jak AI i popularnych frameworków jak TensorFlow bezpośrednio w siedzibie Google lub przynajmniej poznać inny punkt widzenia.
Do bardziej prozaicznych powodów, dla których zdecydowałem się przenieść do Singapuru zalicza się przyjemna pogoda oraz ogromna różnorodność kuchni z różnych stron świata. Ponadto, Hub transportowy / lotniczy jakim jest Singapur, powoduje, że łatwo przemieścić się do wielu pobliskich egzotycznych miejsc takich jak Indonezja, Tajlandia czy Wietnam.
Czym różni się praca CTO od pracy seniora?
W dużej mierze praca na tym stanowisku zależy od wielkości i struktury firmy, jak również podejścia i postawy każdej z tych osób. Z oczywistych względów zmienia się zakres obowiązków, takich jak budowanie zespołu, dbanie o kulturę pracy oraz zarządzanie budżetem. W obowiązkach CTO leży przedstawienie i utrzymanie wizji całego zespołu, wartości jakimi powinniśmy się kierować po stronie technologicznej, odpowiedzialność za całość wyników zespołu technicznego oraz ich efekt.
Jedną rzeczą, która może nie jest domeną konkretnej pozycji, a bardziej wynika z postawy jest staranie się dostrzeżenia całości ( 'getting big picture’ ) oraz sposobu, w jaki możemy zamodelować dany wycinek rzeczywistości. Moja aktualna pozycja niewątpliwie sprzyja temu, że zanim zaczniemy nad czymś pracować, najpierw opracowujemy architekturę rozwiązania, czy to przy pomocy UML, czy też pseudo-kodu. Analizujemy też możliwe wąskie gardła potencjalnych rozwiązań.
Masz spore doświadczenie na stanowisku CTO – pewnie wypracowałeś sobie pewne schematy pracy. Możesz je zdradzić?
Na podstawie wcześniejszych doświadczeń odczułem potrzebę posiadania linii architektonicznej wykonania aplikacji oraz jej potencjalnej ewolucji w przyszłości. Pozwala to upewnić się, że wszelkie starania idą w jednym, określonym kierunku oraz, że ta droga jest przemyślana. Mniej korzystną alternatywą byłoby podejście 'ad hoc’ do każdej zmiany lub potencjalnie nowej funkcjonalności, na zasadzie implementacji wymagań i przejście do następnego zadania bez głębszej analizy. Oczywiście zależy to od rodzaju i granularności zmiany, jak również nie wiąże się z zagłębianiem się w absolutnie każdy szczegół. Cały proces wymaga odrobiny wyczucia tego, które elementy są marginalne, a które istotne oraz jaki wpływ na resztę systemu może wywoływać ich zmiana.
Jakie wnioski wyciągnąłeś po pracy z wieloma programistami pochodzącymi z różnych zespołów, mającymi różne doświadczenia?
Zauważyłem, że część developerów, szczególnie tych, których wcześniejsze doświadczenie pochodziło z agencji dostarczających software na zlecenie, ma tendencję do dość bezrefleksyjnego zamykania ticketów i przechodzenia do następnych zadań. Zapominali także o tym, że w przyszłości to oni sami lub ich koledzy będą musieli utrzymywać w ten sposób napisany kod. Jednym z moich zadań jako CTO było upewnienie się, że wszyscy developerzy biorą pod uwagę ustalone wartości, m.in. to żeby kod napisany był w jak najbardziej czysty i utrzymywalny sposób.
Wiedząc jak kosztowne są zmiany, czy też robienie kroku wstecz, aby zacząć od początku, upewniam się, że komunikacja między członkami zespołu działa poprawnie. Trzeba brać pod uwagę fakt, że część developerów pracuje zdalnie, w różnych strefach czasowych, a na dodatek stanowią oni mieszankę różnych osobowości, narodowości i kultur, co oznacza, że zawsze istnieje ryzyko potencjalnych nieporozumień.
Dużo mówimy o zespole. W jaki sposób dbasz o jego rozwój?
Sporo czasu spędzam na komunikacji z członkami zespołu, szczególnie tymi, którzy pracują zdalnie. Organizuję też spotkania, podczas których staram się zrozumieć ogólne samopoczucie panujące w zespole / firmie, poznać potencjalny zakres obowiązków oraz tematy niekoniecznie bezpośrednio związane z pracą.
Jeżeli pojawia się możliwość realizacji zadań i ktoś wykazuje szczególne zainteresowanie tematem, lub też gdy ktoś ma aspiracje, by spróbować swoich sił poszerzając zakres obowiązków (w granicach rozsądku) to nie stanowi to problemu. W zespole każdy jest obdarzony dużym zaufaniem, za czym idzie też odpowiedzialność za wybraną część aplikacji oraz za pomoc swoim kolegom.
W przypadku młodszych developerów, którzy dopiero zaczynali swoją przygodę z programowaniem lub przychodzących z innych technologii niż Ruby, spędzałem wystarczającą ilość czasu robiąc pair-programming oraz wskazując kierunek w jakim dane rozwiązanie powinno iść, tak, żeby możliwie szybko mogli samodzielnie zacząć prawidłowo rozwiązywać podobne problemy.
Pomocne tutaj jest używanie wzorców projektowych oraz reguł jak Open Close Principle, gdzie każdy z zespołu może kontrybuować w równym stopniu, implementując analogiczne do istniejącej części rozwiązania. Ma to też kilka innych pozytywnych aspektów, nadających się prawdopodobnie na osobny wpis.
Wróćmy jeszcze do Ciebie, seniora, od ponad pięciu lat na stanowisku CTO. Czym dla osoby z takim doświadczeniem jest rozwój i co wpływa na niego?
Dla mnie rozwój to stawianie nowych wyzwań – w miejscu pracy jest to zazwyczaj dodawanie nowych obowiązków. Rozwijam się też uczestnicząc w konferencjach oraz meetupach. Ciekawie jest obserwować jak na przestrzeni lat zmienia się charakter Ruby’ego, również biorąc pod uwagę kraj i kontynent, na którym odbywają się te wydarzenia. W ostatnim czasie sporo ciekawego dzieje w dziedzinie AI. Jak już wcześniej wspomniałem przynajmniej w Singapurze istnieje kilka miejsc, gdzie można się o niej wielu rzeczy dowiedzieć.
Nie bez wpływu pozostaje kontakt z osobami pochodzącymi z różnych kultur. Uważam że, podchodząc z otwartym umysłem do otoczenia, z prawie każdej sytuacji można coś wynieść.
Jakie masz plany na przyszłość?
W niedługiej przyszłości poza komercyjną pracą, będzie to na pewno komercjalizacja któregoś z produktów, nad którymi pracuje w wolnym czasie. Jeden z projektów powstał samoistnie podczas rekrutacji developerów kiedy to ilość kandydatów przerosła możliwość przyjrzeniu się każdemu z profili dokładniej. Nie chciałem odrzucać żadnej z kandydatur bez sprawdzenia wstępnie umiejętności technicznych, używałem zatem napisanego przez siebie systemu, który pozwolił mi zebrać podstawowe informacje, odpowiedzi na otwarte pytania, a także ewaluować techniczne umiejętności przy pomocy technicznych testów. Zaoszczędził mi sporo czasu, a w zasadzie umożliwił sprawdzenie kodu i podzielenie się feedbackiem z praktycznie każdym z kandydatów. Często zdarza się, że aplikacje pozostają bez ostatecznej odpowiedzi ani żadnego konstruktywnego feedbacku, a ja chciałem żeby w przypadku rekrutacji do mojego zespołu wyglądało to inaczej.
Adam Goryczka. CTO w Aureso. Absolwent Politechniki Wrocławskiej, specjalizacji Inżynieria oprogramowania. Pracuje z technologiami webowymi od ponad 10 lat. Specjalizuje się w budowaniu technicznych zespołów, również rozproszonych, pracujących w różnych strefach czasowych. Fan metodyk lekkich. Po realizacji kilku projektów w kraju dołączył do szwajcarskiej platformy e-commerce, gdzie zaczynał jako developer, następnie kierował zespołem, aż w końcu jako R&D manager prowadził departament zajmujący się rozwojem innowacyjnych projektów.
Mieszka w Singapurze, jest odpowiedzialny za techniczną część startupu, zorientowanego na rynek motoryzacyjny.