W przypadku prac nad potokiem nie ma wersji demonstracyjnej. Proszę zawęzić zakres do „które kompilacje można dzisiaj usunąć”, aby umożliwić oszacowanie nakładu pracy.

Przebudowy procesów CI/CD to najtrudniejsze do zdefiniowania zadania w rejestrze zadań. Nie wiążą się one z żadnym rezultatem widocznym dla użytkownika, nie ma prezentacji ani zrzutu ekranu, który można by umieścić w informacjach o wydaniu. Praca ma charakter strukturalny: zastąpienie jednego potoku innym, migracja systemu kompilacji, konsolidacja trzech narzędzi do uruchamiania testów w jedno oraz przejście z ręcznie napisanego skryptu powłoki na prawidłowy plik przepływu pracy. Zespół zdaje sobie sprawę, że prace te muszą zostać wykonane. Zespół wie również, że zajmie to jeden kwartał, a ten kwartał będzie niewidoczny dla osób spoza działu inżynierii.

Sposób, w jaki szacunki zawiodą, jest przewidywalny. Zespół przyznaje ocenę 13, ponieważ „to refaktoryzacja, a więc duże przedsięwzięcie”. Po trzech sprintach stary potok nadal działa równolegle z nowym, dwa systemy są częściowo skonfigurowane, a każdy inżynier ma inny model mentalny dotyczący tego, z którego z nich należy korzystać. Zadanie nie zostało ukończone, ponieważ brakuje definicji ukończenia — potoki nie są „wypuszczane”; są one wdrażane, a ich wdrożenie to kwestia odrębna od samego faktu, że „nowe rozwiązanie istnieje”.

O czym się mówi w tym pomieszczeniu

SRE: „Musimy zakończyć dotychczasowy cykl. Dwa sprinty.”

Wstęp: „Jaka jest definicja »zakończonego«?”

SRE: „…ten nowy działa.”

Wstęp: „Ten nowy model sprawdza się już w połowie naszych zadań”.

Backend: „Ale stara wersja nadal działa dla drugiej połowy.”

Wstęp: „Zgadza się. A więc skończymy, gdy będziemy mogli usunąć stary plik”.

O to właśnie chodzi. Zadaniem nie jest „zbudowanie nowego potoku” — zespół prawdopodobnie stworzył go już kilka miesięcy temu w ramach eksperymentu przeprowadzonego w wolnym czasie. Istotą zadania jest „usunięcie starego potoku”. Dopóki stary system kompilacji nie zostanie usunięty, przebudowa nie jest zakończona; jest to równoległa infrastruktura, która generuje wszystkie koszty, nie przynosząc żadnych korzyści. Określenie tego zadania jako usunięcie, a nie utworzenie, daje zespołowi definicję zakończenia, nad którą może przeprowadzić głosowanie.

Jak to pokroić

Proszę sporządzić wykaz zadań nadal uruchomionych w starym systemie. W odniesieniu do każdego zadania: co należałoby zrobić, aby usunąć jego starą wersję? To stanowi osobny element pracy. Niektóre przypadki są trywialne (zadanie zostało już skopiowane do nowego potoku; wystarczy usunąć stary plik YAML). Inne wymagają prawdziwej pracy (zestaw testów zawiera na stałe zakodowaną ścieżkę; etap wdrażania zależy od starej zmiennej środowiskowej). Każde usunięcie stanowi niewielki element, który zespół może wdrożyć i zaprezentować. „Usunęliśmy plik Jenkinsfile dla usługi uwierzytelniania” to wynik, który można zaprezentować.

Każde usunięcie można oszacować w zwykły sposób: najpierw należy zidentyfikować niewiadome (czy to zadanie ma odbiorców, o których nie wiemy?), a następnie oszacować usunięcie w oparciu o referencyjne usunięcie, które zostało już wdrożone. Większość fragmentów mieści się w przedziale 2 lub 3 punktów. Zadanie oznaczone jako „13, refaktoryzacja, duże” w rzeczywistości składało się z piętnastu elementów o wartości 2 oraz jednego o wartości 3, ukrytego pod płaszczem.

Pytania, które warto zadać przed oddaniem głosu

  • Co zostanie usunięte po zakończeniu tej historii?
  • Jakie zawody nadal opierają się na starym systemie?
  • Czy istnieje jakiś odbiorca danych ze starego potoku, o którym nie wiemy — zewnętrzny zespół, zaplanowane zadanie?
  • Jakie są możliwości przywrócenia poprzedniego stanu, jeśli nowy potok zacznie działać gorzej po usunięciu starego?
  • Kto jest autorytetem w kwestii twierdzenia, że „nowy kanał informacyjny jest źródłem prawdy”?
  • Czy ktoś na bieżąco śledzi, które zadania są wykonywane w starym, a które w nowym systemie?

Jeśli odpowiedź na pytanie „co zostanie usunięte” brzmi „w tym sprincie nic”, oznacza to, że zespół nadal znajduje się w fazie infrastruktury równoległej, a zadanie nie spełnia kryteriów gotowości.

Prace związane z potokiem danych przeprowadza się po usunięciu starej wersji. Należy usuwać elementy pojedynczo, szacując nakład pracy dla każdego usunięcia z osobna.

Zobacz podział poziomy a pionowy, aby dowiedzieć się, dlaczego „budowa nowego systemu” jest niewłaściwą osią podziału, a także inne przykłady udanych szacunków. Rozpocznij bezpłatną sesję planowania pokerowego, gdy zespół będzie już dysponował listą elementów do usunięcia.