Cel zarządzania projektami: Stosowanie zarządzania projektami pomaga rozwiązywać problemy takie jak pominięte wymagania i niejasny podział odpowiedzialności w tworzeniu oprogramowania.
Rodzaje projektów: Różne projekty programistyczne wymagają odmiennego podejścia do zarządzania — od tworzenia nowych rozwiązań po aktualizacje i aplikacje mobilne.
Stosowanie metodyk zwinnych: Metodyki zwinne, Scrum i Kanban oferują zespołom programistycznym różne korzyści, a każda z nich sprawdza się w przypadku innych potrzeb projektowych.
Najważniejsze zagrożenia: Do typowych zagrożeń należą rozszerzanie zakresu projektu, dług techniczny i niewystarczające testowanie — wszystkie wymagają strategicznego zarządzania.
Jeśli nie korzystasz z zarządzania projektami w tworzeniu oprogramowania (lub z odpowiedniego oprogramowania do zarządzania projektami), prawdopodobnie napotykasz różnego rodzaju problemy, które mogą wykoleić wydania: pominięte wymagania projektowe, niekontrolowane rozszerzanie zakresu, słabą komunikację i niejasny podział odpowiedzialności. Zarządzanie projektami pomaga przejąć kontrolę i dostarczać więcej wydań na czas, w ramach budżetu i zgodnie z zakresem.
Ten przewodnik zawiera wszystko, co musisz wiedzieć o zarządzaniu projektami w tworzeniu oprogramowania. Poznasz praktyczne ramy działania, które pomogą szybciej dostarczać rozwiązania, ograniczać ryzyko i budować proces, który Twój zespół programistyczny będzie w stanie utrzymać.
Czym jest zarządzanie projektami programistycznymi?
Zarządzanie projektami programistycznymi to dziedzina obejmująca planowanie, koordynowanie i nadzorowanie tworzenia lub rozwoju produktów programistycznych w całym cyklu życia oprogramowania. Obejmuje zakres, harmonogram, budżet, jakość, dynamikę zespołu i komunikację z interesariuszami w każdej inicjatywie, w której działające oprogramowanie jest głównym rezultatem.
Projekty programistyczne wiążą się z wyjątkowymi wyzwaniami, których ogólne ramy zarządzania projektami nie uwzględniają w pełni. Oto podsumowanie różnic.
| Wymiar | Ogólne zarządzanie projektami | Zarządzanie projektami programistycznymi |
|---|---|---|
| Zmienność zakresu | Określony na wczesnym etapie, zmiany są formalnie zarządzane | Wymagania stale się zmieniają w miarę przekazywania opinii przez użytkowników |
| Rodzaj rezultatu | Rezultaty fizyczne lub oparte na dokumentach | Niematerialny kod, interfejsy API i interfejsy użytkownika |
| Pętle informacji zwrotnej | Przegląd po dostarczeniu lub kontrola etapowa | Ciągła integracja, przeglądy sprintów, testy beta |
| Narzędzia | Wykresy Gantta, narzędzia do wyrównywania obciążenia zasobów | Systemy śledzenia zgłoszeń, repozytoria Git, potoki CI/CD |
| Struktura zespołu | Hierarchia oparta na rolach | Wielofunkcyjne zespoły ze współdzieloną odpowiedzialnością |
Tworzenie oprogramowania a zarządzanie projektami programistycznymi
Tworzenie oprogramowania polega na pisaniu, testowaniu i wdrażaniu kodu. Zarządzanie projektem programistycznym polega na dopilnowaniu, aby kod został napisany, przetestowany i wdrożony w sposób, który dostarcza wartość zgodnie z harmonogramem i w ramach budżetu.
Oto porównanie celów tworzenia oprogramowania i celów zarządzania projektami, które pozwala zobrazować najważniejsze różnice.
| Cele tworzenia oprogramowania | Cele zarządzania projektami |
|---|---|
| Tworzenie funkcji spełniających specyfikacje techniczne | Dostarczanie właściwych funkcji we właściwym czasie |
| Pisanie czystego, łatwego w utrzymaniu kodu | Utrzymywanie zgodności zakresu, budżetu i harmonogramu projektu |
| Usuwanie błędów i ograniczanie liczby defektów | Zarządzanie ryzykiem, zależnościami i oczekiwaniami interesariuszy |
| Optymalizacja wydajności systemu | Koordynowanie wielofunkcyjnych zespołów i usuwanie przeszkód |
Rodzaje projektów programistycznych
Oto zestawienie najczęściej spotykanych rodzajów projektów programistycznych:
- Tworzenie nowego oprogramowania: Tworzysz rozwiązanie od podstaw, bez ograniczeń wynikających z istniejących systemów. Zarządzanie projektem koncentruje się na analizie wymagań, decyzjach dotyczących architektury i szybkim prototypowaniu. Największym ryzykiem jest rozszerzanie zakresu, ponieważ wszystko wydaje się możliwe.
- Aktualizacje, poprawki i bieżące utrzymanie: Są to działania o mniejszym zakresie i z oczekiwaniem szybkiej realizacji. Zarządzanie projektem koncentruje się na ustalaniu priorytetów, testach regresji i koordynacji wydań. Ryzyko polega tutaj na narastaniu długu technicznego wskutek stosowania skrótów.
- Projekty aplikacji mobilnych: Projekty mobilne mają szybkie cykle iteracji, na które wpływają terminy przeglądów w sklepach z aplikacjami i fragmentacja urządzeń. Zarządzanie projektem obejmuje zapewnienie jakości specyficzne dla platformy, decyzje dotyczące parytetu funkcji i pętle analityki użytkowników.
- Rozwiązania dla przedsiębiorstw i SaaS: Wiążą się z wysokimi wymaganiami dotyczącymi zgodności i skalowalności. Zarządzanie projektem przesuwa się w stronę przeglądów bezpieczeństwa, uwzględniania architektury wielodostępnej i uzgadniania działań z długim cyklem sprzedaży. Zarządzanie interesariuszami staje się bardziej złożone.
- Integracje systemów i migracje danych: Praca ma wysoce techniczny charakter i w dużym stopniu zależy od systemów zewnętrznych. Zarządzanie projektem koncentruje się na mapowaniu zależności, walidacji danych i planowaniu wycofania zmian. Ryzyko dotyczące harmonogramu jest wyższe niż przeciętne, ponieważ interfejsy API firm trzecich i starsze systemy wprowadzają nieprzewidywalne przeszkody.
Metodyki zarządzania projektami dla zespołów programistycznych
Metodyka zwinna
Metodyka zwinna to iteracyjne podejście, w którym praca jest dostarczana w małych, użytecznych przyrostach. Zespoły planują, tworzą, testują i dokonują przeglądu w krótkich cyklach, a następnie stale wykorzystują informacje zwrotne do korygowania kierunku. Cztery wartości z Manifestu Agile (ludzie i interakcje ponad procesy i narzędzia, działające oprogramowanie ponad obszerną dokumentację, współpraca z klientem ponad negocjowanie umów oraz reagowanie na zmiany ponad realizację planu) wyznaczają ramy tej filozofii.
Metodyka zwinna najlepiej sprawdza się, gdy wymagania prawdopodobnie będą się zmieniać, gdy informacje zwrotne od użytkowników końcowych powinny kształtować produkt oraz gdy zespoły pracują w jednej lokalizacji lub mają dobre nawyki komunikacji asynchronicznej. Słabo pasuje do projektów z rygorystycznymi etapami regulacyjnymi lub umowami o stałym zakresie, w których zlecenia zmian wiążą się z karami finansowymi.
Scrum
Scrum organizuje pracę zwinną w sprinty, czyli iteracje o stałej długości, trwające zazwyczaj od jednego do czterech tygodni. Istnieją trzy główne role: Scrum master, który ułatwia przebieg procesu, właściciel produktu, który odpowiada za backlog, oraz zespół deweloperski, który wykonuje pracę.
Każdy sprint rozpoczyna się planowaniem sprintu, podczas którego zespół wybiera elementy backlogu, do których realizacji się zobowiązuje. Każdego dnia krótkie spotkanie synchronizacyjne pozwala uzgodnić postępy projektu i blokery. Na koniec sprintu zespół prezentuje to, co zostało zbudowane, podczas przeglądu sprintu i analizuje, co należy poprawić, podczas retrospektywy.
Scrum sprawdza się dobrze, gdy zespoły mają stały skład, jasno określone cele sprintu oraz właściciela produktu, który jest rzeczywiście dostępny. Problemy pojawiają się w środowiskach z dużą ilością pracy przerywanej, współdzielonymi zasobami między wieloma zespołami Scrum lub w organizacjach, w których „zobowiązanie sprintu” traktuje się jako zobowiązanie umowne, a nie prognozę.
Kanban
Kanban wykorzystuje wizualną tablicę (tj. tablicę Kanban) z kolumnami reprezentującymi etapy przepływu pracy. Elementy pracy są pobierane od lewej do prawej w miarę udostępniania się zasobów. Kluczowym mechanizmem są limity WIP, czyli ograniczenia liczby elementów, które mogą jednocześnie znajdować się w dowolnej kolumnie. Limity WIP zapobiegają przeciążeniu i uwidaczniają wąskie gardła.
Kanban dobrze sprawdza się w zespołach utrzymaniowych, przy pracy napędzanej zgłoszeniami oraz w każdym środowisku, w którym priorytety zmieniają się codziennie. Dobrze działa również w zespołach odchodzących od doraźnego zarządzania projektami, ponieważ tablica uwidacznia niewidoczną wcześniej pracę bez konieczności przeprowadzania całkowitej przebudowy procesu.
Podejścia hybrydowe
Metody hybrydowe, takie jak Water-Scrum-Fall, łączą wstępne planowanie charakterystyczne dla modelu kaskadowego z iteracyjną realizacją Scrum.
W niektórych organizacjach przyjęcie podejścia hybrydowego jest przemyślaną odpowiedzią na projekty, które rzeczywiście wymagają zarówno nadzoru, jak i zwinności. Jeśli jednak podejście hybrydowe oznacza, że przeprowadzasz planowanie sprintu, ale pomijasz retrospektywy, albo tworzysz kartę projektu, lecz nigdy jej nie aktualizujesz, po prostu unikasz zobowiązania.
Test jest prosty: czy potrafisz wyjaśnić, dlaczego każdy element twojego podejścia hybrydowego się w nim znajduje i jaki problem rozwiązuje? Jeśli odpowiedź brzmi: „tak po prostu zawsze to robiliśmy”, twoja metodyka potrzebuje własnej retrospektywy.
| Metodyka | Najlepsze zastosowanie | Długość sprintu/fazy | Elastyczność | Profil ryzyka |
|---|---|---|---|---|
| Metodyka zwinna | Zmieniające się wymagania, praca kierowana przez produkt | 1–4 tygodnie | Wysoka | Niskie do średniego |
| Scrum | Interdyscyplinarne zespoły pracujące iteracyjnie | 1–4 tygodnie (stałe) | Wysoka | Niskie do średniego |
| Kanban | Utrzymanie, operacje, praca napędzana zgłoszeniami | Ciągła | Bardzo wysoka | Niskie |
| Hybrydowa | Projekty korporacyjne, mieszane potrzeby związane z nadzorem | Różna w zależności od fazy | Średnia do wysokiej | Średnie |
Etapy cyklu życia wytwarzania oprogramowania (SDLC)
Każdy etap SDLC wiąże się z określonymi obowiązkami, artefaktami i ryzykami dotyczącymi zarządzania projektem. Oto zakres odpowiedzialności kierownika projektu oprogramowania na każdym etapie.
Planowanie i zbieranie wymagań
Kierownik projektu określa zakres projektu, zbiera wymagania biznesowe i techniczne, identyfikuje interesariuszy oraz tworzy wstępny plan projektu. Do artefaktów należą karta projektu, dokument wymagań i wstępny rejestr ryzyka.
Największym ryzykiem na tym etapie są niekompletne wymagania. Gdy wymagania są niejasne, cierpi na tym wszystko, co następuje później. Przeprowadź ustrukturyzowane warsztaty analityczne i przed dalszymi pracami udokumentuj kryteria akceptacji dla każdej istotnej funkcji.
Kryteria akceptacji powinny być na tyle konkretne, aby dwóch różnych deweloperów, czytając je, zbudowało dokładnie to samo (kryteria akceptacji given-when-then są w tym pomocne). Jeśli Twoje kryteria można zinterpretować na trzy sposoby, nie zostały jeszcze ukończone.
Projekt systemu i architektury
Kierownik projektu koordynuje współpracę architektów, deweloperów i interesariuszy, aby zweryfikować, czy proponowany projekt spełnia potrzeby biznesowe i mieści się w budżecie. Do artefaktów należą diagramy architektury systemu, decyzje dotyczące stosu technologicznego oraz zatwierdzenia przeglądu projektu.
Największym ryzykiem jest przeprojektowanie. Zespoły czasami projektują rozwiązania z myślą o skali, której jeszcze nie potrzebują, i tracą czas oraz pieniądze na infrastrukturę, która przez lata nie będzie miała znaczenia. Widziałem zespół, który spędził trzy tygodnie na budowaniu architektury mikrousług dla narzędzia, które nigdy nie miało obsługiwać więcej niż 200 użytkowników.
Monolit z dobrze wyznaczonymi granicami zostałby wdrożony w tydzień. Zadaniem kierownika projektu jest zapytać: „Jaki problem to rozwiązuje dzisiaj?” i zakwestionować odpowiedź „Żadnego, na razie”.
Tworzenie i budowa
Podczas fazy budowy kierownik projektu śledzi postępy sprintu, zarządza zmianami zakresu za pośrednictwem procesu zgłaszania zmian i usuwa blokady. Do artefaktów należą rejestr zadań sprintu, wykresy spalania oraz raporty statusu.
Największym ryzykiem jest rozszerzanie zakresu. Każde „szybkie dodanie” się kumuluje. Zdyscyplinowana rada ds. zgłaszania zmian wraz z analizą wpływu to najlepsza ochrona. Analiza wpływu nie musi być formalnym dokumentem.
Nawet trzywierszowa wiadomość na Slacku (np. „Dodanie tej funkcji zajmie około dwóch dni, opóźni przeprojektowanie logowania i będzie wymagać dodatkowych testów kontroli jakości dla procesu płatności”) zmusza zgłaszającego do rozważenia kompromisu zamiast traktowania każdego dodatku jako bezpłatnego.
Testowanie i kontrola jakości
Kierownik projektu planuje zakres testów, śledzi usuwanie defektów i potwierdza spełnienie kryteriów akceptacji. Do artefaktów należą plan testów, rejestry defektów oraz raporty zatwierdzenia przez QA.
Największym ryzykiem jest niewystarczający zakres testów, szczególnie w przypadku sytuacji brzegowych i integracji. Testowanie od początku, w którym QA zaczyna pisać przypadki testowe już na etapie projektowania, pozwala wykrywać defekty wcześniej i taniej. Błąd znaleziony podczas projektowania kosztuje minuty pracy. Ten sam błąd znaleziony na produkcji kosztuje godziny, reputację, a czasami także przychody.
Wdrożenie i wydanie
Kierownik projektu koordynuje terminy wydań, plany wycofania zmian i komunikację. Do artefaktów należą plan wydania, lista kontrolna wdrożenia oraz rejestry decyzji o wdrożeniu lub rezygnacji z wdrożenia.
Największym ryzykiem jest nieudane wdrożenie na produkcję. Wdrożenia niebiesko-zielone i wydania kanarkowe pozwalają najpierw udostępnić rozwiązanie podzbiorowi użytkowników i wykryć problemy, zanim dotkną wszystkich.
Utrzymanie i iteracja po uruchomieniu
Po uruchomieniu kierownik projektu włącza projekt w cykl utrzymania, dokonuje wstępnej oceny napływających błędów i planuje iteracyjne usprawnienia. Do artefaktów należą przegląd po uruchomieniu, raporty incydentów oraz zaktualizowany rejestr zadań produktu.
Największym ryzykiem jest zaniedbanie produktu po uruchomieniu. Przygotuj plan zbierania opinii użytkowników i reagowania na nie. Zaplanuj formalny przegląd 30 dni po uruchomieniu z udziałem całego zespołu i kluczowych interesariuszy. Przeanalizuj wskaźniki wykorzystania, zgłoszenia do pomocy technicznej i prośby o nowe funkcje. Następnie ustal priorytety kolejnej iteracji, zanim zespół zostanie przydzielony do innych zadań, a wiedza instytucjonalna wyparuje.
Zarządzanie długiem technicznym
Dług techniczny jest jedną z najbardziej konsekwentnych kwestii nadzorowanych przez kierownika projektu oprogramowania, a zarazem jedną z najmniej widocznych. To narastający koszt skrótów, odroczonej refaktoryzacji, nieaktualnych zależności i decyzji architektonicznych, które były właściwe w swoim czasie, ale już nie pasują.
Rolą kierownika projektu jest uwidocznienie długu technicznego interesariuszom i dopilnowanie, aby w rejestrze zadań przeznaczono na niego odpowiednią część dostępnych zasobów. W praktyce oznacza to trzy rzeczy.
- Prowadź rejestr długu technicznego obok rejestru funkcji. Każdy element powinien zawierać opis długu, jego szacowany wpływ na tempo prac lub niezawodność oraz koszt jego usunięcia. Bez tego dług pozostaje niewidoczny, dopóki nie spowoduje awarii lub nie spowolni dostarczania.
- Przeznaczaj część sprintu na redukcję długu. Zacznij od 15–20%. Niektóre zespoły preferują dedykowany „sprint długu technicznego”, ale z mojego doświadczenia wynika, że stałe przeznaczanie części zasobów zapobiega sytuacji, w której prace nad długiem są anulowane za każdym razem, gdy zbliża się termin.
- Łącz dług z wynikami biznesowymi podczas komunikacji z interesariuszami. Możesz na przykład powiedzieć: „Obecna architektura modułu uwierzytelniania dodaje dwa dni do realizacji każdej funkcji dotyczącej logowania, a trzy z naszych pięciu kolejnych funkcji dotyczą logowania”, zamiast: „Musimy zrefaktoryzować moduł uwierzytelniania”.
Zarządzanie zespołami rozproszonymi i zdalnymi
Zespoły rozproszone i zdalne stwarzają określone wyzwania związane z zarządzaniem projektami, które należy uwzględnić.
Koordynacja stref czasowych
Gdy Twój zespół działa w więcej niż czterech lub pięciu strefach czasowych, okres jednoczesnej dostępności skraca się do wąskiego okna czasowego. Chroń to okno i wykorzystuj je wyłącznie do podejmowania decyzji wymagających dyskusji w czasie rzeczywistym, takich jak planowanie sprintu, przeglądy projektów i rozwiązywanie blokad.
Opublikuj mapę „godzin pracy zespołu”, która pokazuje godziny pracy każdego członka oraz okresy nakładania się tych godzin. Umieść ją w widocznym miejscu w narzędziu, z którego Twój zespół korzysta na co dzień.
Projektowanie ceremonii asynchronicznych
Tradycyjne ceremonie Scrum zakładają pracę w jednej lokalizacji. Dostosowanie ich do zespołów rozproszonych oznacza ponowne przemyślenie ich formatu. Codzienne spotkania mogą przyjąć formę asynchronicznych pisemnych aktualizacji publikowanych na wspólnym kanale do wyznaczonego terminu każdego dnia. Każda aktualizacja obejmuje informacje o tym, co zostało ukończone, co jest zaplanowane i co jest zablokowane. Kierownik projektu przegląda blokady i podejmuje dalsze działania, zamiast czekać na spotkanie.
Przeglądy sprintu mogą łączyć nagranie demonstracyjne z sesją pytań i odpowiedzi na żywo zaplanowaną w okresie nakładania się godzin pracy. Dzięki temu członkowie zespołu, którzy nie mogą uczestniczyć na żywo, mogą obejrzeć demonstrację w dogodnym dla siebie czasie i asynchronicznie przesłać pytania.
Retrospektywy są najtrudniejszą ceremonią do przeprowadzenia asynchronicznie, ponieważ zależą od bezpieczeństwa psychologicznego i otwartego dialogu. Retrospektywy powinny odbywać się synchronicznie, nawet jeśli oznacza to organizowanie ich rzadziej.
Dokumentacja jako infrastruktura
W zespołach rozproszonych dokumentacja przestaje być opcjonalna. Jeśli decyzja nie została zapisana, to tak, jakby nie została podjęta, ponieważ trzy osoby, które nie były online podczas tej rozmowy na Slacku, jej nie zobaczą. Utrzymuj jedno wiarygodne źródło informacji o decyzjach, wyborach architektonicznych i zmianach priorytetów. Aktualizuj je tego samego dnia, w którym podjęto decyzję, a nie tydzień później, gdy połowa kontekstu zostanie utracona.
Wskaźniki i KPI w zarządzaniu projektami programistycznymi
Wskaźniki pokazują, czy proces działa, czy tylko sprawia takie wrażenie. Oto wskaźniki, które śledzę w każdym projekcie:
| KPI | Co mierzy | Dlaczego go mierzyć | Idealna częstotliwość | Kiedy podjąć działanie |
|---|---|---|---|---|
| Prędkość realizacji | Praca ukończona w ramach sprintu, np. punkty historyjek lub zadania | Pozwala mierzyć względny poziom wysiłku w każdym sprincie oraz tempo pracy zespołu | Każdy sprint | Gdy spada o co najmniej 20% przez dwa kolejne sprinty |
| Czas cyklu | Czas trwania pojedynczego elementu pracy | Pomaga ujawnić wąskie gardła w przepływie pracy, dzięki czemu można skoncentrować wysiłki | Co tydzień | Gdy średnia przekracza cel zespołu o 50% |
| Czas realizacji | Czas od umieszczenia w backlogu do dostarczenia | Zapewnia wgląd w szybkość procesu od początku do końca i jest łatwy do interpretacji przez interesariuszy | Co tydzień | Gdy interesariusze zgłaszają, że dostarczanie przebiega zbyt wolno |
| Gęstość defektów | Liczba błędów na linie kodu lub funkcję | Pomaga dostrzec trendy sygnalizujące problemy z jakością w procesie programowania lub testowania | Przy każdym wydaniu | Gdy gęstość rośnie przez trzy kolejne wydania |
| Dokładność wykresu spalania | Planowane ukończenie sprintu w porównaniu z rzeczywistym | Pomaga wykrywać problemy z szacowaniem, zmiany zakresu w trakcie sprintu lub oba te zjawiska | Każdy sprint | Gdy planowane i rzeczywiste wyniki stale różnią się o co najmniej 30% |
| Satysfakcja interesariuszy | Zaufanie interesariuszy do realizacji | Pomaga zapewnić sukces projektu | Co kwartał | Gdy satysfakcja spada lub informacje zwrotne całkowicie ustają |
Oto kilka przydatnych metod śledzenia postępów:
- Wykresy spalania pokazują pozostałą pracę w czasie trwania sprintu. Są przydatne podczas codziennych spotkań i kontroli kondycji sprintu.
- Wykresy narastające pokazują ukończoną pracę w czasie na tle całkowitego zakresu, dzięki czemu zmiany zakresu stają się widoczne. Jeśli linia całkowitego zakresu stale rośnie, można obserwować narastanie zakresu w czasie rzeczywistym.
- Skumulowane diagramy przepływu przedstawiają wizualnie liczbę elementów znajdujących się na każdym etapie przepływu pracy, aby ujawnić narastanie pracy w toku i trendy przepustowości. Poszerzający się pas w dowolnej kolumnie oznacza, że praca się tam kumuluje.
- Zarządzanie wartością wypracowaną (EVM) porównuje wartość planowaną, wartość wypracowaną i rzeczywisty koszt, aby prognozować wydajność budżetu i harmonogramu. Jest bardziej rozbudowane, niż potrzebuje większość zespołów zwinnych, ale ma dużą wartość w projektach o stałym budżecie i zewnętrznych wymaganiach dotyczących raportowania.
Najlepsze praktyki zarządzania projektami programistycznymi
Oto kilka kluczowych najlepszych praktyk dotyczących zarządzania projektami programistycznymi.
Wyznaczanie celów i klarowność wymagań
Stosuj cele SMART dostosowane do zakresu oprogramowania. Zamiast „ulepszyć proces finalizacji zakupu” napisz „zmniejszyć odsetek porzuceń finalizacji zakupu o 15% do III kwartału poprzez przeprojektowanie etapu płatności i dodanie obsługi Apple Pay”. Każdy cel powinien mieć mierzalny rezultat, termin realizacji i osobę odpowiedzialną.
Najbardziej niedocenianą częścią wyznaczania celów projektu jest mówienie „nie”. Cel, który próbuje zrealizować cztery zadania, nie realizuje dobrze żadnego z nich. Ogranicz liczbę głównych celów do maksymalnie dwóch na sprint i dodaj jeden cel dodatkowy. Jeśli wszystko jest priorytetem, nic nim nie jest.
Strategie komunikacji
Przyjmij podejście, w którym komunikacja asynchroniczna jest najważniejsza. Zamiast planować kolejne spotkanie, zapisuj aktualizacje statusu we wspólnym dokumencie lub narzędziu do zarządzania projektami. Czas na komunikację synchroniczną przeznaczaj na podejmowanie decyzji, prezentacje i retrospektywy.
Stosuj cotygodniowe podsumowanie dla interesariuszy, codzienne spotkania statusowe dla zespołu realizującego projekt (w przypadku zespołów rozproszonych w formie asynchronicznej) oraz prezentację co dwa tygodnie dla szerszego grona interesariuszy. Dbaj o to, aby aktualizacje statusu były krótkie i uporządkowane. Zacznij od informacji o tym, co zostało wdrożone, co jest zablokowane i co wydarzy się w następnej kolejności.
Alokacja zasobów i zarządzanie nimi
Stwórz macierz kompetencji przedstawiającą mocne strony, obszary rozwoju i dostępność każdego członka zespołu. Korzystaj z niej podczas planowania sprintu, aby równomiernie rozłożyć obciążenie pracą i uniknąć pojedynczych punktów awarii. Gdy członkowie zespołu pracują przy kilku projektach, z wyprzedzeniem ustal zasady priorytetyzacji, aby nie musieli nieustannie przełączać się między kontekstami.
Standardy jakości
Zdefiniuj definicję ukończenia przed rozpoczęciem pierwszego sprintu. Dobra definicja ukończenia może obejmować zakończony przegląd kodu, pomyślnie przechodzące testy jednostkowe, pomyślnie przechodzące testy integracyjne, zaktualizowaną dokumentację oraz akceptację właściciela produktu. Nie pozwól, aby „ukończone” oznaczało tylko „kompiluje się”.
Zapisz definicję ukończenia, umieść ją w miejscu widocznym dla zespołu i egzekwuj ją bez wyjątków przez pierwsze trzy sprinty. Później zespół będzie egzekwował ją samodzielnie. Gdy po raz pierwszy pozwolisz oznaczyć zadanie jako „ukończone” bez spełnienia kryteriów z powodu presji czasu, ustanowisz zasadę, że definicja jest opcjonalna. Tego nie da się już naprawić.
Ciągłe doskonalenie
Przeprowadzaj retrospektywy po każdym sprincie i każdym wydaniu. Podczas każdej retrospektywy skup się na jednym lub dwóch działaniach i sprawdź ich realizację w następnym cyklu. Retrospektywy, w wyniku których powstają zadania, ale nie są one realizowane, szybko podważają zaufanie.
Każdą retrospektywę zaczynaj od przeglądu zadań z poprzedniej. Czy je wykonaliśmy? Czy przyniosły rezultaty? Jeśli odpowiedź brzmi „nie wykonaliśmy ich”, właśnie to powinno stać się tematem retrospektywy. Albo zadania nie były wystarczająco ważne, aby nadać im priorytet, albo zespół nie ma możliwości lub uprawnień, by je zrealizować. Obie kwestie warto szczerze omówić.
Typowe wyzwania i sprawdzone rozwiązania
Oto niektóre z głównych wyzwań, z którymi zetkniesz się podczas zarządzania projektami programistycznymi, oraz sposoby ich rozwiązania.
| Wyzwanie | Przyczyna źródłowa | Rozwiązanie |
|---|---|---|
| Rozszerzanie zakresu | Niejasne wymagania, słaba kontrola zmian | Rada ds. wniosków o zmianę z szablonem analizy wpływu |
| Wąskie gardła zasobów | Niewystarczająca widoczność dostępnych mocy przerobowych | Macierz kompetencji połączona z planowaniem sprintu równoważącym obciążenie |
| Problemy z synchronizacją zespołu | Komunikacja w silosach | Międzyfunkcyjne spotkania statusowe i wspólne OKR |
| Ryzyko problemów z jakością | Niewystarczające pokrycie testami | Wczesne zapewnianie jakości z automatycznymi bramkami testów regresji |
| Presja czasu | Błąd optymizmu w szacowaniu | Porównywanie historycznej prędkości realizacji z uwzględnieniem sprintów buforowych |
Zarządzanie budżetem i szacowanie
Istnieje kilka metod, których można użyć do szacowania kosztów i liczby godzin w projektach związanych z tworzeniem oprogramowania.
- Szacowanie analogiczne wykorzystuje rzeczywiste koszty z podobnych projektów z przeszłości. Jest szybkie, ale wymaga porównywalnych danych historycznych. Dokładność zależy całkowicie od tego, jak podobny był faktycznie wcześniejszy projekt, a ludzie mają tendencję do przeceniania stopnia tego podobieństwa.
- Modele parametryczne stosują statystyczne zależności między danymi historycznymi a zmiennymi projektu. Jeśli średni koszt jednego punktu historyjki wynosi $1,200, możesz prognozować budżet na podstawie szacowanej liczby punktów historyjek. Dobrze sprawdza się to w organizacjach stosujących dojrzałe praktyki śledzenia danych.
- Szacowanie oddolne polega na wycenie każdego zadania i zsumowaniu wyników. Jest dokładne, ale również czasochłonne. Warto stosować je w projektach, w których dokładność budżetu ma kluczowe znaczenie (np. w przypadku umów o stałej cenie, prac finansowanych z dotacji lub sytuacji, w których przekroczenie kosztów o 20% miałoby poważne konsekwencje).
- Szacowanie trzypunktowe wykorzystuje wartości optymistyczne, najbardziej prawdopodobne i pesymistyczne, aby obliczyć średnią. Uwzględnia niepewność i ma dodatkową zaletę: zmusza zespół do zastanowienia się nad tym, co może pójść nie tak, co może pomóc w zarządzaniu ryzykiem.
Niezależnie od wybranej metody oprogramowanie do śledzenia czasu może dostarczyć informacji o rzeczywistej liczbie godzin poświęconych na zadania i projekty, aby można było porównać je z szacunkami.
Śledzenie budżetu w całym cyklu życia projektu
Śledź planowane i rzeczywiste wydatki co najmniej co dwa tygodnie. Metryki wartości wypracowanej, takie jak wskaźnik efektywności kosztowej (CPI) i wskaźnik efektywności harmonogramu (SPI), dają wczesne ostrzeżenia. CPI poniżej 1,0 oznacza, że wydajesz więcej na jednostkę pracy, niż planowano. Jeśli wykryjesz to odpowiednio wcześnie, możesz dostosować zakres, harmonogram lub zasoby, zanim budżet się wyczerpie.
Przydatnym nawykiem budżetowym, który wypracowałem, jest prosty przegląd tempa wydatków co dwa tygodnie. Porównaj bieżące tempo wydatkowania z pozostałym budżetem i zakresem pozostałych prac. Jeśli obliczenia się nie zgadzają, masz dokładnie trzy możliwości: ograniczyć zakres, wydłużyć harmonogram lub dodać zasoby.
Zapobieganie przekroczeniom kosztów
Największe przekroczenia kosztów wynikają z trzech źródeł: zmian zakresu bez korekty budżetu, niedoszacowanej złożoności oraz późnego wykrywania defektów.
Formalny proces obsługi wniosków o zmianę, obejmujący analizę wpływu na koszty, rozwiązuje pierwszy problem. Gdy interesariusz prosi o dodanie czegoś do projektu, odpowiedź powinna zawsze zawierać informację: „oto jaki jest tego koszt i z czego trzeba zrezygnować”.
Estymacja trzypunktowa rozwiązuje drugi problem, uwzględniając niepewność w prognozie zamiast ją ignorować. Różnica między wartościami optymistycznymi i pesymistycznymi sama w sobie jest użyteczną informacją. Zadanie, którego optymistyczne oszacowanie wynosi dwa dni, a pesymistyczne trzy tygodnie, pokazuje, że zespół projektowy nie rozumie pracy wystarczająco dobrze, aby ją oszacować.
Testowanie na wcześniejszych etapach rozwiązuje trzeci problem. Krzywa kosztu naprawy defektów jest dobrze udokumentowana: błąd wykryty na etapie wymagań kosztuje 1x, aby go naprawić, na etapie tworzenia oprogramowania 6x, podczas testów 15x, a na produkcji 100x. Każdy dolar zainwestowany we wczesne testowanie zwraca się.
Co dalej?
Odpowiednie oprogramowanie do zarządzania projektami związanymi z tworzeniem oprogramowania może znacznie ułatwić wdrażanie tych najlepszych praktyk. Możesz także uzyskać więcej wskazówek dotyczących wyboru odpowiedniego narzędzia do zarządzania projektami dostosowanego do Twoich potrzeb.
