W mojej obecnej pracy wydaje się, że mamy wiele zmian wymagań. Jesteśmy sklepem „Agile”, więc rozumiem, że mamy się dostosować, a co nie, ale czasami zmiana jest duża i nic trywialnego.
Moje pytanie brzmi: w jaki sposób efektywnie informujesz o koszcie zmiany? Z powodu zwinności, jeśli zmiana jest wystarczająco duża, coś zostanie upuszczone z bieżącego sprintu, ale zwykle dodaje się go następnym razem. Ponieważ naszym modelem jest SaaS, klientem końcowym jest faktycznie sama firma i wiedzą, że otrzymają funkcję cięcia n tygodni później.
Wydaje mi się, że to, o co staram się uzyskać, to usunięcie funkcji, której naprawdę nie można używać do komunikacji, ponieważ opóźniono ją tylko o n tygodni. Jakie inne sposoby musisz sprawić, aby firma zrozumiała, ile kosztuje zmiana?
Odpowiedzi:
@Joe „Jesteśmy sklepem„ Agile ”, więc rozumiem, że mamy się dostosować, a co nie, ale czasami zmiana jest duża i nic trywialnego.”
Jeśli twój proces nie pozwala ci kontrolować tempa zmian wymagań, proces nie jest zwinny, ale przypadkowy. Zwinność nie oznacza „zabrania czegokolwiek, co stanie mi na drodze”.
Aby kontrolować zmianę / pełzanie wymagań, możesz przyjąć - w swoim procesie - pojęcie, że wymaganie się nie zmienia (przekonanie, że jest to sedno Scruma). Traktuj zmianę wymagania jako zastąpienie starego wymagania nowym. Musisz mieć zaległe wymagania i użytkownik musi wybrać, które z nich chce wdrożyć.
Chciałeś X i Y za dwa tygodnie, ale nagle chcesz Z. Cóż, wtedy mogę dostarczyć ci wszystkie trzy za 4 tygodnie. Albo mogę podać parę (X i Z) lub (X i Y) lub (Y i Z) w ciągu dwóch tygodni, a resztę dostarczyć później. Wybierać.
W ten sposób negocjujesz z klientami. W ten sposób informujesz o koszcie zmiany wymagań. Jeśli twoja grupa nie ma takiej mocy, nie jesteś w zwinnym sklepie i nic nie możesz na to poradzić. To jest do bani, ale to prawda.
W przypadku, gdy możesz negocjować, musisz śledzić (z precyzją) czas potrzebny do wdrożenia wymagań i zmian wymagań. Oznacza to, że musisz zebrać te dane z poprzednich i obecnych projektów.
Zbierasz pierwotny szacunkowy czas i rzeczywisty czas zakończenia (oprócz zasobów takich jak liczba programistów) na żądanie (lub moduł, na który wpływa N wniosków). Jeszcze lepiej, oszacuj wielkość zmiany żądania / żądania (pod względem linii kodu lub punktów funkcyjnych w poprzednich projektach i żądaniach).
Załóżmy, że masz dane, z którymi możesz porozmawiać z użytkownikiem. Wiesz, że nowe żądanie zajmie, powiedzmy, 1 000 wierszy kodu lub 10 stron internetowych ze średnio 5 polami wejściowymi każde (50 punktów funkcyjnych).
Następnie, patrząc na dane historyczne specyficzne dla twoich wcześniejszych projektów (niektóre według linii kodów, niektóre według stron internetowych, niektóre według faktycznych punktów funkcyjnych), możesz oszacować, jak każdy z nich kosztuje pod względem bezwzględnego czasu realizacji. Dla osób posiadających wystarczającą ilość danych można również zidentyfikować wymagania, które śledzą faktyczną liczbę pracowników programistów.
Następnie używasz tego i mówisz swojemu klientowi, że na podstawie danych historycznych; argumentujesz, że niepowodzenia projektu zwykle następują po rozkładzie wykładniczym; a następnie jesteś uzbrojony w następujący argument dla swojego klienta:
Prawdopodobieństwo awarii w zależności od ilości zasobów czasu zwykle wynosi 95%, 25% i 5% (przypominając rozkład wykładniczy). Przekazujesz komunikat, że pewna podstawowa kwota daje dość przyzwoitą szansę na sukces (ale z realnym ryzykiem ). 1,5 z tego może dać prawie pewną szansę na sukces przy minimalnym ryzyku, ale znacznie mniej niż to (0,5 pierwotnego gwarantuje prawie pewną porażkę).
Pozwalacie im to trawić. Jeśli nadal wybierają ryzykowną propozycję ( zrobioną wczoraj! ), Przynajmniej masz na piśmie, że im to powiedziałeś. Jeśli masz nadzieję, że twoja grupa będzie nie tylko zwinna, ale również inżynierska, klient może poważnie rozważyć twoje liczby i odpowiednio zaplanować to i przyszłe żądania.
Twoim zadaniem jako inżyniera jest wyjaśnienie inżyniera, weryfikowalne i jasne warunki, że żądania zmian nie są bezpłatnym posiłkiem.
źródło
Z tego, co opisałeś, nie masz problemu. Proszą o zmianę i albo chcą poczekać, aż powiesz, że można to zrobić, albo odłożą kolejną funkcję. Wygląda na równowagę między: czasem, zasobami i wymaganiami.
źródło
Możesz spróbować ustawić minimalny wiek nowego dodatku / zmiany (nie dotyczy poprawek). Na przykład nie można wprowadzać żadnych nowych zmian, dopóki nie osiągną wieku 3 tygodni.
Posiadanie minimalnego wieku zadania jest przyjemne, ponieważ na początku każde zadanie wygląda na niezwykle ważne, ale jeśli poczekasz trochę czasu, jego znaczenie często spadnie znacząco. W zależności od interwału czasowego zapewnia co najmniej tyle czasu stabilności zadań, nad którymi pracujesz.
Aby śledzić wiek, zezwalasz na dodawanie zadań do niektórych list, ale nie będą one uważane za zadania do wykonania przed upływem tego okresu.
źródło
Jest to bardzo powszechny problem, bez względu na to, jak szybko projekt postępuje pod względem technicznym, klient postrzega go jako znacznie wolniejszy i może swobodnie zmieniać wymagania, ponieważ lubią myśleć, że programiści i tak nie powinni wiele robić.
Ta błędna percepcja wynika z trzech głównych zadań programistycznych, które pochłaniają czas i nigdy nie zostaną właściwie rozliczone przez klientów:
Żadne z powyższych nie będzie nigdy zrozumiane i właściwie rozliczone przez klientów końcowych.
Zasadniczo cokolwiek nie ma „widoków” (elementów GUI) nie zostało zrobione.
Nazwijmy to twierdzeniem projekcji, haha nie tylko żartuję: D
źródło