Jak komponować kompetencje w zespole projektowym pod kątem technicznym?

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.

1.

Role w zespole

programiści

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.

testerzy

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:

  • Sklep internetowy naszego klienta musi być w stanie obsłużyć ruch podczas Black Friday. Szacujemy, że będzie to kilkakrotnie większa liczba osób jednocześnie niż w zwykły dzień. Polecam zatem skupić się na testach typu Use Case (scenariusza użytkownika) i automatyzować testy End to End oraz na testach Performance’u (stress tests).

  • Aplikacja mobilna dla aptek, sprawdzająca dostępność leków, musi działać na możliwie największej liczbie modeli telefonów, również na relatywnie starych modelach, oraz być dostępna dla osób z niepełnosprawnościami. Polecam skupić się ponownie na testach Use Case (mogą to być testy zarówno manualne, jak i automatyzujące), testach dostępności oraz testach na różnym sprzęcie.

  • Tworzymy na lotnisko kiosk informacyjny, w którym turyści mogą sprawdzić ważne informacje o lotach. Tutaj ponownie musimy zapewnić wysoką dostępność aplikacji oraz przetestować ją lingwistycznie. Chcemy uniknąć sytuacji, w której zamiast docelowego tekstu użytkownik przeczyta „Cannot connect to translation service” w swoim ojczystym języku.

  • Nasz klient zlecił nam stworzenie PoC aplikacji, który zweryfikuje, czy automatyzacja procesu biznesowego może przynieść wymierne korzyści dla firmy. W tym przypadku warto zadać sobie pytanie, czy na etapie badania hipotezy musimy zapewnić wysoką jakość i bezbłędność, czy ważniejsza jest rozwijalność naszego pomysłu w kolejnych etapach po PoC. Nie ma jednej prawidłowej odpowiedzi. Natomiast jeżeli w danym projekcie sprawdzamy, czy jesteśmy w stanie zautomatyzować proces wycinania wyrostka robaczkowego u pacjenta, to bardzo mocno zachęcam do kilkukrotnego zwiększenia dbałości o jakość.

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.

managerowie

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:

  • Czy projekt będzie się dynamicznie zmieniał? Jeżeli tak, to jest to plus dla PM lub PO. 
  • Czy backlog jest zdefiniowany lub mamy już PO po stronie klienta? Jeżeli tak, to jest to duży minus dla PM, PO lub LM.
  • Czy zespół będzie musiał komunikować się z interesariuszami po stronie klienta? Jeżeli tak, to plus dla SM lub Leada technicznego.
  • Czy projekt już ze wstępnego opisu brzmi jak spore wyzwanie techniczne? Jeżeli tak, to plus dla Leada technicznego lub Architekta.
  • Czy będzie wiele zespołów pracujących nad jednym projektem? Jeżeli tak, to duży plus dla SM i Leada.
  • Czy jest potrzebna osoba zarządzająca rozwojem zespołu? Jeżeli tak, to jest to plus dla LM.

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.

designerzy

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.

specjaliści

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.

2.

Drivery i metryki

„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:

  • Driver: „Konwencją naszej firmy jest pisanie kodu w Java Spring”.
    Zadanie: Stajemy przed wyborem języka oraz frameworku dla nowego mikroserwisu. Sprawa dzięki driverowi konwencji jest prosta – wybieramy Java i Spring.
    Metryka: Metryka tutaj jest binarna – jest to albo Java, albo nic.
  • Driver: „Zgodziliśmy się, że czas odpowiedzi naszego serwera ma być w 99,9% przypadków krótszy niż 1500 ms”.
    Zadanie: Musimy zdecydować, czy wydzielić serwis „user” do osobnego mikroserwisu, czy nie. Serwis „user” to całkowicie techniczny komponent, zawierający dane o użytkownikach, z którego danych musiałyby także korzystać wszystkie pozostałe komponenty w systemie. A zatem przy każdym zapytaniu usługa musi dodatkowo odpytać serwis „user”, co z kolei dołoży ok. 100 ms do całego czasu zapytania. Daje nam to pewność, że to nie jest dobry pomysł.
    Metryka: „Czas odpowiedzi serwera na produkcji mieści się w 99 centylu”.
  • Driver: „Naszym ograniczeniem jest to, że koszt walidacji dokumentu musi być mniejszy niż 30 USD i trwać krócej niż 3 dni”.
    Zadanie: Zastanawiamy się, czy wprowadzić integrację z systemem prawniczym, który w ciągu jednego dnia przedstawi raport na temat dokumentu, jednak koszt jednej strony dokumentu to 10 USD.
    Metryka: W tym przypadku mamy dwie metryki: czas walidacji i koszt walidacji. Taka metryka dla zadanej integracji nie daje jednoznacznej odpowiedzi „tak” czy „nie”, ponieważ koszt walidacji może przekroczyć zakładany limit. Mamy już jednak dwa argumenty do rozmowy z biznesem.

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.

ograniczenia projektowe

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:

  • Jeden z moich klientów tworzył aplikację, która wspiera aspekty ekologiczne. Naszym driverem w tym projekcie było ograniczenie kosztów infrastruktury nie w USD, ale w śladzie węglowym. Projekt jest ogromnym wyzwaniem dla Cloud Engineerów.
  • Spotkałem się również z przypadkiem, w którym klient potrzebował systemu klasy ETL (Extract, Transform, Load). W ramach rozmów udało nam się ustalić, że strata chociażby jednego zdarzenia w systemie jest bardzo kosztowna. Ograniczenie to zmusiło nas do przywiązywania większej uwagi do infrastruktury i do zastosowania podejścia blue-green deployment. W efekcie konieczne było zwiększenie zaangażowania Cloud Engineera w tym projekcie.
  • Zdarzały mi się również sytuacje, w których klient miał dobrze zdefiniowany scope produktu i musiał rozpocząć prace jak najszybciej. Tutaj ograniczeniem był czas formalnego startu projektu oraz czas wdrożenia zespołu. Kwestie kick offu pozostawiliśmy działowi prawnemu. W szybkim wdrożeniu zespołu w procesy firmy i wymagania produktu pomogła dodatkowa rola managerska, a dokładniej Product Owner, oraz przeprowadzone wraz z zespołem produktowym warsztaty Event Storming w pierwszych dwóch dniach pracy.
  • Praca zdalna w IT nie jest nowością. Ale gdy musimy pracować z klientami z innych kontynentów, bariery wynikające z różnych stref czasowych zaczynają być bardziej odczuwalne. Idealne rozwiązanie to dobranie zespołu z graniczących ze sobą stref czasowych, jednak nie zawsze jest to możliwe. Z mojego doświadczenia nawet tzw. nocne marki nie są idealnymi kandydatami do pracy z klientem z innego kontynentu, ponieważ nasze życie społeczne toczy się w naszej strefie czasowej. Ważnym aspektem w tego typu projektach będzie wyśmienita komunikacja, więc Scrum Master na pewno będzie osobą pomocną. Kluczowe będą także adekwatna architektura i dobry podział pracy, aby poszczególne osoby, czy w naszym zespole, czy po stronie klienta, nie były mocno od siebie zależne i mogły zminimalizować ilość potrzebnego czasu wspólnego. Rekomendowałbym zatem do tego zespołu Leada technicznego lub Architekta.

atrybuty jakościowe

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:

  • Czy jest nam potrzebne upewnienie się, że 99,xxx% zapytań dojdzie do klienta w X milisekund (odsyłam do zapoznania się z SLA, SLO i SLI)?
  • Czy mamy ograniczenia kosztów infrastruktury?
  • Czy czas wdrożenia nowej wersji jest kluczowy?
  • Czy znane są scenariusze krytyczne dla biznesu?
  • Czy klient wymaga spójności natychmiastowej, czy zgadza się na spójność końcową, to znaczy czy dane muszą być dostępne natychmiast po zapisaniu, czy mogą być opóźnione?
  • Jaki jest czas, w którym klient deklaruje się dostarczać odpowiedzi dla zespołu?
  • Jaki jest akceptowalny koszt obsłużenia jednego użytkownika?
  • Jaki ruch przewidujemy w najbliższych latach (wyrażony w użytkownikach lub liczbie odwiedzin strony)?
  • Czy musimy przechowywać dane wrażliwe (prawo do bycia zapomnianym, GDPR, anonimizacja itp.)? – To świetne pytanie jako wstęp do badania potrzeb w sferze specjalistów.

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ół.

konwencje

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.

3.

Zakończenie

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ł.

Chcesz być na bieżąco z nowymi artykułami?

Zostań w kontakcie, aby otrzymywać w mailowej pigułce to co mamy najlepszego.

Jak już płyniesz pod prąd, to weź ze sobą płetwy

Czyli nasz newsletter! O czym? O przywództwie, oczywiście. Zapisz się i otrzymuj co dwa tygodnie darmową przesyłkę na rozpęd.

Przeczytaj także

Komunikacja
Agata Leś

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.

Czytaj więcej »