Zyskaj zwinność
Sugerowałbym następujące:
Edycja tych samych plików
Najpierw użyj Git (lub podobnego współbieżnego systemu wersjonowania). Tak długo, jak edytujesz różne części tych samych plików, nie będziesz mieć konfliktów. Jeśli wystąpią konflikty, zostaną one wyraźnie oznaczone jako takie.
Próba zarządzania projektem z wieloma programistami bez Git jest jak próba zrobienia puddingu bez puddingowej miski. Jest to możliwe, ale szybko stanie się dość niechlujny.
Jak zauważono w komentarzach, Git nie jest panaceum, ale w połączeniu z automatycznymi testami z pewnością bardzo pomaga.
Wymień wszystkie funkcje
Po drugie, podziel projekt na widoczne dla użytkownika funkcje. Na przykład „gdy użytkownik się zarejestruje, powinien otrzymać wiadomość e-mail” lub „Użytkownik może dodać element”. Zaangażuj tutaj wszystkich interesariuszy. Zaproś wszystkich do pokoju i niech wszyscy wykrzyczą swoje funkcje.
Powinny to być funkcje widoczne dla użytkownika, możesz później porozmawiać o strategii wdrażania.
Zapisz wszystkie sugestie na kartach indeksowych, nawet te głupie. Szybko zracjonalizuj listę, aby usunąć duplikaty, i ułóż wszystkie karty na dużym stole, a nawet na podłodze.
Dodaj wszystkie potrzebne karty. Powiedz, że Twoja aplikacja wyśle powiadomienia SMS. Być może nie wiesz, jak to zrobić, więc masz pytanie. Napisz „Zbadaj portale SMS” na karcie. Podobnie w przypadku innych wielkich niewiadomych. Będziesz musiał rozpakować je później. Te funkcje prawdopodobnie nie dadzą rady do pierwszego sprintu.
Teraz posortuj swoje karty na grupy, przetasuj je, poczuj ich smak. To jest zakres twojego projektu.
Planowanie pokera
Spróbuj planowania pokera. Nadal ze wszystkimi razem, daj wszystkim kartom programistów, które mówią „1 punkt”, „2 punkty” itd., Aż do „4 punktów”. Również karta „więcej”. Punkt jest w przybliżeniu równy godzinie.
Przejrzyj listę funkcji jeden po drugim. Podczas czytania funkcji każdy musi zagrać kartę. Jeśli jedna osoba gra 1, a inna gra 4, oznacza to problem z komunikacją. Jedna osoba rozumie tę funkcję jako coś innego niż druga osoba. Porozmawiaj i ustal, co naprawdę oznaczało, i zanotuj to na karcie.
Jeśli zgadzasz się, że funkcja jest „większa”, jest ona zbyt duża. Musisz rozbić tę funkcję. Zrób to w taki sam sposób jak poprzednio.
Zgodnie z umową napisz cyfry na kartach pisakiem w innym kolorze.
Punkty są lepsze niż godziny
Używanie punktów zamiast godzin odbiera macho „patrz, jak szybko mogę kodować”, w co często programiści się angażują. To subtelna różnica, ale przekonałem się, że działa całkiem dobrze.
Teraz skomponuj sprint
Sprint to szybki wybuch w kierunku bramki. Zdecyduj o długości sprintu, być może 5 lub 10 dni. Pomnóż liczbę dni przez liczbę programistów przez liczbę punktów dziennie.
Początkowo zakładaj 6 punktów dziennie na programistę. Jest to liczba osiągalna. Jeśli masz 5 osób, to 5 * 5 * 6 = 150 punktów. W połączeniu ze wszystkimi programistami i zarządem wybierz funkcje z listy do 150 punktów. To twój sprint.
Nigdy nie daj się skusić, aby wcisnąć więcej, niż zmieści się. Nadmiernie obiecujące boli wszystkich na dłuższą metę, w tym ciebie.
Musisz tutaj wziąć pod uwagę zależności. Na przykład konfiguracja środowiska oczywiście musi zostać uwzględniona w pierwszym sprincie. W rzeczywistości jest to stosunkowo łatwe, gdy wszyscy są obecni. W pokoju jest 6 mózgów, wszyscy mówią „to zależy od tego” itp. Następnie możesz potasować karty, aby pokazać zależności.
Po zakończeniu sprintu nie można do niego nic dodać, jest on zablokowany na 5 dni. Pełzanie funkcji będzie stresować drużynę, morale obrażeń i spowolni wszystkich. Ostatecznie pełzanie opóźni projekt. Jako lider zespołu musisz chronić swój zespół przed pełzaniem funkcji. Jeśli pojawi się nowe żądanie funkcji, należy je dodać do następnego sprintu. JEŚLI następny sprint jest już pełny, należy coś jeszcze wyjąć.
Nigdy nie ulegaj pokusie wyciskania dodatków. Nadmiernie obiecujące daje około jednego dnia zadowolonego klienta, po którym następuje 4 dni stresu w zespole, a ostatecznie, najprawdopodobniej, kilku niezadowolonych klientów, gdy zespół nie może dostarczyć na czas.
Teraz idź do tego.
Rozdaj karty, zapytaj, kto chce co robić. Masz pełną widoczność tego, co się robi, i możesz policzyć zaznaczone punkty do zera. Przygotuj się na starcie każdego dnia, aby wszyscy wiedzieli, kto nad czym pracuje i co zostało zrobione.
5 lub 6 dobrze zmotywowanych programistów pracujących razem jako jednostka nad jasno określonymi celami, które można zrealizować, może osiągnąć całkiem sporą ilość rzeczy podczas 5-dniowego sprintu.
Zachowaj widoczność
Upewnij się, że wszyscy mogą zobaczyć status projektu. Bluetack wszystkie karty do ściany. Po lewej stronie są karty, które nie zostały jeszcze opracowane. Po prawej stronie są gotowe karty.
Gdy programista pracuje nad kartą, zdejmuje ją ze ściany i kładzie na biurku. Utrzymuje to widoczność i powstrzymuje ludzi od nadmiernego stąpania po sobie.
Istnieją technologiczne alternatywy dla kart indeksowych, ale nic nie przebije ogromnego papierowego wyświetlacza statusu projektu na ścianie.
Jeśli to możliwe, przechowuj wszystkich w tym samym pokoju na czas trwania projektu. Poproś interesariuszy o jak najwięcej, najlepiej codziennie.
Spalić
Możesz wykreślić swoje punkty idące w kierunku zera na wykresie wypalenia. Jeśli linia najlepszego dopasowania przekroczy zero, zanim osiągniesz limit czasu, prawdopodobnie jesteś na dobrej drodze. Jeśli nie, być może będziesz musiał powiadomić swojego klienta teraz, zanim zbliżysz się do terminu.
Jeśli zawiedziesz, zawiodłeś wcześnie.
Możesz zrobić wypalenie za pomocą oprogramowania, ale ja wolę tylko duży kawałek papieru na ścianie. Rysuj i pisz po całym nim.
Zautomatyzowane testowanie
Kiedy wielu programistów pracuje nad tymi samymi rzeczami w tym samym czasie, prawdopodobnie od czasu do czasu łamią sobie nawzajem swój kod. Pomaga w tym komunikacja i widoczność, ale prawdopodobnie będziesz chciał wprowadzić technologię, która pomoże znaleźć problemy.
Testowanie jednostkowe to proces pisania testów dla każdej części bazy kodu (najlepiej każdej metody). Testy jednostkowe powinny być przeprowadzane często, z każdym zapisem, jeśli to możliwe. Istnieje wiele narzędzi, które mogą w tym pomóc, na przykład Karma lub Rspec.
Kompleksowe testy obejmują testowanie całego projektu, traktując elementy wewnętrzne jako czarną skrzynkę. Oprzyj te testy na wysokich wymaganiach biznesowych, na przykład: „Użytkownik może się zarejestrować” lub „Użytkownik może zobaczyć listę elementów”. Kątomierz jest dobrym przykładem kompleksowego środowiska testowego opartego na sieci.
Na temat testowania napisano całe książki, ale przeprowadzenie przynajmniej testów akceptacyjnych może pomóc upewnić się, że nic nie zostanie zepsute podczas pracy nad projektem.
Unikanie długów technicznych i załatwianie spraw
Dług techniczny to koncepcja opisująca rzeczy, które będą musiały zostać później uporządkowane. Powszechnym źródłem długu są cechy, które zostały oznaczone jako wykonane, ale nigdy nie zostały „wykonane”. Wykonana funkcja jest sprawdzana w Git, została zatwierdzona przez interesariusza i ma test.
Nie wyłączaj swoich funkcji, dopóki nie zostaną zakończone. Nigdy nie masuj wykresu. Ponownie boli to wszystkich na dłuższą metę, w tym ciebie.
Jest to jeden z powodów, dla których początkowo podajemy tylko 6 punktów na programistę dziennie. Wykonanie wymaga dodatkowej pracy, ale czuje się świetnie i daje impuls zespołowi.