To, co opisujesz, to - przynajmniej z mojego doświadczenia - dość powszechny wzór zespołów próbujących „być zwinnym”. Jest to otwarte do debaty, jeśli jest to rzeczywiście część samego Agile lub jego powszechne niewłaściwe wdrożenie, jest sprzeczne ze zwinnym manifestem / zasadami lub jego nieodłączną konsekwencją i tak dalej. Tylko z empirycznego punktu widzenia i po prostu na podstawie mojego małego, próbnego zestawu doświadczeń (i ludzi, z którymi rozmawiam), jeśli zespół jest zwinny, wydaje się, że ma ponadprzeciętną szansę na napotkanie tego wzoru. Po prostu zostawmy to i skupmy się na konkretnym przykładzie.
Istnieją dwa oddzielne aspekty tego, co opisujesz:
- Brakuje wspólnego zrozumienia / wizji i dlatego nie jest skuteczny
- Jak mierzyć sukces / postęp i całkowity koszt
Zejście niewłaściwą ścieżką lub bieganie w kółko
Z mojego doświadczenia wynika, że głównym powodem takiego stanu rzeczy jest to, że w celu szybkiego opracowania kodu zespoły aktywnie odsuwają na bok przypadki użycia lub wymagania, które już znają lub o których łatwo mogą się dowiedzieć. Pomyśl o tym w ten sposób: 10-20 lat temu ludzie próbowali pisać gigantyczne specyfikacje i myśleli o wszystkim z wyprzedzeniem i często zawiedli. Albo trwało zbyt długo, albo coś przeoczyło. Jednym z wniosków z przeszłości jest to, że w rozwoju oprogramowania są rzeczy, których nie możesz wiedzieć i wiele się zmieniają, stąd pomysł szybkiego iterowania i szybkiego generowania sensownego wyniku. Co jest bardzo dobrą zasadą. Ale dzisiaj znajdujemy się na drugim biegunie: „Nie dbam o to, ponieważ jest to część następnego sprintu” lub „Nie zgłaszam tego błędu, radzę sobie z nim, gdy pojawi się ponownie”.
- Zbierz wszystkie przypadki użycia , wymagania, zależności i ograniczenia wysokiego poziomu . Umieść go na wiki, aby wszyscy interesariusze i deweloperzy mogli je zobaczyć. Dodaj je, gdy pojawi się coś nowego. Porozmawiaj z akcjonariuszami i użytkownikami. Użyj go jako listy kontrolnej podczas opracowywania, aby zapobiec wdrażaniu rzeczy, które nie przyczyniają się do produktu końcowego lub są obejściem / włamaniami, które rozwiązują jeden problem, ale powodują trzy nowe.
- Sformułuj koncepcję wysokiego poziomu . Nie mówię o projektowaniu interfejsów lub klas, ale z grubsza szkicuję problematyczną dziedzinę. Jakie są główne elementy, mechanizm i interakcje w ostatecznym rozwiązaniu? W twoim przypadku powinno to stać się oczywiste, gdy użycie obejścia obejścia pomaga jako krok pośredni i gdy powoduje tylko dodatkową pracę.
- Sprawdź poprawność swojej koncepcji, korzystając ze zgromadzonej listy. Czy są w tym jakieś oczywiste problemy? Czy jest sens? Czy istnieją bardziej wydajne sposoby osiągnięcia tej samej wartości dla użytkownika bez powodowania długiego technologicznego zadłużenia?
Nie przesadzaj. Potrzebujesz czegoś, aby wszyscy w zespole (w tym nie-deweloperzy) mieli wspólne zrozumienie najlepszej ścieżki do twojego MVP. Wszyscy powinni zgodzić się, że nie ma oczywistych przeoczeń i może to faktycznie zadziałać. Zasadniczo pomaga to uniknąć ślepych zaułków lub wielokrotnego powtarzania tej samej rzeczy. Zwinne może pomóc ci lepiej poradzić sobie z nieoczekiwanym, nie ma sensu ignorować tego, co wiadomo.
Należy pamiętać o błędach kosztów utopionych : jeśli zaczniesz od jednego typu architektury lub typu bazy danych, większość ludzi waha się zmienić to w połowie projektu. Dlatego dobrym pomysłem jest zainwestowanie czasu w „najlepsze wykształcenie”, zanim zaczniesz wdrażać różne rzeczy. Deweloperzy mają tendencję do szybkiego pisania kodu. Ale często posiadanie kilku prób, prototypów na żywo, zrzutów ekranu, modelu szkieletowego itp. Pozwala na jeszcze szybszą iterację niż pisanie kodu. Pamiętaj tylko, że każda linia napisanego kodu, a nawet testy jednostkowe utrudniają zmianę ogólnej koncepcji.
Mierzenie sukcesu
Całkowicie oddzielnym aspektem jest sposób mierzenia postępu. Powiedzmy, że celem twojego projektu jest zbudowanie wieży o wysokości 1m z wykorzystaniem leżących przedmiotów. Budowanie domu z kart może być całkowicie poprawnym rozwiązaniem, jeśli na przykład czas na rynku jest ważniejszy niż stabilność. Jeśli Twoim celem jest zbudowanie czegoś, co przetrwa, użycie Lego byłoby lepsze. Chodzi o to, co jest uważane za hack i jakie eleganckie rozwiązanie zależy całkowicie od tego, jak mierzy się sukces projektu .
Twój przykład „ładowania” jest całkiem niezły. W przeszłości miałem takie rzeczy, w których wszyscy (w tym sprzedaż, PO, użytkownicy) zgodzili się, że to denerwujące. Nie miało to jednak wpływu na sukces produktu i nie spowodowało zadłużenia długoterminowego. Porzuciliśmy to, ponieważ były bardziej wartościowe rzeczy związane z zasobami deweloperów.
Moja rada tutaj to:
- Zachowaj wszystko, nawet małe błędy, jako bilety w systemie biletowym . Podejmij aktywną decyzję, co wchodzi w zakres projektu, a co nie. Utwórz kamienie milowe lub w inny sposób odfiltruj zaległości, aby zawsze mieć „pełną” listę wszystkiego, co należy jeszcze zrobić.
- Mają ścisłą kolejność ważności i wyraźny punkt odcięcia, w którym projekt można uznać za sukces. Jakiego poziomu stabilności / jakości kodu / dokumentacji faktycznie potrzebuje produkt końcowy? Staraj się spędzać każdy dzień pracy najlepiej, jak to możliwe, wybierając z góry. Pracując nad jednym biletem, spróbuj rozwiązać go całkowicie bez wprowadzania nowych biletów (chyba że sensowne jest odkładanie rzeczy z powodu niższego priorytetu). Każde zatwierdzenie powinno doprowadzić cię do przodu do celu końcowego, a nie na boki lub do tyłu. Ale jeszcze raz podkreślam: czasami hack, który powoduje dodatkowe prace później, może być dodatnim wynikiem netto dla projektu!
- Użyj swojego zamówienia / użytkowników, aby obliczyć wartość użytkownika, ale także poproś programistów o określenie kosztu technicznego . Nie-deweloperzy zazwyczaj nie potrafią ocenić, jaki jest prawdziwy długoterminowy koszt (nie tylko koszt wdrożenia!), Więc pomóżcie im. Uważaj na problem gotowania żaby: wiele małych, nieistotnych problemów może z czasem doprowadzić zespół do zawieszenia. Spróbuj określić, jak efektywny może być Twój zespół.
- Miej oko na ogólny cel / koszty. Zamiast myśleć od sprintu do sprintu, raczej miej na uwadze „czy jako zespół możemy zrobić wszystko, co potrzebne do końca projektu” . Sprinty to tylko sposób na rozbicie rzeczy i uzyskanie punktów kontrolnych.
- Zamiast chcieć coś wcześnie pokazać, nakreśl swój kurs na najszybszej ścieżce do minimalnego opłacalnego produktu, który można podać użytkownikowi. Mimo to ogólna strategia powinna pozwalać na weryfikowalne wyniki pomiędzy.
Więc jeśli ktoś zrobi coś, co nie pasuje do twojego ostatecznego celu wdrożenia, najlepiej nie rozważ tej historii. Jeśli korzystne jest zamknięcie historii (np. Uzyskanie opinii od klientów), natychmiast otwórz nową historię / błąd w celu usunięcia niedociągnięć. Upewnij się, że stosowanie skrótów nie zmniejsza kosztów, tylko je ukrywa lub opóźnia!
Sztuczka polega na tym, aby spierać się o całkowity koszt projektu: jeśli na przykład organizacja producentów popiera skróty w celu dotrzymania terminu, należy obliczyć ilość pracy, którą należy wykonać, aby uznać projekt za wykonany!
Uważaj również na optymalizację opartą na kryteriach : jeśli twój zespół jest mierzony liczbą opowieści, które mogą pokazać podczas przeglądu sprintu, najlepszym sposobem na osiągnięcie dobrego „wyniku” jest podzielenie każdej opowieści na dziesięć małych. Jeśli jest mierzona liczbą napisanych testów jednostkowych, będzie miał tendencję do pisania wielu niepotrzebnych. Nie licz historii, raczej mierz, ile funkcjonuje potrzebna funkcjonalność użytkownika, jak duży jest koszt długu technologicznego do rozwiązania w zakresie projektu itp.
Podsumowanie
Krótko mówiąc: szybkie i minimalne podejście to dobre podejście. T on problem jest w interpretacji „szybko” i „minimalne”. Zawsze należy brać pod uwagę koszty długoterminowe (chyba że masz projekt, w którym nie ma to znaczenia). Korzystanie ze skrótu, który zajmuje tylko 1 dzień, ale powoduje powstanie długu technologicznego w ciągu 1 miesiąca od daty wysyłki, kosztuje Twoją firmę więcej niż rozwiązanie, które zajęło 1 tydzień. Natychmiastowe rozpoczęcie pisania testów wydaje się szybkie, ale nie jeśli Twoja koncepcja jest wadliwa i utrudniają podejście.
I pamiętaj, co w twoim przypadku oznacza „długoterminowe”: znam więcej niż jedną firmę, która zbankrutowała, próbując napisać świetny kod i dlatego została wysłana zbyt późno. Dobra architektura lub czysty kod - z perspektywy firmy - jest cenny tylko wtedy, gdy koszt jego osiągnięcia jest niższy niż koszt jego braku.
Mam nadzieję, że to pomaga!