Skip to main content
Key Takeaways

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.

Continue Reading for Free

Create a free account to finish this article, plus get ongoing access to timely insights and practical resources.

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.

WymiarOgólne zarządzanie projektamiZarządzanie projektami programistycznymi
Zmienność zakresuOkreślony na wczesnym etapie, zmiany są formalnie zarządzaneWymagania stale się zmieniają w miarę przekazywania opinii przez użytkowników
Rodzaj rezultatuRezultaty fizyczne lub oparte na dokumentachNiematerialny kod, interfejsy API i interfejsy użytkownika
Pętle informacji zwrotnejPrzegląd po dostarczeniu lub kontrola etapowaCiągła integracja, przeglądy sprintów, testy beta
NarzędziaWykresy Gantta, narzędzia do wyrównywania obciążenia zasobówSystemy śledzenia zgłoszeń, repozytoria Git, potoki CI/CD
Struktura zespołuHierarchia oparta na rolachWielofunkcyjne 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 oprogramowaniaCele zarządzania projektami
Tworzenie funkcji spełniających specyfikacje techniczneDostarczanie właściwych funkcji we właściwym czasie
Pisanie czystego, łatwego w utrzymaniu koduUtrzymywanie zgodności zakresu, budżetu i harmonogramu projektu
Usuwanie błędów i ograniczanie liczby defektówZarządzanie ryzykiem, zależnościami i oczekiwaniami interesariuszy
Optymalizacja wydajności systemuKoordynowanie 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.

galen low headshot

Oto czego nauczyłem się na własnej skórze

Zarządzanie projektami zwinnymi wymaga uwarunkowań kulturowych, które większość organizacji lekceważy. Potrzebujesz bezpieczeństwa psychologicznego, aby programiści mogli zgłaszać problemy bez obaw. Potrzebujesz umocowanych właścicieli produktu, którzy mogą podejmować decyzje dotyczące priorytetów bez eskalowania każdego kompromisu do wiceprezesa. Potrzebujesz naprawdę interdyscyplinarnych zespołów, a nie specjalistów siedzących na wspólnym kanale Slacka.

 

Bez tych fundamentów zespoły kończą na praktykowaniu tego, co nazywam wytwarzaniem napędzanym ceremoniami — prowadzą codzienne spotkania, uzupełniają tablice sprintów, organizują retrospektywy, a mimo to dostarczają pracę z opóźnieniem, ponieważ podstawowe dysfunkcje się nie zmieniły.

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. 

Get timely perspective on the shifts, decisions, and trade-offs shaping your role, plus practical resources you can put to work.

Get timely perspective on the shifts, decisions, and trade-offs shaping your role, plus practical resources you can put to work.

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.

MetodykaNajlepsze zastosowanieDługość sprintu/fazyElastycznośćProfil ryzyka
Metodyka zwinnaZmieniające się wymagania, praca kierowana przez produkt1–4 tygodnieWysokaNiskie do średniego
ScrumInterdyscyplinarne zespoły pracujące iteracyjnie1–4 tygodnie (stałe)WysokaNiskie do średniego
KanbanUtrzymanie, operacje, praca napędzana zgłoszeniamiCiągłaBardzo wysokaNiskie
HybrydowaProjekty korporacyjne, mieszane potrzeby związane z nadzoremRóż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”.
galen low headshot

Author's Tip

Największym błędem, jaki popełniają kierownicy projektów w odniesieniu do długu technicznego, jest traktowanie go jako kwestii inżynieryjnej, która nie wymaga zaangażowania w zarządzanie projektem. Jeśli dług spowalnia Twój zespół, jest to problem związany z zarządzaniem projektem.

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:

KPICo mierzyDlaczego go mierzyćIdealna częstotliwośćKiedy podjąć działanie
Prędkość realizacjiPraca ukończona w ramach sprintu, np. punkty historyjek lub zadaniaPozwala mierzyć względny poziom wysiłku w każdym sprincie oraz tempo pracy zespołuKażdy sprintGdy spada o co najmniej 20% przez dwa kolejne sprinty
Czas cykluCzas trwania pojedynczego elementu pracyPomaga ujawnić wąskie gardła w przepływie pracy, dzięki czemu można skoncentrować wysiłkiCo tydzieńGdy średnia przekracza cel zespołu o 50%
Czas realizacjiCzas od umieszczenia w backlogu do dostarczeniaZapewnia wgląd w szybkość procesu od początku do końca i jest łatwy do interpretacji przez interesariuszyCo tydzieńGdy interesariusze zgłaszają, że dostarczanie przebiega zbyt wolno
Gęstość defektówLiczba błędów na linie kodu lub funkcjęPomaga dostrzec trendy sygnalizujące problemy z jakością w procesie programowania lub testowaniaPrzy każdym wydaniuGdy gęstość rośnie przez trzy kolejne wydania
Dokładność wykresu spalaniaPlanowane ukończenie sprintu w porównaniu z rzeczywistymPomaga wykrywać problemy z szacowaniem, zmiany zakresu w trakcie sprintu lub oba te zjawiskaKażdy sprintGdy planowane i rzeczywiste wyniki stale różnią się o co najmniej 30%
Satysfakcja interesariuszyZaufanie interesariuszy do realizacjiPomaga zapewnić sukces projektuCo 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.

WyzwaniePrzyczyna źródłowaRozwiązanie
Rozszerzanie zakresuNiejasne wymagania, słaba kontrola zmianRada ds. wniosków o zmianę z szablonem analizy wpływu
Wąskie gardła zasobówNiewystarczająca widoczność dostępnych mocy przerobowychMacierz kompetencji połączona z planowaniem sprintu równoważącym obciążenie
Problemy z synchronizacją zespołuKomunikacja w silosachMiędzyfunkcyjne spotkania statusowe i wspólne OKR
Ryzyko problemów z jakościąNiewystarczające pokrycie testamiWczesne zapewnianie jakości z automatycznymi bramkami testów regresji
Presja czasuBłąd optymizmu w szacowaniuPorównywanie historycznej prędkości realizacji z uwzględnieniem sprintów buforowych
galen low headshot

Author's Tip

Głębszy problem polega na tym, że wiele zmian zakresu trafia do projektu nieformalnymi kanałami, omijającymi wszelkie formalne procedury. Interesariusz wspomina o “drobnej poprawce” podczas prezentacji. Deweloper dodaje funkcję, której — jego zdaniem — będą chcieli użytkownicy. Właściciel produktu zmienia interpretację historyjki użytkownika w połowie sprintu, uwzględniając dodatkową funkcjonalność.

 

Rozwiązuj problem niekontrolowanego rozszerzania zakresu na trzech poziomach.

  1. Poziom formalny: Każda zmiana, niezależnie od rozmiaru, przechodzi udokumentowaną analizę wpływu, obejmującą nakład pracy, wpływ na harmonogram oraz elementy, którym nada się niższy priorytet, aby zrobić na nią miejsce.
  2. Poziom kulturowy: Zespół potrzebuje wspólnego języka i przyzwolenia na powiedzenie “to jest zmiana zakresu”, bez poczucia, że brzmi to konfrontacyjnie.
  3. Poziom strukturalny: Cele sprintu powinny być na tyle konkretne, aby każdy potrafił rozpoznać, kiedy proponowany dodatek wykracza poza ich zakres.

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.

galen low headshot

Uwaga dotycząca problemu z szacowaniem

Większość problemów z harmonogramem projektu ma swoje źródło w szacowaniu, a większość problemów z szacowaniem wynika z jednej z dwóch przyczyn: zakotwiczenia i nieuwzględnionej złożoności.

 

Zakotwiczenie pojawia się, gdy ktoś (zwykle osoba zajmująca wyższe stanowisko lub interesariusz) podaje harmonogram, zanim zespół dokona oszacowania. Gdy ta liczba już padnie, każde oszacowanie zaczyna do niej zmierzać. Rozwiązanie wymaga dyscypliny: zespół szacuje pracę, zanim zostanie mu przedstawiony harmonogram interesariusza.

 

Nieuwzględniona złożoność wynika z tego, że rozmowy o szacowaniu koncentrują się na samej pracy i pomijają działania dodatkowe: przeglądy kodu, testowanie, wdrażanie, dokumentację, spotkania oraz nieuniknione przełączanie kontekstu, które pochłania 20% tygodnia pracy dewelopera. Na początek dodaj 30% buforu do podstawowych szacunków prac inżynierii oprogramowania, a następnie koryguj go na podstawie rzeczywistych wyników z trzech lub czterech sprintów.

 

Zajmuję tu stanowisko, które może budzić kontrowersje: tradycyjne szacowanie za pomocą punktów historyjek ma w większości organizacji głównie charakter pozorny. Zespoły spędzają wiele godzin na sesjach planowania pokerowego, a uzyskane szacunki słabo korelują z czasem realizacji. Prognozowanie oparte na czasie cyklu (z wykorzystaniem danych historycznych pokazujących, ile czasu zajęła realizacja podobnych elementów) daje wiarygodne wyniki przy mniejszym nakładzie pracy.

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