Как вы справляетесь с меняющимися требованиями? [закрыто]

14

В моей нынешней работе такое ощущение, что у нас много изменений требований. Мы магазин "Agile", так что я понял, что мы должны что-то менять, а что нет, но иногда изменения большие и ничего тривиального.

У меня вопрос, как вы эффективно определяете стоимость изменений? Из-за своей гибкости, если изменение достаточно большое, что-то будет отброшено из текущего спринта, но обычно оно просто добавляется в следующий раз. Так как наша модель SaaS, конечный клиент фактически сам бизнес, и они знают , что они получат отрезанную функцию п недель спустя.

Я предполагаю, что я пытаюсь понять, что удаление функции на самом деле не является чем-то, что можно использовать для связи, поскольку оно было отложено только на n недель. Какие еще способы вы должны заставить бизнес понять, что такое изменение стоит?


источник
2
Связанные - programmers.stackexchange.com/questions/73/…
ChrisF

Ответы:

14

@Joe "Мы магазин" Agile ", так что я понял, что мы должны что-то менять, а что нет, но иногда изменения большие и ничего тривиального".

Если ваш процесс не позволяет вам контролировать скорость изменения требований, ваш процесс не является гибким, но случайным. Agile не означает "брать все, что приходит мне в голову".

Чтобы контролировать изменение / ползание требований, вы можете принять - в своем процессе - понятие, что требование не меняется (понятие, что оно лежит в основе Scrum.) Рассматривать изменение требования как замену старого требования новым. У вас должен быть резерв требований, и пользователь должен выбрать, какие из них он / она хочет реализовать.

Вы хотели X и Y через две недели, но вдруг вы хотите Z. Ну, тогда я могу доставить вас всех трех за 4 недели. Или я могу дать пару (X и Z) или (X и Y) или (Y и Z) через две недели, а оставшуюся - позже. Выбирать.

Это то, как вы ведете переговоры с клиентами. Вот как вы сообщаете стоимость изменения требований. Если ваша группа не обладает такой властью, вы не находитесь в проворном магазине, и вы ничего не можете с этим поделать. Это отстой, но это правда.

В случае, когда вы можете договориться, вы должны отслеживать (с точностью) время, необходимое для реализации требований и изменений требований. То есть вы должны собирать эти данные из прошлых и настоящих проектов.

Вы собираете исходную оценку времени и фактическое время завершения (в дополнение к таким ресурсам, как количество разработчиков) для каждого запроса (или модуля, на который влияет N запросов). Еще лучше оценить размер запроса / изменения запроса (с точки зрения строк кода или функциональных точек в прошлых проектах и ​​запросах.)

Скажем, у вас есть метрика, с которой вы можете поговорить с пользователем. Вы знаете, что новый запрос займет, скажем, 1K строк кода или 10 веб-страниц со средним числом 5 полей ввода каждое (50 функциональных точек).

Затем, взглянув на исторические данные, относящиеся к вашим прошлым проектам (некоторые по строкам кода, некоторые по веб-страницам, некоторые по фактическим функциональным точкам), и вы сможете оценить, как каждый из них стоит в терминах абсолютного времени завершения. Для тех, у кого достаточно данных, вы также можете определить те требования, которые отслеживают фактическое количество разработчиков.

Затем вы используете это, и вы говорите своему клиенту, что на основе исторических данных; вы утверждаете, что неудачи проекта имеют тенденцию следовать экспоненциальному распределению; и тогда вы вооружитесь следующим аргументом для своего клиента:

Исходя из данных наших прошлых и настоящих проектов и имеющихся ресурсов, запрашиваемое вами требование выполнит

  1. X количество времени для завершения с 25% вероятностью неудачи (или 75% успеха)

  2. 1,5 * X количество времени для выполнения с 5% неудачи (или 95% успеха)

  3. 0,5 * X количество времени для выполнения с 95% неудачи (или 5% успеха)

Вероятность сбоя как функция количества временных ресурсов обычно увеличивается на 95%, 25% и 5% (напоминает экспоненциальный дистрибутив.) Вы передаете сообщение, что определенная базовая сумма дает несколько приличный шанс на успех (но с реальными рисками ). 1,5 из этого могут дать почти определенный шанс на успех с минимальным риском, но гораздо меньше, чем это (0,5 оригинала гарантирует почти определенный провал).

Вы позволяете им переварить это. Если они все еще идут на рискованное предложение ( сделано вчера! ), По крайней мере, у вас есть в письменной форме, что вы им так сказали. Если у вашей группы есть надежда не только быть гибкой, но и инженерной, тогда клиент может серьезно рассмотреть ваши цифры и соответственно запланировать этот и будущие запросы.

Ваша работа как инженера заключается в том, чтобы объяснить инженеру, поддающимся проверке и ясным выражением, что запрос изменений не является бесплатным питанием.

luis.espinal
источник
спасибо за ваш совет. У меня есть проблемы с оценкой усилий для проектов. В своем посте вы рекомендуете получить его из предыдущего проекта. Что делать, если у нас нет предыдущих данных для оценки. И у нас есть новые члены команды (некоторые из них
новички
8

Из того, что вы описали, у вас нет проблем. Они просят об изменении и либо хотят подождать, пока вы не скажете, что это можно сделать, либо готовы отложить другую функцию. Похоже, баланс между: время, ресурсы и требования.

JeffO
источник
Я не говорю, что давать и брать это проблема. Я спрашиваю, как вы сообщаете о сложности и масштабах запрашиваемых изменений?
2
@ Джо, вы даете тогда оценку
JK.
4

Вы можете попробовать установить минимальный возраст нового добавления / изменения (не относится к исправлению ошибок). Например, новые изменения не могут быть обработаны до тех пор, пока ему не исполнится 3 недели.

Иметь минимальный срок выполнения задания - это хорошо, потому что в начале каждая задача выглядит очень важной, но если вы подождете некоторое время, ее значимость будет значительно снижаться. В зависимости от вашего временного интервала это даст вам, по крайней мере, такое количество времени стабильности в задачах, над которыми вы работаете.

Чтобы отслеживать возраст, можно разрешить добавление задач в некоторый список, но они не будут рассматриваться как задачи, над которыми нужно работать до истечения этого периода.

Брайан Р. Бонди
источник
1

Это очень распространенная проблема, независимо от того, насколько быстро проект развивается в техническом плане, клиент воспринимает его как гораздо более медленный и не стесняется менять требования, так как ему нравится думать, что разработчики не должны делать много в любом случае.

Это ошибочное восприятие происходит от трех основных задач разработки, которые занимают время и никогда не будут должным образом учтены клиентами:

  1. Проверка / очистка кода: старый код раздувается и портится и требует регулярных проверок и очистки, это занимает много времени, и клиент никогда не поверит.
  2. Аудит безопасности и исправления: особенно если у вас есть младшие члены команды, у вас будет много проблем безопасности, связанных с кодом, и вы захотите регулярно просматривать весь этот новый код, который был написан, и переписывать вещи, которые плохо выглядят с точки зрения безопасности. В перспективе клиент никогда не узнает и не отчитается за это время.
  3. Изменения, связанные с архитектурой: Растущая кодовая база может (и, скорее всего, будет) в нескольких точках требовать структурного переосмысления и рефакторинга, что может включать в себя: A - Изменения / оптимизации, связанные с производительностью (изменения алгоритмов, замены библиотек, механизмы кэширования и т. Д.) или: B - Изменения / оптимизации, связанные с производительностью (удобочитаемость, возможность повторного использования кода, простота понимания, новые соглашения о кодировании, новая структура и т. д.).

Ничто из вышеперечисленного никогда не будет понято и должным образом учтено конечными клиентами.

В основном все, что не имеет «представлений» (элементов GUI), не было сделано.

Давайте назовем это теоремой projenix, ха-ха, не шучу: D

Projenix
источник