
Niech Cię kochają
Nawet jeżeli w twoim krwioobiegu jest mało romantycznych krwinek, to jednodniowe próby rozkochania w sobie zespołu mogą mieć daleko idące pozytywne konsekwencje.
Przeczytasz w 6 minut
O tym, że przed wyruszeniem w drogę należy zebrać drużynę, wie już każdy. Tylko jak to zrobić?
Celem tego artykułu jest podsunięcie kilku podpowiedzi, które mogą ułatwić komponowanie zespołu dla projektów na wczesnym etapie ich życia. Będą to wskazówki, które wypracowałem dla siebie podczas pracy na styku architektury oprogramowania i potrzeb biznesu. Będzie to zatem spojrzenie zarówno osoby technicznej, jak i managera.
Skupiam się głównie na podejściu opartym o drivery architektoniczne oraz metryki. Dlaczego akurat na tych dwóch aspektach? W mojej ocenie stosowanie driverów i metryk pozwala efektywnie wyekstrahować mapę umiejętności i doświadczeń potrzebnych do stworzenia aplikacji. A stąd tylko krok do zbudowania lepszego zespołu do projektu.
Najliczniejsza grupa osób w IT. To programiści zamieniają procesy biznesowe w działające oprogramowanie, ale także pozwalają zweryfikować wiele hipotez biznesu. Z racji ogromu różnych języków programowania, frameworków czy nawet stylów pracy zespół developerski, podobnie jak lekarze, dorobił się specjalizacji. Z tego powodu wrzucenie wszystkich do jednego worka o nazwie „programista” daje nam za mało informacji. Najprostszy podział, od którego warto zacząć, będzie zależny od typu projektu. Przykładowo w przypadku projektu z zakresu WebDev będzie to backend developer, frontend developer lub fullstack, a w przypadku projektu z zakresu GameDev wyszczególnimy programistę silnika, programistę UI czy programistę rozgrywki. Podział ten oczywiście wymaga znajomości domeny i konwencji, jakie panują w danej firmie.
Warto zwrócić uwagę na fakt, że w niektórych firmach lub projektach nie warto wchodzić w bardziej szczegółowe podziały na specjalności, na przykład firma specjalizująca się w tworzeniu stron internetowych w oparciu o system WordPress będzie w większości przypadków opierała się o programistę WordPress.
Na późniejszym etapie dobierania członków zespołu ważną dla mnie informacją jest również seniority programisty, czyli to, jak bardzo doświadczony jest w swoim fachu. Niestety nie wystarczy tutaj proste porównanie lat doświadczenia. Trzeba pamiętać, że 3 lata w jednym ogromnym projekcie IT, gdzie występuje wysoka specjalizacja, nie są równe 3 latom w dynamicznym startupie, gdzie programista może być odpowiedzialny za wiele różnych aspektów technologicznych. Przy ocenie doświadczenia programisty najlepiej jest skonsultować się z innym doświadczonym programistą w firmie. Jeżeli takiej opcji nie ma, to najlepszą drogą jest sprawdzenie, w jakich poprzednich projektach dana osoba brała udział, na przykład sprawdzając jej GitHuba, a następnie przeanalizowanie, w jakim stopniu są to projekty podobne do tego, do którego właśnie szukamy programisty.
Każdy zespół testujący może mieć różny zakres obowiązków. Jakkolwiek samo słowo „testowanie” jest dość obrazowe i wiele osób potrafi sobie wyobrazić proces „testowania”, tak już „zapewnienie jakości” ma o wiele bardziej rozmyte znaczenie. W niektórych firmach osoby testujące będą odpowiedzialne za sprawdzenie historyjek (user stories) użytkownika i przygotowanie raportu przed wdrożeniem aplikacji na produkcję, w innych testerzy będą pisać testy akceptacyjne i tworzyć scenariusze testowe, a w jeszcze innych będą zaś pisać unit testy dla programistów.
Warto też pamiętać, że nie każdy projekt potrzebuje wszystkich możliwych metod zapewniania jakości. Tutaj zalecam mocno pragmatyczne podejście do tematu. Oczywiście możemy się uprzeć i aplikować wszystkie znane nam metody testowania do projektu, ale szybko może się okazać, że po prostu przepalamy w ten sposób pieniądze. Spróbujmy pomyśleć, ile wartości jest w tym, że testerzy piszą testy „end to end” dla aplikacji, która jest PoC (Proof of Concept). Projekt w pewnym momencie robi obrót o 180 stopni i już nie tworzymy oprogramowania do produkcji skarpetek, ale aplikację okienkową umożliwiającą łatwy design nowych wzorów dla tychże skarpetek.
Aby nie zostać źle zrozumianym, pozwolę sobie podkreślić, że nie chodzi mi o zaniedbanie testów produkowanego rozwiązania. Absolutnie nie! Warto jednak skupić się na zapewnieniu takiego rodzaju i dokładności testowania, które nie spowolnią rozwoju aplikacji, a jednocześnie pozwolą się upewnić, że jakość produktu jest na satysfakcjonującym poziomie.
Należy zatem określić cel zespołu testującego i poziom testów, do jakiego dążymy. Kilka przykładów z praktyki wziętych:
W przypadku budowania zespołu testującego bardzo ważnym czynnikiem jest dla mnie doświadczenie osoby testującej w danej domenie. Nie widzę sensu zatrudniać senior testera gier komputerowych do aplikacji z sektora Fintech, gdy mamy dostępnego juniora, który właśnie skończył pracę w projekcie wirtualnego kantora.
Rozważając potrzebny w projekcie management, mam zawsze na uwadze Product Ownerów (PO), Project Managerów (PM), Scrum Masterów (SM), Leadów technicznych (też), Architektów (też!) czy Line Managerów (LM). Specjaliści z tej grupy mają za zadanie koordynowanie prac i czuwanie, aby drivery projektu były zachowane. O tym, czym są drivery projektu, napiszę za chwilę. Oczywiście nie każdy projekt potrzebuje wszystkich tych kompetencji, a raczej zaryzykowałbym stwierdzenie, że w większości zespołów wystarczy jedna osoba. Wyzwaniem jest natomiast wywnioskowanie, kto z tej grupy da największą wartość projektowi.
Oprócz „przeczucia” stosuję następujące pytania jako pomoc w wyborze:
Odpowiadając na te pytania, możemy dojść do wniosku, że nie jest nam potrzebny nikt z umiejętnościami zarządzającymi. W takim przypadku zalecałbym zwrócenie szczególnej uwagi na programistów – warto, aby chociaż jedna osoba miała odpowiednio rozwinięte umiejętności miękkie. Bez wyznaczonej osoby zarządzającej dla interesariuszy naturalną osobą kontaktową będzie albo designer, albo właśnie programista.
Większość produktów musi, oprócz mniej lub bardziej niezbędnych funkcji, prezentować również profesjonalny wygląd. Dość łatwo można zatem znaleźć powody, dla których UI czy UX designer powinien się znaleźć w zespole. Ale co zrobić w przypadku zamówienia przez klienta projektu backendowego, czyli produkującego działania, których użytkownik nawet nie zauważa, jak na przykład nasłuchiwanie na zdarzenia w systemie, ich serializacja i przekazywanie dalej do innego systemu?
W takich przypadkach zdecydowanie warto skonsultować projekt z doświadczonym UX designerem. Specjalista User Experience będzie mógł dokładnie zbadać potrzebę naszego klienta. I może się okazać, że proces, który będziemy modelować, nie jest rozwiązaniem bolączek klienta lub jest rozwiązaniem tylko w części. Rozpracowanie faktycznej potrzeby przez UX designera może później oszczędzić nam konieczności reorganizacji zespołu przy pierwszym kamieniu milowym.
Można oczywiście mi zarzucić, że badanie potrzeb klienta to działka konsultanta biznesowego i działu discovery produktu. Oczywiście, ale kto powiedział, że konsultant musi być alfą i omegą w każdej dziedzinie i robić to sam?
Zaangażowanie UI i UX designerów jest bardzo różne na różnych etapach projektu. W fazie PoC ważny będzie UX, który zbada potrzeby, znajdzie buyer persony, stworzy flow aplikacji i przetestuje hipotezy. W tym czasie UI designer będzie miał mniej pracy, a może nawet wcale. Proporcje te odwracają się zaś w późniejszych fazach projektu. Podczas pracy nad MVP zaangażowanie UI i UX designerów może być już podobne. Na końcowych etapach projektu, czyli w fazie scale up czy utrzymania, UX designer będzie miał już mało pracy, UI designer zaś wciąż będzie wraz z zespołem tworzył kolejne ekrany czy widoki.
Do grupy specjalistów należy każda inna osoba, która może być pomocna przy tworzeniu produktu. W tej grupie bardzo ważne jest dla mnie zaznaczenie przy każdym talencie, w jakim aspekcie jest to specjalista potrzebny w projekcie. Z mojego doświadczenia jest to najmniej liczny zbiór. Jako specjalistów najczęściej rozumiem Cloud Engineerów (czasem zwanych mylnie Devopsami), samych Devopsów, Administratorów, Programistów baz danych czy hurtowni, Data Engineerów, Brand Designerów i wielu innych. Są takie projekty, których domena dotyczy ściśle danej specjalizacji, na przykład projekt stworzenia silnika podpowiadania produktu w sklepie internetowym. Wtedy taką specjalizację wyciągam do miana głównej.
Specjaliści często okazują się ważniejsi na późniejszym etapie życia projektu, na przykład Cloud Engineera docenimy dopiero wtedy, gdy będzie co wdrażać na serwery developerskie i produkcyjne. Wcześniej może się okazać, że Cloud Engineer będzie się nudził, bo nie do końca będzie wiedział, jak będzie wyglądało wdrożenie i czego wymagać od systemu Continuous Integration.
„Tworzenie oprogramowania to sztuka kompromisów i wyborów” – ten rozdział pozwolę sobie zacząć powyższą sentencją jako hasłem przewodnim dla dalszej części artykułu.
Bardzo ważne jest, aby wybory dotyczące tworzenia produktu podejmować rozsądnie i w oparciu o wyraźnie zdefiniowane filary. Takimi filarami czy też czynnikami są właśnie drivery. Pozwalają one przetworzyć nasze zapytanie o decyzję odnośnie do systemu i podjąć na jej podstawie jakieś akcje. Po więcej informacji o samych driverach odsyłam do książki Simona Browna „Software architecture for developers”. Natomiast na etapie komponowania zespołu projektowego przydadzą się następujące drivery: ograniczenia projektowe, atrybuty jakościowe i konwencje, które omówię szczegółowo w kolejnych punktach.
Na podstawie znalezionych driverów zawsze tworzę metryki. Dopiero driver, który jest mierzalny, pozwala podjąć decyzję opartą na faktach i liczbach, a nie na odczuciach. Kilka przykładów:
Jest jeszcze jeden ważny driver – „wymagania funkcjonalne”. Zbieranie wymagań dotyczących projektu jest etapem, na który konsultanci projektowi poświęcają bardzo dużo swojej uwagi i czasu. Wymagania funkcjonalne opisuje się najczęściej jako funkcje aplikacji. W zależności od skali projektu konsultant może już na wstępnym etapie przygotować np. Service Blueprint, który z kolei może być zarówno doskonałym narzędziem do przygotowania backlogu produktu, jak również świetną bazą wiedzy przy tworzeniu zespołu.
Limity są moją ulubioną grupą driverów. Na ich podstawie można stworzyć doskonałe karty alokacji do projektu, z bardzo rozbudowanymi wymaganiami.
Jednymi z najczęstszych ograniczeń projektowych są czas i budżet. Tutaj pozostaje nam praca nad zakresem projektu (scope) albo nad konkretnym składem zespołu. Może na przykład zamiast Senior Data Engineera wystarczy nam ktoś, kto jest ogólnie mniej doświadczony, ale już wcześniej pracował nad problemem z zakresu domeny projektu.
Drivery z grupy ograniczeń projektowych są często ukryte w jednym zdaniu wypowiedzianym przez klienta w ciągu całej godzinnej rozmowy. Niestety nie podam jasnej heurystyki, w jaki sposób ich szukać, bo z mojego doświadczenia każdy projekt był „przypadkiem szczególnym”. Aby jednak rozbudować trochę nasze doświadczenia, pozwolę sobie opisać kilka przypadków, jakie mi się przytrafiły:
Drivery z grupy jakościowej pozwalają bardzo łatwo tworzyć metryki. Część z nich jest stosunkowo prosta do znalezienia i zdefiniowania, jednak te bardziej zaawansowane wymagają dobrej znajomości procesu biznesowego. Do podstawowych metryk jakościowych można dojść, odpowiadając na przykładowe pytania:
Powyższe pytania pozwalają nam lepiej wyobrazić sobie sytuację projektową na samym początku, jak również za na przykład 6 miesięcy, by w ten sposób dobrać bardziej wydajny zespół.
Ostatnią grupą driverów, które są warte rozważania przy komponowaniu zespołu, są konwencje. Są to pewne zasady prowadzenia projektów w danej firmie, których należy przestrzegać. Jeżeli dana firma specjalizuje się tylko w języku Python, raczej nie będziemy w stanie złożyć zespołu do stworzenia gry mobilnej. Mamy więc twarde ograniczenie w zakresie kompetencji. Ale mogą istnieć też konwencje mniej restrykcyjne, na przykład taka, że każdy zespół projektowy w firmie musi mieć Scrum Mastera. Teoretycznie możemy skomponować zespół bez SM, ale mimo wszystko nie polecam tego robić.
Trochę inaczej sprawa wygląda z konwencjami wynikającymi z naszego doświadczenia. Jeżeli już wielokrotnie spotkałem się z danym problemem i wypracowałem sposób na jego obsłużenie, to ten sposób staje się konwencją z mojego doświadczenia. Na przykład produkowałem wcześniej gry komputerowe i nauczyłem się, że grafik koncepcyjny na początku projektu jest konieczny. Ta konwencja jest oczywiście trudniejsza do uargumentowania, dlatego świetnie sprawdzi się w tym przypadku storytelling. Opisuję analogię pomiędzy problemem, który występuje u klienta, oraz tym, z którym sam już się zmierzyłem, a następnie opisuję, jak dana konwencja pomogła nam w projekcie.
Czy zdarzyło mi się zarekomendować zespół, który się nie sprawdził? Jeszcze nie, ale wszystko przede mną. Zastosowanie driverów i metryk do tworzenia zespołu pozwala bardzo klinicznie dobrać odpowiednie osoby. Ale człowiek, chociaż jest to najsilniejszy element układanki, nie jest wyzbyty emocji, specyficznych cech charakteru, temperamentu czy nawet preferencji, w jakich projektach pracuje najchętniej. Znalezienie pasującej do projektu dynamiki zespołu i jej utrzymanie to kolejny etap budowania perfekcyjnej drużyny. Niemniej jest to temat na tyle szeroki, że z pewnością zasługuje na osobny artykuł.
Zostań w kontakcie, aby otrzymywać w mailowej pigułce to co mamy najlepszego.
Czyli nasz newsletter! O czym? O przywództwie, oczywiście. Zapisz się i otrzymuj co dwa tygodnie darmową przesyłkę na rozpęd.
Nawet jeżeli w twoim krwioobiegu jest mało romantycznych krwinek, to jednodniowe próby rozkochania w sobie zespołu mogą mieć daleko idące pozytywne konsekwencje.
Poznaj współzałożyciela startupu technologicznego, który przeszedł przez prawdziwą burzę, zarządzając swoim zespołem zdalnym. Jego firma była jak mała ONZ – zespół składał się z ludzi
Konstruktywna krytyka to rodzaj feedbacku, który ma na celu pomoc danej osobie w poprawieniu jej pracy, zachowania lub podejścia. Jest to krytyka, która jest wyrażana