Я думаю, что первое, что нужно осознать, - это то, что между гибкостью и гибкостью есть разница. Медленно внедряемые гибкие методы и характеристики - кросс-функциональные группы, адаптивное планирование, эволюционные / инкрементальные поставки, временные итерации и даже представление концепций из Lean сильно отличаются от внедрения Extreme Programming, Scrum или Crystal.
Вы прямо упоминаете участие клиентов. Да, многие из Agile методологий требуют участия клиентов, но это не обязательно, чтобы быть гибким. В каждой правительственной / оборонной программе у меня всегда был менеджер программы или проекта, который был контактным лицом с заказчиком. Этот человек становится «голосом клиента». Это может замедлиться, когда они проводят телеконференции, отправляют электронные письма, звонят и уточняют, но у вас может быть один человек (или группа, если у вас также есть заместители руководителя), который является представителем клиентов вашей команды. По общему признанию, это не совсем то же самое. Но разве не быть гибким в том, чтобы быть гибким и реагировать на изменения?
Вы также упомянули несколько ключевых понятий: предопределенные требования, наличие запросов функций, «выброшенных за стену», отсутствие расстановки приоритетов, потому что «они все важны», и проекты с фиксированной стоимостью и / или с фиксированным графиком. К каждому из них можно обратиться по-разному.
Если вы думаете, что у вас есть все ваши требования заранее, скорее всего, у вас нет. Требования меняются. Только то, что у вас есть «законченная и подписанная» спецификация, не означает, что она установлена в камне. В зависимости от того, какой документ требований у вас есть, запишите их, как вам удобно и / или так, как указано в контракте, и предоставьте требования, дизайн и архитектуру. Кроме того, посмотрите, можете ли вы относиться к этим живым документам (проектный документ, который я видел сегодня на работе, помечен как Revision G, что означает, что он находится в восьмом обновлении). Спросите о том, сколько вы можете оставить как TBD в любой данной итерации, и сколько нужно укрепить сейчас - может быть, что-то получится.
Будьте проворны с вашей документацией. Не дублируйте усилия между «тем, что хочет ваша команда» и «тем, что хочет клиент». Например, если вашему клиенту нужна традиционная спецификация требований к программному обеспечению, а ваша команда хочет использовать пользовательские истории, попробуйте адаптироваться к традиционной SRS и использовать элементы действий и скользящий список элементов вместо пользовательских историй, чтобы не тратить время формулировка как «система должна ...» и «должна быть в состоянии, потому что». Это требует дисциплины со стороны команды, чтобы адаптироваться к различиям между проектами. Захват проблем в отражениях.
Как только вы приступите к разработке, вы можете выполнить 5 или 6 итераций, а затем пригласить своего клиента на ваше предприятие, чтобы увидеть подмножество вашей реализации. Сполосните и повторите этот процесс. Это не постоянное участие, требуемое некоторыми методологиями, но у вас есть преимущество высокой видимости. Если ваш клиент говорит нет, по крайней мере, вы пытались. Если они скажут «да», вы можете просветить их, будучи гибкими. В одном проекте, который я принимал, клиент посещал сайт каждые несколько месяцев (обычно 3-5 месяцев). Они наблюдали за тем, как мы проходим тестирование качества, обсуждали проблемы с инженерами и бизнес с офисом программы / проекта. Для всех это была возможность попасть на одну и ту же страницу.
Тестирование и обслуживание происходят так же, как и в других гибких проектах. Создайте процедуры тестирования и документируйте дефекты соответствующим образом, отслеживайте показатели по контрактным обязательствам и документируйте результаты тестирования. Если вы хотите следовать TDD, пойти на это. Непрерывная интеграция - еще одна хорошая идея. Во время совещаний по статусу проекта ваш менеджер проекта может использовать эту информацию, чтобы сказать: «Мы выполнили N требований, прошли M тестов, X тестов пройдены», а также сообщить о состоянии и статусе проекта людям, у которых есть деньги.
Говоря о деньгах, у нас есть проблема с фиксированной стоимостью и / или с фиксированным графиком.
Работа с фиксированным графиком довольно проста. Учитывая ваши требования, вы знаете, сколько итераций вы можете выполнить. Ваша рабочая нагрузка для каждой итерации в значительной степени определяется возможностями реализации, тестирования и интеграции. Это может быть сложно, но не исключено, что можно разбить функции и заранее назначить их для итераций. Это восходит к моей мысли о приглашении клиента - если у вас есть один год и вы используете двухнедельную итерацию, возможно, приглашайте клиента ежеквартально (и приглашайте его каждый квартал) и показывайте ему результаты предыдущей работы. Пусть они увидят ваши приоритеты требований, ваши планы на будущее и как вы планируете.
Работа с фиксированным бюджетом аналогична. Вы знаете, сколько у вас есть времени, сколько ресурсов у вас есть для проекта, сколько они стоят и, следовательно, сколько часов каждый может работать за одну итерацию. Это просто вопрос того, чтобы все внимательно следили за этим. Если ваша компания может съесть расходы на сверхурочную работу, сделайте это. В противном случае, убедитесь, что все работают в надлежащее время, и используйте хорошие навыки управления временем и временные рамки, чтобы сохранить продуктивность каждого. Более продуктивные часы - это то, что вам нужно для снижения затрат - предоставьте больше документов и программного обеспечения с добавленной стоимостью без затрат на совещания и накладные расходы.
В конечном счете, речь идет не обязательно о том, чтобы быть гибким, а о том, что делает Agile хорошим и проворным. Уметь реагировать на изменения в требованиях, иметь возможность поставлять частое программное обеспечение, даже если заказчик этого не хочет, только создавать дополнительную документацию (вместе с тем, что вы обязаны по контракту), и так далее.