Jak nasz product development przyczynia się do walki z COVID-19?

Niedawno mieliśmy okazję pracować nad platformą dla pacjentów WithHealth, oferującą między innymi programy bezpieczeństwa w miejscach pracy i na planach filmowych w kontekście walki z COVID-19. Szczegóły na temat początków współpracy, zakresu prac i efektów, jakie przyniosły naszemu klientowi, poznasz czytając case study na naszej stronie.

Dziś chcemy pokazać Ci, jak wyglądała ta współpraca z naszej perspektywy, jakim wyzwaniom stawiliśmy czoła oraz jakie wnioski udało się nam wyciągnąć. Oto wywiad z członkami zespołu, który pracował nad platformą WithHealth.

Jaki był zakres prac Pragmatic Coders przy tworzeniu platformy WithHealth? 

Paweł Miżwa (Fullstack developer): Stworzenie produktu wymaga kompleksowej obsługi, czyli stworzenia designów, postawienia infrastruktury, odwzorowania szablonów w postaci UI oraz stworzenia API do obsługi zapytań. My byliśmy odpowiedzialni za każdy z tych etapów. Część prac trwa do teraz.

Jakub Dobosz (Product Owner): Zgadza się. Dostarczamy klientowi kompletne rozwiązanie – od opracowywania koncepcji, przez projekty, implementację, aż po wdrożenie (włączając w to infrastrukturę). Co ciekawe, nasz klient przychodzi do nas również z innymi tematami, niezwiązanymi z rozwijanym produktem, aby skorzystać z naszej wiedzy eksperckiej i umiejętności efektywnej analizy danego zagadnienia z wielu perspektyw.

Na czym polega rola Product Ownera w tym projekcie? Jak wyglądał Product Management?

Jakub (Product Owner): Na początku współpracy Product Owner był po stronie klienta. Działało to do momentu wyjścia na produkcję, kiedy pojawiło się wiele potrzeb od różnych interesariuszy i problem z ilością pracy oraz jej priorytetyzacją. 

Moimi dwoma głównymi celami na początku było ułożenie backlogu oraz dbanie o efektywny przepływ wiedzy domenowej w powiększającym się zespole. Stosowaliśmy różne podejścia do zarządzania, zaczynając od tablicy kanbanowej, której celem było zaadresowanie najważniejszych potrzeb sprzed mojego dołączenia, aby stopniowo przejść na pracę w Scrumie. Kolejnym, bardzo istotnym elementem, było dołączenie po stronie klienta osoby odpowiedzialnej za rozwój produktu. Od tamtego momentu wypracowaliśmy efektywną współpracę w dzieleniu roli PO i zarządzaniu rozwojem produktu.

Paweł (Fullstack developer): Dzięki temu projektowi zrozumiałem, jak wielką zaletą jest posiadanie Product Ownera w zespole. Jest on kimś w rodzaju mediatora pomiędzy wymaganiami klienta, a zasobami, jakimi dysponują deweloperzy. Jakub spotyka się z klientem częściej niż pozostali członkowie zespołu, dzięki czemu mają więcej czasu na dostarczanie wartości. Po takich spotkaniach dostajemy całą wiedzę w pigułce. Warto dodać, że Jakub błyskawicznie odpowiada na wszelkie nasze pytania i rozwiewa wątpliwości, co pomaga w szybszym wytwarzaniu oprogramowania. PO rozmawia z klientem o wizji produktu, przez co cały zespół rozumie, na czym stoi i czego spodziewać się w przyszłych sprintach.

Jacek Janus (JS Developer): Jakub dba o backlog (priorytety), refinementy, organizację pracy i komunikację z klientem. Zapanowanie nad tymi obszarami jest kluczowe, żeby wszystko ze sobą grało. Jest tu jeszcze kwestia budowania zaufania klienta – może on być pewien, że to, na co umówiliśmy się w danej iteracji, będzie dostarczone i będzie działało.

Co było dla Ciebie najciekawszym wyzwaniem podczas pracy nad tym produktem? 

Jakub (Product Owner): Opanowanie chaosu i doprowadzenie do stabilnego rozwoju produktu.

Jacek (JS Developer): Możliwość wdrażania wymagań w sposób, w jaki chcemy, weryfikacja własnej “pragmatyczności”, operacje na żywym organizmie (system na produkcji), tworzenie skalowalnych rozwiązań i odkrywanie zależności domenowych.

Mateusz Grądkowski (UX/UI Designer): Największym wyzwaniem była spójność produktu z nowymi funkcjami, które są rozwijane. Ciągłe poszukiwanie nowych rozwiązań oraz bezpośredni wpływ na to, co i jak zostanie zaprojektowane.

Kinga Wigurska-Bąk (Front-end Developer): Udział wszystkich developerów w spotkaniach z klientem, możliwość proponowania własnych rozwiązań i pomysłów. Aktywna dyskusja z klientem, która “rodziła” kolejne pomysły i jeszcze lepsze rozwiązania.

Paweł (Fullstack developer): Mógłbym wyróżnić trzy wyzwania, które były najciekawsze z mojej perspektywy. Po pierwsze stworzenie procesora obrazów z kart szczepień, który zmienia rozszerzenie pliku oraz zmniejsza go, a następnie zintegrowanie z mechanizmem OCR, który pozwala na zidentyfikowanie, czy podany obraz jest poprawny. Po drugie przygotowanie mechanizmu raportowania danych zawartych w portalu. A po trzecie sporządzenie wykresu przedstawiającego trendy na interfejsie, pozwalającego śledzić zmiany w liczbie ankiet czy wyniki badań. Można na przykład zobaczyć, jak wygląda wzrost liczby pacjentów z pozytywnym wynikiem testu na COVID-19.

work in progress

W jaki sposób zdobywacie wiedzę na temat użytkowników platformy? Czy prowadzicie jakieś badania?

Jakub (Product Owner): Na każdym sprint review rozmawiamy z naszym klientem na temat tego, jakie usprawnienia widzą oni, jako administratorzy systemu, i jakie potrzeby zgłaszają użytkownicy portalu. Co więcej, trzymamy się zasady, że przegląd sprintu prowadzony jest przez interesariuszy – używają na żywo funkcji, które dostarczamy w danym sprincie. Dzięki temu jesteśmy w stanie bardzo szybko wyłapać, co może być nie do końca intuicyjne i od razu to usprawnić.

Kinga (Front-end Developer): Tak jak wspomniał Jakub, użytkownikami naszej aplikacji są również administratorzy systemu, czyli nasz klient. Sprint review prowadzone przez klienta to świetna okazja, żeby podejrzeć w jaki sposób aplikacja jest używana na co dzień, czy wprowadzone przez nas rozwiązania są intuicyjne dla końcowego użytkownika. Dodatkowo na syncu (codziennie spotkanie mające na celu synchronizację działań z klientem) zawsze pytamy o bieżące sprawy, problemy i staramy się je rozwiązywać, żeby usprawnić pracę klienta (np. wyeliminować manualne procesy na rzecz automatycznych).

Jacek (JS Developer): Po wyjściu na produkcję staramy się zbierać feedback od klienta i dowiadywać się o wrażeniach naszych użytkowników. Do tego cały czas zbieramy statystyki z bieżącego użycia aplikacji i wdrażamy odpowiednie optymalizacje (np. alternatywne ścieżki rejestracji).

Paweł (Fullstack developer): Stale monitorujemy działanie systemu. Pamiętam błąd, który pojawiał się przy wypełnianiu codziennych ankiet. W momencie, gdy otrzymaliśmy kilkanaście wiadomości od użytkowników, którzy nie mogli wypełnić takiej ankiety, my już pracowaliśmy nad rozwiązaniem. Jeśli wzrasta użycie danej części systemu, jak np. wgranie dużej liczby badań z laboratoriów, wówczas pytamy klienta, czy w tej części systemu wymagane jest nasze wsparcie, np. przy automatyzacji pracy manualnej. 

W jaki sposób pracowaliście i z jakich narzędzi korzystaliście?

Jakub (Product Owner): Obecnie działamy w ramach scrumowych. Wcześniej do konkretnych celów wykorzystywaliśmy tablice kanbanowe. Jeżeli chodzi o komunikację, to używamy na co dzień Discorda, który symuluje bycie ze sobą w biurze – w każdym momencie ktoś może się odezwać i poprosić o pomoc. 

Kinga (Front-end Developer): Oprócz wspomnianego Discorda często organizujemy wewnętrzne prelekcje – jeżeli jakieś zagadnienie, dziedzina czy oprogramowanie jest bardziej znane jednej osobie, chętnie dzieli się ona wiedzą i wdraża cały zespół.

Dodatkowo mamy w zespole podejście: “Spróbujmy, zobaczmy czy się to u nas sprawdzi”, dzięki czemu wdrożyliśmy kilka ulepszeń w naszych procesach (np. refinement dużego story, które podzieliliśmy na mniejsze, korzystając z kolorowych karteczek i zaangażowania całego zespołu).

Jacek (JS Developer): Pracowaliśmy scrumowo – iteracyjnie. Narzędzia, których używaliśmy to przede wszystkim Discord i Slack do komunikacji, a do tego czasem Miro i JIRA do zarządzania projektem.

Jak Ci się pracowało z tym zespołem i z tym klientem?

Jakub (Product Owner): Wybornie 🙂 Wszystkie wysiłki, które wkładaliśmy i wkładamy w zwiększanie efektywności naszej pracy oraz w rozwój produktu przynoszą dużą satysfakcję. Przez ten czas zbudowaliśmy środowisko sprzyjające swobodnej wymianie zdań oraz pomysłów. Co najważniejsze – zawiera ono również naszego klienta!

Mateusz (UX/UI Designer): Praca zarówno z zespołem, jak i z klientem przebiega dynamicznie oraz bardzo sprawnie. Doceniam zaangażowanie zespołu oraz bezpośredni wpływ jego członków w procesie UX oraz w poszukiwaniu najlepszych rozwiązań, co przekłada się na zadowolenie klienta.  

Od strony klienta natomiast nasz zespół cieszy się zaufaniem, co ma bezpośredni wpływ zarówno na atmosferę w pracy, jak i jej efekt. 

Kinga (Front-end Developer): Nie skłamię, jeśli powiem, że to najlepszy zespół, z jakim do tej pory pracowałam! 🙂 Pomimo tego, że dołączyłam do niego w trakcie trwania projektu, od początku czułam się jego członkiem. Dotychczas wypracowana komunikacja i zbudowane zaufanie z klientem sprawiło, że również na tej płaszczyźnie nie odczuwałam żadnych problemów jako “nowa”.

Paweł (Fullstack developer): Praca w zespole przebiegała bardzo efektywnie. Jeśli chodzi o współpracę z klientem, to pomagała jego świadomość w kwestii mechanizmów wytwarzania oprogramowania – np. systemu planowania pracy, jak wydzielamy elementy wartości biznesowej w postaci historii na Jirze, spotkań, jakie występują podczas pracy w Scrumie czy pracy podzielonej na sprinty.

Jacek (JS Developer): Wewnątrz zespołu potrafiliśmy wypracować zestaw dobrych praktyk, które pozwalały nam efektywniej pracować i przydadzą się też w przyszłości. Dobre retro to ważna rzecz. Cenne było również to, że płynnie mogliśmy się dostosować do zmiennych potrzeb klienta jeśli chodzi o rozmiar zespołu. Praca z klientem miała 2 fazy – kiedy klient próbował robić management i kiedy my przejęliśmy ownership (moment przyjścia Kuby) – ta druga była super. Wypracowanie zaufania klienta pozwoliło nam na dodatkowy wzrost efektywności – możemy szerzej dowiedzieć się o biznesie klienta i przez to dostarczać lepsze rozwiązania. Ważne też, żeby mieć kontakt z odpowiednimi osobami, z którymi można nadawać na tych samych falach.

Jakie wnioski udało się Wam wyciągnąć z dotychczasowej współpracy? Czego nowego się nauczyliście, jakie umiejętności udało się Wam rozwinąć? 

Jakub (Product Owner): Bycie profesjonalistą w tym, co się robi, umożliwia szybsze budowanie relacji i zaufania oraz rozpoznanie potrzeb klienta. Dzięki temu jesteśmy w stanie dostarczać wartość biznesową, którą użytkownicy końcowi produktu rzeczywiście oczekują.

Kinga (Front-end Developer): Doskonała atmosfera w zespole oraz dzielenie się wiedzą (również w obrębie całej firmy) znacznie poprawiły moją efektywność. Przyszłam do firmy jako frontendowiec, a teraz zajmuję się również backendem (co zawsze mnie interesowało).

Paweł (Fullstack developer): Technicznie: tworzenie backendu w NodeJs, frontu w ReactJs oraz infrastruktury serverless na AWS. Nietechnicznie: jak pracować w domu w czasie lockdownu, jak ograniczyć spotkania do minimum, jak pracować w zespole, który jest odpowiedzialny za cały produkt (czyli jak dzielić pracę, żeby była efektywna), jak monitorować rozwiązania, wyłapywać błędy oraz szybko je niwelować. 

Jacek (JS Developer): Naprawdę można nauczyć się czegoś tylko będąc na produkcji – i od strony biznesu i od strony weryfikacji tego, co się do tej pory stworzyło. Dług techniczny najlepiej spłacać zanim powstanie – zrozumienie domeny i wynikający z tego design są kluczowe w dostarczeniu rozwijanego rozwiązania. Żeby zrozumieć domenę, potrzebne jest otwarcie od strony klienta – zespół powinien mieć jak najszersze pojęcie o tym, czego oczekuje klient i użytkownicy.

Co udało się osiągnąć, a nad czym wraz z klientem planujecie pracować w przyszłości?

Jakub (Product Owner): Mamy stabilny produkt, który rozwijamy. Planujemy rozbudować go w kierunku wsparcia zarządzania post-covidowego, czyli zarządzania szczepieniami, rozbudowanego raportowania stanu zdrowia organizacji korzystającej z usług naszego klienta i wsparcie konceptu paszportu zdrowotnego.

Jacek (JS Developer): Do tego, co powiedział Jakub, dodam, że to co stworzyliśmy, okazuje się na tyle dobrze przemyślane i elastyczne, że klient może realizować coraz to nowe wymagania od swoich klientów w oparciu o istniejące funkcjonalności.

Dziękujemy bardzo Jakubowi, Pawłowi, Jackowi, Kindze i Mateuszowi za podzielenie się swoim doświadczeniem pracy w zespole Pragmatic Coders. Wywiad przygotował Szymon Dyrlaga.