Безусловно, очень важно в самом начале проекта договориться с требовательными заказчиками относительно реалистичных сроков и бюджета, сформировать проектную команду, определить необходимые рабочие процессы и процедуры. К сожалению, некоторые менеджеры проектов полагают, что это самая трудная часть работы и после того, как она сделана, все пойдет гораздо легче. На самом деле контроль за продвижением (иначе говоря — прогрессом) безнадежного проекта — это срочная и важная работа, отнимающая много времени; ее нельзя игнорировать или заниматься ею от случая к случаю. Именно это самая важная обязанность менеджера проекта после завершения всех тяжелых переговоров в начале проекта.
Чтобы преуспеть в этой деятельности, менеджер проекта должен уметь отличать реальный прогресс от «кажущегося» прогресса. Многие менеджеры проектов давно усвоили, что синдром «выполнено на 90%» является опасной иллюзией, и они знают, что в безнадежном проекте не менее опасно утверждать «мы выполнили анализ и проектирование на 100%, но еще не закончили написание кода и не тестировали его». Практичной и эффективной альтернативой это дилемме является принцип «ежедневной сборки» («daily build»).
Неявно подразумевается, что очередные результаты, получаемые проектной командой, появляются через интервалы, измеряемые месяцами или неделями. К этому приучает опыт нормальных проектов, и это согласуется с обычным темпом деловой жизни — например еженедельными совещаниями персонала, ежемесячными отчетами о состоянии работ, ежеквартальными презентациями для высшего руководства и т.д.
Однако безнадежные проекты нуждаются в другом подходе. Когда проект приходит к прототипированию и пошаговой разработке, работу над ним надо организовать на основе принципа «ежедневной сборки». Под этим подразумевается следующее: компиляция, сборка, установка и тестирование всей совокупности разработанного командой кода должны выполняться каждый день, как если бы этот день был последним перед завершением проекта, и на следующее утро было бы необходимо сдать законченную систему пользователям.
Разумеется, с первого дня невозможно приступить к ежедневной сборке. Правда, уже на второй день работы можно написать подпрограмму типа «Hello, World», и трудно сегодня удивить кого-то совершенно новыми технологиями. Однако существуют определенные требования, которым должна удовлетворять версия прототипа системы при первой «официальной» демонстрации: помимо того, что она включает необходимую совокупность компонентов, процедур или модулей и несколько сотен, а может быть и тысяч строк кода, она должна выполнять реальный ввод данных, производить реальную обработку или вычисления и формировать реальный выход. Именно с этого момента следует начинать ежедневную сборку и формировать каждый день новую (желательно улучшенную) версию системы.
Для менеджера проекта подобная стратегия может быть приоритетом номер один. Если в течение недели никто не сможет сообщить менеджеру проекта, что разрабатываемое приложение не хочет правильно взаимодействовать с новой объектно-ориентированной базой данных, то в результате проект может безнадежно отстать от графика. До тех пор, пока менеджер судит о состоянии проекта но устным отчетам, запискам или диаграммам потоков данных, будет слишком легко перепутать движение с прогрессом и усилия с результатами. Однако, если менеджер проекта настаивает на ежедневной физической демонстрации результатов, будет нелегко скрыть возникающие трудности, которые в конечном счете могут способствовать провалу проекта.
В то время как вряд ли кто-нибудь вправе претендовать на «изобретение» данного подхода, известно, что он впервые стал популярным во время разработки операционной системы Windows NT. Можно также отметить, что при разработке Windows 95 использовался принцип «ежедневной сборки»; заключительная бета-версия перед выпуском конечного продукта была реализована в августе 1995 г. и называлась «Проект 951».
Важно осознавать, что подобный подход становится неотъемлемой составляющей процесса разработки системы, которому следует проектная команда. Кроме того, процесс ежедневного завершения работы над проектом должен быть автоматизированным и выполняться ночью без участия программистов, тогда он будет эффективным. Такой подход подразумевает наличие автоматизированного управления конфигурацией ПО и механизмов управления исходными кодами, а также разнообразных «сценариев» для выполнения компиляции и сборки приложений. Но что еще более важно, он подразумевает наличие системы автоматизированного тестирования, которая может работать всю ночь, выполняя множество тестов для проверки работоспособности системы. Таким образом, чтобы реализовать на практике принцип «ежедневной сборки», необходимо иметь в своем распоряжении адекватный набор средств и технологий.
Хотя ежедневная сборка весьма эффективна с точки зрения мониторинга продвижения безнадежного проекта, она не слишком помогает справиться со многими серьезными проблемами. Важно понимать семантическое различие между тем, что некоторые менеджеры называют «issue» (вопрос, незначительная проблема), и рисками. В ходе работы над проектом ситуация может выйти из-под контроля. Это происходит потому, что управление рисками строится в основном на эмоциях и инстинктах, а не на формальных процессах, и менеджер в процессе работы зачастую может вовремя не заметить появление новых рисков. В лучшем случае риски, очевидные в самом начале проекта, будут устраняться. В нормальной ситуации они являются поводом для беспокойства в течение всей работы над проектом (например, риск ухода ключевого разработчика). Однако неожиданно могут возникнуть совершенно новые риски, которые окажутся убийственными для проекта.
Проектная команда должна различать оценку риска, управление риском и ликвидацию риска. В худшем случае проектная команда реагирует на риск только по мере его возникновения — например, выделяет дополнительные ресурсы для проведения очередного тестирования, чтобы смягчить последствия ошибки. В этом случае проблеме уделяется внимание только после ее проявления. При подобном подходе работа строится в стиле «тушения пожара». Для проектной команды такая ситуация может быть катастрофой. Гораздо лучше предупреждать риск заранее. Это означает, что команда согласна соблюдать выполнение формальных процессов оценки и управления с целью предотвращения потенциальных рисков.
Профилактическое управление рисками направлено на устранение самих причин, приводящих к неудачам. Оно нередко является центральным звеном всех начинаний, связанных с управлением качеством в организации. При таком подходе проявляется тенденция к значительному расширению границ оценки рисков и появлению возможности их предотвращения. Это может привести к весьма агрессивному стилю управления, основанному на полном контроле над степенью риска в соответствии с его допустимостью для организации. Эта проблема в большей степени стратегическая, она должна обсуждаться и реализовываться за пределами «безнадежного» проекта. Команда «безнадежного» проекта преследует в основном тактические цели; она пытается не изменить культуру организации, а всего лишь выжить и нормально закончить проект.
Оценка риска выполняется обычно путем оценок сложности разрабатываемой системы или продукта, а также клиентской среды и среды проектной команды. Сложность продукта можно оценить в терминах объема (например, количества функциональных точек), ограничений производительности, технической сложности и т.д. Риск, связанный с клиентской средой, определяется в основном такими факторами, как число пользователей, вовлеченных в проект, их уровень квалификации, значение разработки для пользовательского бизнеса, вероятность того, что внедрение новой системы (если оно произойдет) приведет к реорганизации, и т.д. Наконец, риск, связанный со средой проектной команды, зависит от ее способностей, опыта, морального состояния и физического/эмоционального здоровья.
Как правило, достаточно полная модель риска может включать сто или более факторов риска. Некоторые из рисков можно оценить количественно, например требования к производительности (скорости реакции системы) или объем системы, выраженный в количестве функциональных точек. Другие факторы (например, степень расположенности или враждебности пользователей) могут быть оценены только качественно. Такие факторы принято характеризовать значениями «высокий», «низкий» или «средний».
После того как риски подверглись идентификации и оценке, менеджер и команда могут выбрать подходящую стратегию минимизации или исключения по возможности большего числа рисков. Эта деятельность носит, конечно, общий характер. Однако не следует забывать: сама природа «безнадежного» проекта такова, что количество рисков превышает обычное, они более серьезны, и от них нельзя просто так избавиться. С другой стороны, если риски являются экстраординарными, то и решения должны быть адекватными: в то время как проектная команда нормального проекта может никогда не набраться смелости, чтобы обратиться к исполнительному директору или первому вице-президенту с просьбой уменьшить риск путем существенного увеличения бюджета или снятия серьезных бюрократических ограничений, участникам безнадежного проекта будет вполне разумно обратиться с такой просьбой.
В любом случае, если существуют серьезные факторы риска, воздействие которых исключить невозможно (а в «безнадежных» проектах почти всегда так оно и есть), их следует зафиксировать в специальном документе, идентифицировав для каждого риска возможные последствия и разработав план действий в непредвиденных ситуациях. Документирование рисков является важной практической деятельностью, подталкивающей пользователей и руководство к пониманию того, что они предпочитали не замечать и игнорировать.
Менеджеры проектов традиционно использовали сетевые графики и графики Ганта для планирования продвижения своих проектов. Они пытались разбить весь проект на набольшие задачи с «двоичным» результатом (т.е. либо «выполнено», либо «не выполнено») и контролем качества на выходе, который позволял убедиться, что результаты выполненных задач можно включить в разрабатываемую систему. В такой подход очень хорошо вписывается принцип ежедневной сборки: периодические демонстрации либо показывают работоспособность промежуточного продукта, либо нет. Помимо этого менеджеру проекта нужно оценивать текущее состояние, продвижение, риски и проблемы проекта путем проведения периодических совещаний. На самом деле все, что нужно менеджеру проекта, — это точная и реалистичная оценка перспектив проекта. Он должен сообщить своей команде, когда следует ожидать поставку системы заказчикам и какие проблемы ждут их впереди.
Это достаточно трудно сделать, даже если в совещании участвуют только сам менеджер проекта и участники проектной команды. Если же в совещании участвуют сотрудники отдела качества, аудиторы, высшее руководство, конечные пользователи и другие заинтересованные лица, то оно зачастую превращается в политическое мероприятие, на котором реальные проблемы и состояние проекта скрываются, чтобы избежать политических последствий.
В то же время менеджер проекта должен понимать, что периодические оценки действительно важны и могут оказаться очень эффективными с точки зрения разрешения проблем и планирования будущей деятельности. При этом нужно обратить особое внимание на неформальные экспертные оценки и доступность их результатов для всех активных участников проекта.
Нужно проводить небольшие разборы в конце по завершении каждой стадии проекта или каждого прототипа, или каждой очередной версии системы, поставляемой заказчику. В зависимости от конкретного проекта это означает, что разбору подвергается работа, выполненная в течение пары недель или месяцев, поэтому большинство основных игроков еще участвует в проекте и, скорее всего, помнит, что они делали и почему. Такой разбор можно провести на одном совещании за несколько часов, вместо привычного «посмертного» разбора в конце проекта, который продолжается несколько дней или недель.
7.9.