@Joe "Мы магазин" Agile ", так что я понял, что мы должны что-то менять, а что нет, но иногда изменения большие и ничего тривиального".
Если ваш процесс не позволяет вам контролировать скорость изменения требований, ваш процесс не является гибким, но случайным. Agile не означает "брать все, что приходит мне в голову".
Чтобы контролировать изменение / ползание требований, вы можете принять - в своем процессе - понятие, что требование не меняется (понятие, что оно лежит в основе Scrum.) Рассматривать изменение требования как замену старого требования новым. У вас должен быть резерв требований, и пользователь должен выбрать, какие из них он / она хочет реализовать.
Вы хотели X и Y через две недели, но вдруг вы хотите Z. Ну, тогда я могу доставить вас всех трех за 4 недели. Или я могу дать пару (X и Z) или (X и Y) или (Y и Z) через две недели, а оставшуюся - позже. Выбирать.
Это то, как вы ведете переговоры с клиентами. Вот как вы сообщаете стоимость изменения требований. Если ваша группа не обладает такой властью, вы не находитесь в проворном магазине, и вы ничего не можете с этим поделать. Это отстой, но это правда.
В случае, когда вы можете договориться, вы должны отслеживать (с точностью) время, необходимое для реализации требований и изменений требований. То есть вы должны собирать эти данные из прошлых и настоящих проектов.
Вы собираете исходную оценку времени и фактическое время завершения (в дополнение к таким ресурсам, как количество разработчиков) для каждого запроса (или модуля, на который влияет N запросов). Еще лучше оценить размер запроса / изменения запроса (с точки зрения строк кода или функциональных точек в прошлых проектах и запросах.)
Скажем, у вас есть метрика, с которой вы можете поговорить с пользователем. Вы знаете, что новый запрос займет, скажем, 1K строк кода или 10 веб-страниц со средним числом 5 полей ввода каждое (50 функциональных точек).
Затем, взглянув на исторические данные, относящиеся к вашим прошлым проектам (некоторые по строкам кода, некоторые по веб-страницам, некоторые по фактическим функциональным точкам), и вы сможете оценить, как каждый из них стоит в терминах абсолютного времени завершения. Для тех, у кого достаточно данных, вы также можете определить те требования, которые отслеживают фактическое количество разработчиков.
Затем вы используете это, и вы говорите своему клиенту, что на основе исторических данных; вы утверждаете, что неудачи проекта имеют тенденцию следовать экспоненциальному распределению; и тогда вы вооружитесь следующим аргументом для своего клиента:
Исходя из данных наших прошлых и настоящих проектов и имеющихся ресурсов, запрашиваемое вами требование выполнит
X количество времени для завершения с 25% вероятностью неудачи (или 75% успеха)
1,5 * X количество времени для выполнения с 5% неудачи (или 95% успеха)
0,5 * X количество времени для выполнения с 95% неудачи (или 5% успеха)
Вероятность сбоя как функция количества временных ресурсов обычно увеличивается на 95%, 25% и 5% (напоминает экспоненциальный дистрибутив.) Вы передаете сообщение, что определенная базовая сумма дает несколько приличный шанс на успех (но с реальными рисками ). 1,5 из этого могут дать почти определенный шанс на успех с минимальным риском, но гораздо меньше, чем это (0,5 оригинала гарантирует почти определенный провал).
Вы позволяете им переварить это. Если они все еще идут на рискованное предложение ( сделано вчера! ), По крайней мере, у вас есть в письменной форме, что вы им так сказали. Если у вашей группы есть надежда не только быть гибкой, но и инженерной, тогда клиент может серьезно рассмотреть ваши цифры и соответственно запланировать этот и будущие запросы.
Ваша работа как инженера заключается в том, чтобы объяснить инженеру, поддающимся проверке и ясным выражением, что запрос изменений не является бесплатным питанием.