Opis skomplikowanej historii na początku projektu

9

Staram się opanować sprawne zarządzanie projektami (dzięki Pivotal Tracker), ale wciąż próbuję zdefiniować kilka pierwszych historii projektu. Weźmy na przykład tę bardzo prostą historię:

„Użytkownik powinien mieć możliwość oznaczenia produktu”

Zakładając, że zdefiniowałem już „produkt” gdzie indziej, ta historia prawdopodobnie obejmowałaby napisanie polimorficznego systemu znakowania pod maską, po zakończeniu tego systemu mógłbym w końcu dodać możliwość oznaczenia produktu.

Mój problem dotyczy ilości pracy ukrytej w tej historii. Mogę zdefiniować zadania, które pozwolą wykonać historię, ale historie jako całość powinny mieć 1-2 dni pracy? Nie wydaje mi się słuszne, że historia ujawnia tylko wierzchołek góry lodowej, ale to jedyna część, która dotyczy Użytkownika.

Jak przezwyciężyć tego rodzaju rzeczy? Jakie są najlepsze praktyki?

AKTUALIZACJA 25/08 Dziękujemy wszystkim za wskazówki, skorzystałem z wszystkich porad na temat definiowania historii. Teraz przechodzę na Jira Grasshopper, która ma lepszą obsługę zadań w opowieściach (zadania, szacunki itp.) I śledzenie zadań programistycznych po rozpoczęciu sprintu.

Matthewrk
źródło
1
Podział pracy na zadania, które trwają najwyżej 1-2 dni pracy, jest zdecydowanie dobrym pomysłem i wiele osób powiedziałoby, że jest to niezbędne. Jednak zadania! = Historie użytkowników . Zadania to dyskretne elementy rozwoju, które należy wykonać, aby wypełnić historie użytkowników, a jedna historia użytkownika może składać się z wielu zadań.
vaughandroid
1
@Baqueta Ale to historia, która ma oszacowanie w punktach? i te punkty są śledzone jako prędkość zespołu, przynajmniej tak jest w konfiguracji Pivotal Tracker.
matthewrk
Historia użytkownika kończy się, gdy wszystkie zadania wymagane do jej wykonania są ukończone. Jeśli skończysz na dzieleniu historii na kilka sprintu, może to nieco zepsuć prędkość dla tych konkretnych sprintów, ale wychodzi ona z prania i Twoja średnia powinna być nadal przydatna.
vaughandroid

Odpowiedzi:

7

Jeśli potrzebujesz, aby twoje historie trwały od 1 do 2 dni pracy programisty, być może powinieneś podzielić każdą historię na konkretne zadania użytkownika, które trwają od 1 do 2 dni pracy programisty.

Rozważ następującą „historię użytkownika:”

Użytkownik powinien mieć możliwość otrzymania faktury od zakupionego produktu.

Pomyśl o tym, co dotyczy samego projektu bazy danych, dając użytkownikowi taką możliwość. Potrzebujesz tabeli klientów, tabeli nagłówka faktury i tabeli pozycji wiersza faktury, a my nawet nie rozmawialiśmy o akceptowaniu płatności.

W rzeczywistości historie użytkowników nie są takie proste. Kompletne historie użytkowników zawierają opis kroków użytkownika:

  • Użytkownik umieszcza produkt w koszyku
  • Użytkownik określa ilość
  • Użytkownik określa typ wysyłki

i tak dalej. Krótko mówiąc, musisz podzielić swoje historie użytkowników na bardziej szczegółowe.

Robert Harvey
źródło
Czy możesz podać jakieś przykłady awarii oparte na mojej historii? Powodem, dla którego staram się go dalej rozkładać, jest to, że tagowanie jest bardzo prostą historią na powierzchni i jest to jedyna część, której dotyka użytkownik.
matthewrk
7

Historie nie powinny być „1-2 dniami pracy”. Pod historiami Scruma ocenia się zwykle przy użyciu Punktów opowieści, względnego systemu wielkości. Jeśli używasz planowania pokera, historie mają wartość punktową - czas potrzebny na wdrożenie zależy od prędkości ustalonej przez Twój zespół.

Jeśli uważasz, że historia kryje złożoność (możesz ją nazwać epicką historią), powinieneś podzielić ją na mniejsze historie. Upewnij się, że nowe historie spełniają kryteria INVEST .

Ale może to przeciążasz; obowiązuje tutaj zasada XP YAGNI . Mówiąc wprost, nie powinieneś wdrażać „polimorficznego systemu znakowania pod maską”, chyba że naprawdę go potrzebujesz. Nawet wtedy należy go zaprojektować poprzez ulepszenie istniejącego systemu, który opracowałeś za pomocą dobrego zestawu testów.

Jeśli jesteś pewien, że potrzebujesz tego złożonego systemu tagowania, powinieneś zawołać złożoność w osobnych historiach. Mike Cohn opisuje podejście do projektowania jako „ zamierzone, ale powstające

Dave Hillier
źródło
Nie widziałem twojej edycji. Twoja oryginalna wersja w zasadzie powiedziała „nie rób tego”, co moim zdaniem nie wnosi żadnej wartości. Przypuszczalnie „polimorficzny system znakowania” jest częścią wymagań. Zredagowałem, aby nie podkreślać aspektu „nadinżynierii” w twojej odpowiedzi, i zmieniłem moje zdanie negatywne na pozytywne.
Robert Harvey
Nadal stoję przy „nie rób tego” :). Scrum jest szczególną metodologią, zgodnie z którą PO byłby niezgodny z zasadami Scrum.
Dave Hillier
Dzięki za link do planowania pokera, użyłem podobnego systemu do tego wcześniej, nie wiedząc, że była to formalna procedura. Powodem, dla którego podałem system znakowania polimorficznego, jest to, że od samego początku będziemy musieli oznaczyć również inne modele, więc w takim przypadku należy to rozważyć od samego początku? 1-2 dni pracy nad historią to coś, co wybrałem jako „dobry pomysł” podczas badania scrum, praca nad samymi trudnościami lub trudnościami wydawała się być nieco otwarta na interpretację, gdzie szacowanie dni pracy wydaje się dość dokładne .
matthewrk
2
@matthewrk to co YAGNIwynosi około: Nawet nie próbuj do pełnego polimorficzny system znakowania jeszcze . Zrób prosty dla jednego konkretnego przypadku użycia. Jeśli właściciel produktu powróci z inną historią na temat oznaczania innych rzeczy, wówczas rozszerzysz prosty istniejący system na polimorficzny system oznaczania. To, że uważasz, że będzie to konieczne, nie oznacza na pewno, że tak będzie; może się okazać, że tagowanie innych modeli nie będzie przez jakiś czas potrzebne, wtedy wszyscy o tym zapomną i nigdy nie stanie się to wymogiem. Stąd „Nie będziesz go potrzebował”.
Izkata
7

Wygląda na to, że mylisz historie i zadania.

Historia użytkownika

Historia użytkownika jest kompletną „funkcją”, która po dodaniu do produktu zapewnia większą wartość produktu.

Historia użytkownika nie powinna być większa niż można ją wdrożyć podczas sprintu . Podczas pierwszej części planowania sprintu decydujesz, z którymi historiami użytkowników chcesz pracować podczas sprintu. Celem sprintu jest uzupełnienie historii użytkowników, co zwiększy wartość produktu.

Zadanie

Podczas drugiej części fazy planowania sprintu programiści dzielą historię na zadania . Zadania są zadaniami programistycznymi. Mogą to być na przykład „Dodaj kolumnę do bazy danych”, „Rozszerz usługę x” itp. Zadanie nie powinno być większe niż można je wykonać w ciągu jednego dnia.

Podczas codziennego scrum oceniasz postępy tych zadań. Jeśli zadanie trwa od więcej niż jednego codziennego scrumu, trwa to zbyt długo, a ty, jako zespół, jesteś odpowiedzialny za rozwiązanie tej sytuacji.

Pamiętaj, że historie użytkowników reprezentują wartość biznesową dla interesariuszy. Interesariusze powinni być zainteresowani ukończeniem historii użytkowników, a nie zadaniami.

Podział zadań jest narzędziem dla zespołu programistów do zarządzania sprintem, monitorowania postępu historii użytkowników podczas sprintu i wizualizacji potencjalnych problemów.

Zainteresowane strony nie powinny zajmować się tymi zadaniami rozwojowymi. Niestety, często to robią moje doświadczenia, szczególnie w przypadku organizacji, które dopiero zaczynają sprawnie rozwijać. Jednak radzenie sobie z tą sytuacją to inna sprawa.

Epicki

Jeśli historia użytkownika jest większa niż myślisz, że możesz ją ukończyć jednym sprintem, nazywa się to epicką. Aby zespół mógł zacząć nad nim pracować, należy go podzielić na kilka mniejszych historii użytkowników.

Pamiętaj, że historia użytkownika stanowi wartość dodaną dla użytkownika końcowego, więc podzielenie eposu na „front-end” i „back-end” nie jest właściwą drogą. Dodanie zaplecza dla nowej funkcji nie stanowi samo w sobie wartości dla użytkowników końcowych.

Podział epiki na historie użytkowników, którymi można zarządzać w ramach sprintu, nie zawsze jest łatwy, jeśli nie masz do tego doświadczenia.

Korzystanie z Pivotal Tracker

Myślę, że Pivotal Tracker to świetne narzędzie do śledzenia historii użytkowników. Ale nie jest to narzędzie Scrum jako takie, a sposób, w jaki Scrum uczy dzielenia historii na zadania, nie jest łatwo obsługiwany przez kluczowy moduł śledzący. Możesz włączyć możliwość dodawania zadań do historii użytkowników. Ale jeśli prowadzisz projekt za pomocą scrum, sugerowałbym użycie białej tablicy i karteczek do śledzenia postępu zadań podczas sprintu.

Pete
źródło
1
Dzięki, to zdecydowanie usuwa dla mnie część przepływu pracy. Kiedy programiści dzielą historię na zadania, czy tworzą więcej historii, aby śledzić te zadania? lub dodać zadania do historii? Próbuję dowiedzieć się, jak zastosować to w Pivotal Tracker.
matthewrk
Twórcy nie tworzą nowych historii. Historiami zarządza „Właściciel produktu”. Można powiedzieć, że dodają zadania do historii, ale myślę, że to zdanie jest nieco mylące. Do odpowiedzi dodałem kilka słów o Pivotal Tracker.
Pete
4

Cel projektu polegający na wdrożeniu polimorficznego systemu znakowania jest w porządku, ale nadal powinieneś skupić się na implementacji funkcji, których chce klient. Może to oznaczać, że z drobnoziarnistej historii użytkownika z drobnoziarnistej historii użytkownika twój system z czasem ewoluuje w kierunku polimorficznego systemu znakowania. Jednak w dowolnym momencie tej podróży powinieneś mieć system złożony z wielu małych i testowalnych funkcji, opisanych przez zaimplementowaną kolekcję Historie użytkowników.

W tym przypadku brzmi to tak, jakby „Oznaczanie produktów” w systemie mogło być epicką, tj. Czymś znacznie większym niż pojedyncza historia użytkownika i przy odrobinie wysiłku można ją podzielić na kilka mniejszych historii. Biorąc sporo licencji artystycznej, mogę wymyślić następujące historie użytkowników, które mogą z grubsza mieć zastosowanie do twoich wymagań:

  • Jako administrator systemu chcę zaszczepić system kilkoma prawidłowymi tagami, aby użytkownicy mieli pewne wartości do wyboru przy pierwszym użyciu funkcji tagowania.
  • Jako użytkownik systemu chcę móc wyszukać produkt według nazwy, aby móc go później oznaczyć.
  • Jako użytkownik systemu chcę móc przeczytać opis produktu, aby móc zdecydować, jakie tagi powinien on posiadać.
  • Jako użytkownik systemu chcę widzieć zdjęcie produktu, aby móc zdecydować, jakie tagi powinien on mieć.
  • Jako użytkownik systemu chcę być w stanie dołączyć pojedynczy tag do jednego produktu.
  • Jako użytkownik systemu chcę mieć możliwość usunięcia pojedynczego tagu z jednego produktu.
  • Jako użytkownik systemu chcę być w stanie dołączyć jeden tag do wielu produktów.
  • Jako użytkownik systemu chcę mieć możliwość dołączania wielu tagów do jednego produktu.
  • Jako administrator systemu chcę zobaczyć odrębną listę znaczników używanych w systemie, dzięki czemu mogę zdecydować, czy któryś z nich jest duplikatem.
  • Jako administrator systemu chcę skonsolidować zduplikowane tagi.

... i mógłbym kontynuować.

Wątpię, aby którykolwiek z nich był tak realistyczny, że będziesz z nich korzystać, ale mam nadzieję, że ilustrują one rodzaj szczegółów, do których możesz przejść ze swoimi Historiami użytkowników.

Jeśli Historii użytkownika naprawdę nie można podzielić na mniejsze historie i nadal uważasz, że jest zbyt duża, aby spróbować wdrożyć ją za jednym razem, możesz podzielić ją na pionowe plastry. Jest to technika, która oznacza dostarczanie tylko części funkcji w ramach każdej Historii użytkownika, ale każda część jest testowalnym przekrojem przez wszystkie odpowiednie warstwy technologii, np. W przypadku witryny internetowej może to oznaczać zmianę warstwy bazy danych, aplikacji i interfejsu użytkownika. Unikaj posiadania jednej historii użytkownika do pracy z bazą danych, innej dla aplikacji i innej dla interfejsu użytkownika, ponieważ nie będą one indywidualnie testowane.

Biorąc jeszcze większą licencję artystyczną, mogę podzielić „Jako użytkownik systemu chcę mieć możliwość dołączenia jednego tagu do jednego produktu”. w następujące pionowe plastry:

  • Jako użytkownik systemu, który patrzy na pojedynczy produkt, chcę móc wyszukać listę tagów, aby móc zdecydować, który zastosować.
  • Jako użytkownik systemu, który patrzy na pojedynczy produkt, decydując się na zastosowanie tagu do tego produktu, chcę móc go zastosować.
  • Jako użytkownik systemu, który patrzy na pojedynczy produkt, po zastosowaniu tagu do tego produktu, chcę komunikat potwierdzający na ekranie z informacją, że zapisano pomyślnie.

Każdy z nich można przetestować - jeśli nie jest sam w sobie szczególnie cenny.

Nacięcie
źródło
Kiedy wspominasz o testach, czy jest to z perspektywy użytkownika? tj. testy integracyjne / kompleksowe? Biorąc pod uwagę twoje przykładowe historie jako programisty, czy mogę wziąć wszystkie te historie, wdrożyć potrzebną strukturę (polimorficzne tagowanie), a następnie ukończyć wszystkie historie na raz, gdy id spełni wymagania użytkownika? ale gdzie jest śledzone ogólne wymaganie techniczne?
matthewrk
W tym przypadku mam na myśli możliwość przetestowania przez użytkownika, aby aktor wymieniony w Historii użytkownika mógł zweryfikować, czy zaimplementowałeś to, czego chce.
Nick
Mówienie o wymaganiach ma znaczną wartość posiadania jednej waluty w projekcie. Każdy, kto mówi o postępach w zakresie historii użytkowników, znacznie ułatwia komunikację i raportowanie. Polecam uzgadnianie zestawu historii użytkowników z klientem i pracę nad nimi w ustalonej kolejności (najpierw wartość biznesowa, chyba że istnieją techniczne zależności), a nie tylko wdrażanie własnej wizji. Jeśli uważasz, że dodatkowe funkcje wynikające z Twojej wizji polimorficznego systemu znakowania są cenne, prześlij je jako Historie użytkowników i uzgodnij z klientem, kiedy to zrobić.
Nick
2

Są książki napisane wyłącznie w celu znalezienia właściwego sposobu na opisanie i rozbicie twoich wymagań. To nie jest łatwe zadanie.

Często zdarza się, że zespoły programistów szukają kompleksowych rozwiązań zamiast najprostszych. Może to wynikać z samej historii lub z tego, że zespół chce wybrać zbyt skomplikowane rozwiązanie, które nie tylko rozwiązuje tę historię, ale także stanowi podstawę dla opowieści x, y i z. To dobra intencja, ale rozdęcie zakresu, w którym ta sama praca może być wykonana przy mniejszej ilości pracy. Zawsze trudno jest ocenić, ile projektowania musi wnieść historia, aby nie zepsuć przyszłych historii, psując projekt. Ta decyzja należy do zespołu.

Jako właściciel produktu możesz na to wpłynąć tylko poprzez podzielenie historii na mniejsze części. Powinieneś zadać sobie pytanie: czy ta historia jest najmniejszym rozwiązaniem, jakie możemy obecnie wymyślić? Czy możemy rozbić go na zredukowane zestawy funkcji, które pewnego dnia staną się „wielkim elastycznym systemem tagowania, o którym zawsze marzyłem”. Możesz zacząć od systemu tagów dla pojedynczego tagu, następnie rozszerzyć go, aby zawierał listę wstępnie wybranych tagów, a następnie pozwolić użytkownikowi definiować tagi itp.

Dla zespołu deweloperów sprowadza się to do: Czy możemy znaleźć prostsze podejście do realizacji historii, ale nadal mamy solidną architekturę, która wykona zadanie dzisiaj, bez uszczerbku dla przyszłych funkcji.

Jeśli jesteś otwarty na przyjmowanie rozwiązań pośrednich, a zespół programistów stara się również zaoferować najprostsze, ale dobre rozwiązanie, prawdopodobnie znajdziesz miejsce, w którym rozmiar opowiadań, które chcesz zrobić, jest odpowiedni (im mniejszy, tym lepszy) . Nie oznacza to, że masz tylko małe historie. Niektóre są większe niż inne, to tylko fakt, który musisz zaakceptować, a jeśli są zbyt duże, podziel historie na mniejsze części.

malta
źródło