В ситуации «безнадежного» проекта применима концепция приоритетности — при нехватке времени и ресурсов команда откажется от тех методов, которые она сочтет бесполезными или несущественными (например, детальные спецификации в структурном анализе), и примет только подходящие для себя. Распределение дефицитных ресурсов (самым дефицитным из которых обычно является время) должно осуществляться таким образом, чтобы извлечь из этого наибольшую выгоду.
Почти во всех «безнадежных» проектах приходится устанавливать приоритеты, разделяя все требования к системе на различные категории (см. подразд. 1.5). При этом все акционеры и заинтересованные лица должны принять согласованное решение относительно того, какие требования следует отнести к категориям «необходимо», «желательно», «хотелось бы» и «хотелось бы, но не в этот раз». Разумеется, если владелец проекта категорически настаивает на том, чтобы все требования были обязательно выполнены, дальнейшее обсуждение будет пустой тратой времени. Если акционеры и заинтересованные лица не могут достичь консенсуса по поводу отнесения требований к той или иной категории, то проектная команда, пытаясь удовлетворить всех, в результате окажется парализованной из-за отсутствия необходимых ресурсов.
К сожалению, в большинстве организаций нет дисциплины, опыта и политической силы, чтобы определить приоритет требований в самом начале проекта. Политические баталии вокруг «безнадежного» проекта могут сделать почти невозможным достижение консенсуса по приемлемым для всех приоритетам. Только когда станет понятно, что проект «безнадежен», противоборствующие стороны придут к соглашению, которое им надо было бы достичь в самом начале проекта;
В «безнадежном» проекте необходимо уделить особое внимание такому аспекту жизненного цикла ПО, как управление требованиями. В самом деле, в экстремальной ситуации проектная команда даже не будет документировать ни одно из пользовательских требований. В свое оправдание они говорят, что для документирования требуется слишком много времени, требования часто меняются и, кроме того, пользователи сами точно не знают, что им нужно. Таким образом, команда обычно полагается на методы и средства прототипирования, с помощью которых можно наглядно продемонстрировать всю важную проектную работу, а также выявить реальные требования к системе. С точки зрения «приоритетности» это порождает невозможность организованно управлять требованиями.
Чтобы достичь успеха, проектная команда должна прийти к соглашению, какие процессы будут формализованы (например, контроль исходного кода, управление изменениями и управление требованиями) и какие будут неформальными (например, проектирование пользовательского интерфейса). Бессмысленно требовать в обязательном порядке выполнения какого-либо процесса, если никто не собирается ему следовать.
Менеджер «безнадежного» проекта должен безоговорочно настаивать на выполнении тех процессов, которые он считает принципиально важными, например, процесса управления изменениями.
Формальные подходы (типа SEI-CMM, ISO-9000 или внедрение новых технологий анализа и проектирования) должны иметь место где-нибудь за пределами «безнадежного» проекта. Внедрение таких процессов имеет смысл как часть долговременной корпоративной стратегии. Оно должно начинаться с выполнения пилотного проекта (но не «безнадежного»), сопровождаясь организацией необходимого обучения. Если все это уже сделано, и другие разработки ПО в организации уже выполняются на третьем уровне SEI-CMM, то официально принятые в организации процессы следует усовершенствовать, чтобы сделать их пригодными для использования в «безнадежном» проекте.
Существует еще один аспект в разработке ПО, который порождает трудности в «безнадежных» проектах: неявно подразумеваемое требование достижения идеального качества. Обычно оно выражается в терминах количества дефектов, независимости от платформы, гибкости и др. Даже в нормальных проектах достаточно трудно удовлетворить всем этим требованиям, а в «безнадежных» сделать это просто невозможно. Вместо этого проектная команда должна прийти к решению (и по возможности согласовать его с акционерами и заинтересованными лицами) относительно того, какое качество является достаточно хорошим.
Важность такого решения объясняется тем, что достижение абсолютного качества съедает все ресурсы проекта, особенно время. Если нужно разработать сертифицированную, не содержащую ошибок программу и математически доказать ее корректность, на это потребуется время. Для этого нужны более талантливые и способные специалисты, а их недостаточно в проектной команде. Кроме того, одному или более участникам команды придется расходовать дополнительную энергию, следовательно, они не смогут работать над другими задачами. Выполнение таких требований, как надежность, переносимость и сопровождаемость, невозможно без компромиссов, и это необходимо учитывать в процессе определения приоритетов требований.
Эти требования не являются необходимыми, практичными или желательными в большинстве «безнадежных» проектов. Достичь такого совершенства невозможно даже в нормальных проектах, хотя в них нет таких жестких ограничений на время, бюджет и людские ресурсы. Что же касается «безнадежных» проектов, то пользователям в действительности нужна система, которая достаточно дешева, достаточно производительна, обладает необходимыми возможностями, достаточно устойчива и будет готова достаточно скоро — вот в чем заключается их определение «достаточно хорошего» ПО.
Однако отсутствие стандартов и технологии само по себе может превратить проект в «безнадежный». Не следует воспринимать сказанное выше как предлог для отказа от каких-либо процессов или методов вообще. Проблема заключается в том, чтобы отыскать те процессы, которые действительно работают и которым команда будет следовать естественным образом и бессознательно. Последнее особенно важно: команда испытывает такой стресс и давление, что должна многое делать чисто инстинктивно. Следует запомнить только одно — приоритетность.
7.7.