Жанр: Учеба
Смертельный марш
... * Поскольку вполне вероятно, что ночной процесс ежедневного формирования
версии потребует минимального человеческого вмешательства, будет полезным
установить следующий порядок: любой программист, допустивший ошибку в
коде, которая привела к аварийному завершению ежедневной сборки,
удостаивается высокой чести наблюдать за очередной сборкой, пока не
появится следующая жертва. Разумеется, такой порядок имеет как плюсы, так
и минусы, но по крайней мере благодаря ему команда гораздо "ближе"
знакомится с принципом ежедневной сборки проекта.
* Поручите одному из программистов, который обычно приходит в офис рано
утром, проверять успешность завершения ежедневной сборки и вывешивать
результаты на видное место. Если ни у кого нет желания или возможности
появляться в офисе рано утром, наймите студента колледжа. Одна компания
велела студенту поднимать над офисом флаг, чтобы таким образом
предупреждать сотрудников, какой день ожидается: плохой или хороший.
Зеленый флаг означал успешное завершение процесса ежедневной сборки, а
красный - аварийное завершение.
5.7 Управление рисками
Если управление требованиями - особенно определение приоритетов требований
- является в безнадежном проекте наиболее важным процессом, то вторым
важнейшим процессом является управление рисками. Если бы понятие "риска"
не было столь критическим, тогда мы не употребляли бы по отношению к
проекту определение "безнадежный". Интересно отметить, что один из
вопросов "теста на алкоголь" связан с идентификацией проектных рисков, и
если ответом на такой вопрос со стороны менеджера "нормального" проекта
может быть удивленный взгляд (даже если проект оказался в плачевном
состоянии), то менеджер безнадежного проекта скорее всего даст на такой
вопрос четкий и ясный ответ. Менеджер был бы просто глупцом, если бы он
приступил к безнадежному проекту, не имея какого-либо серьезного
представления об основных рисках и о том, как с ними бороться.
Увы, но в ходе проекта ситуация может выйти из-под контроля. Это
происходит потому, что управление рисками строится в основном на эмоциях и
инстинктах, а не на формальных процессах, и менеджер зачастую может просто
не заметить вовремя появление новых рисков в ходе проекта. В лучшем случае
будут устраняться риски, которые являются очевидными в самом начале
проекта; в нормальной ситуации они будут поводом для беспокойства в
течение всего проекта (например, риск ухода ключевого разработчика).
Однако, могут неожиданно возникнуть совершенно новые риски, которых никто
не ожидал, и поскольку команда обычно обладает слишком малым запасом
прочности (в терминах плана, бюджета и ресурсов), эти риски могут
оказаться для проекта убийственными.
Если вся эта дискуссия относительно рисков разработки ПО кажется вам
чересчур раздутой или вообще не относящейся к делу, можете смело
переходить к следующей главе. Меня больше всего заботит менеджер проекта,
который успешно завершил несколько "нормальных" проектов, справляясь с
рисками на интуитивном уровне; такой подход в безнадежном проекте обычно
не работает. На самом деле, существуют эффективные формальные процессы
управления рисками, позволяющие предпринимать безнадежные проекты, которые
в противном случае наверняка стали бы самоубийственными.
На тему об управлении рисками написана масса книг, их обзор не является
предметом данной книги. Всю необходимую вам детальную информацию вы можете
получить из первоисточников Естественно, можно не менее успешно
использовать и другие подходы, но самое главное - обеспечить, чтобы
проектная команда их понимала, принимала и следовала им, поскольку рядовые
сотрудники на самом нижнем уровне иерархии обычно первыми замечают
появление новых рисков. В безнадежном проекте некогда ждать, пока
информация доберется до руководства по безнадежно устаревшим каналам; на
проблему нужно навалиться всей командой и справиться с ней, пока она не
вышла из-под контроля.
Слово "контроль" в данном случае является важным, поскольку проектная
команда должна различать оценку риска, контроль риска и ликвидацию риска.
В худшем случае проектная команда реагирует на риск только по мере его
возникновения - например, выделяя дополнительные ресурсы для проведения
дополнительного тестирования, чтобы смягчить последствия ошибки. Такой
подход, когда проблеме уделяется внимание только после ее проявления,
часто приводит к авральной работе в стиле "тушения пожара", которая, в
свою очередь, может оказаться для проектной команды просто катастрофой.
Гораздо лучше предупреждать риск заранее, и это означает, что команда
согласна соблюдать выполнение формальных процессов оценки и контроля с
целью предотвращения потенциальных рисков.
Управление рисками в более профилактической форме направлено на устранение
самих причин, приводящих к риску и неудачам; оно нередко является
центральным звеном всех начинаний, связанных с управлением качеством в
организации. При таком подходе проявляется тенденция к значительному
расширению границ оценки рисков и появлению возможности их предотвращения;
это может привести к весьма агрессивному стилю управления, основанному на
полном контроле над степенью риска в соответствии с его допустимостью для
организации. Я всецело разделяю такой подход, однако эта проблема в
большей степени стратегическая, она должна обсуждаться и реализовываться
за пределами безнадежного проекта. Команда безнадежного проекта преследует
в основном тактические цели; она не пытается изменить культуру
организации, а всего лишь выжить и нормально закончить проект.
Тем не менее, могут возникнуть некоторые проблемы, связанные с культурой
организации, особенно в том случае, если существует мнение, что в других
проектах риск отсутствует, и данный проект - это первый, последний и
единственный безнадежный проект, когда-либо имевший место в организации.
Проблема заключается в том, что проектная команда не находится на
необитаемом острове; если бы это было так, то можно было бы решить все
вопросы, "ликвидировав вестника", который докладывает о проблемах
руководству.
С другой стороны, как отмечает Rob Charette Разумеется, верно и обратное:
проект порождает риски, которые могут воздействовать на среду организации
и внешнюю среду, и об этом знает каждый. В самом деле, менеджер проекта не
должен забывать, что его безнадежный проект может подвергнуть опасности
всю организацию - если не цивилизацию и всю вселенную! Те менеджеры,
которые плачутся и жалуются, что их команда трудится над завершением
проекта всего лишь 127 часов в неделю, зачастую находятся в блаженном
неведении относительно происходящего у них под носом, что может привести к
крушению проекта.
Рис. 5.2 Область действия проектных рисков
Поэтому столь важно использовать формальные процессы управления рисками, с
помощью которых можно оценить проектные риски по различным аспектам
деятельности организации и попытаться отыскать разумный баланс между ними;
в конце концов то, что кажется риском проектировщику и разработчику ПО,
может рассматриваться департаментом маркетинга как благоприятная
возможность. Такой подход к "глобальному" управлению рисками очень важен,
но мне приходилось встречаться с ним в безнадежных проектах совсем не так
часто, как хотелось бы. Как было отмечено выше, у проектной команды нет
времени, энергии или политического влияния, чтобы пытаться изменить
культуру организации с помощью внедрения глобального процесса управления
рисками. Следовательно, отсутствие такого процесса в организации само по
себе становится риском, который команда должна оценить.
Оценка риска выполняется обычно путем оценки сложности разрабатываемой
системы или продукта, а также оценки клиентской среды и среды проектной
команды. Сложность продукта можно оценить в терминах объема (например,
количества функциональных точек), ограничений производительности,
технической сложности и т.д. Риск, связанный с клиентской средой,
определяется в основном такими факторами, как количество пользователей,
вовлеченных в проект, уровень квалификации пользователей, значение
разработки для пользовательского бизнеса, вероятность того, что внедрение
новой системы (если оно произойдет) приведет к реорганизации или
даунсайзингу и т.д. Наконец, риск, связанный со средой проектной команды,
зависит от ее способностей, опыта, морального состояния и
физического/эмоционального здоровья.
Как правило, достаточно полная модель риска может включать сто или более
факторов риска; как отмечено ранее, некоторые проектные команды
сознательно ограничиваются рассмотрением десяти наиболее существенных
рисков. Некоторые из рисков можно оценить количественно - например,
требования к производительности (скорости реакции системы) или объем
системы, выраженный в количестве функциональных точек. Другие факторы -
например, степень дружелюбности или враждебности пользователей - могут
быть оценены только качественно. Такие факторы принято характеризовать
значениями "высокий", "низкий" или "средний".
После того, как риски подверглись идентификации и оценке, менеджер и
команда могут попытаться выбрать подходящую стратегию минимизации или
исключения по возможности большего количества рисков. Эта деятельность
носит, конечно, общий характер, однако не следует забывать, что сама
природа безнадежного проекта такова, что количество рисков превышает
обычное, они более серьезны, и от них нельзя просто так избавиться. С
другой стороны, если риски являются экстраординарными, то и решения должны
быть адекватными: в то время как проектная команда "нормального" проекта
может никогда не набраться смелости, чтобы обратиться к исполнительному
директору или первому вице-президенту с просьбой уменьшить риск путем
существенного увеличения бюджета или снятия серьезных бюрократических
ограничений, будет вполне разумным обратиться с такой просьбой в
безнадежном проекте. Если вы этого не сделаете - а для этого может
потребоваться пройти по иерархической лестнице и обойти несколько уровней
тупых начальников - то вы так никогда и не узнаете, удалось бы вам решить
ваши проблемы или нет.
В любом случае, если существуют серьезные факторы риска, воздействие
которых исключить невозможно - а в безнадежных проектах почти всегда так
оно и есть - их следует зафиксировать в специальном документе,
идентифицировав для каждого риска возможные последствия и разработав план
действий в непредвиденных ситуациях. Это не будет чисто политическим
"прикрытием задницы", поскольку в том случае, если риск материализуется и
повлечет за собой провал проекта, то последствия, как правило, будут
печальными для всех, имеющих отношение к проекту; в конце концов, таковы
реалии безнадежных проектов. Тем не менее, отрицание реальности - также
довольно распространенное явление в безнадежных проектах. Как участники
проектной команды, так и пользователи и руководители различных уровней
зачастую страдают близорукостью и напрочь игнорируют существование
серьезных проектных рисков. Вполне можно ожидать, что менеджер проекта и
участники команды будут с усердием уделять свое внимание "внутренним"
рискам; однако, как было отмечено выше, участники команды зачастую
оставляют без внимания "внешние" риски, поскольку они связаны с проблемами
организации и бизнеса, неподвластными команде. Таким образом,
документирование рисков является важной практической деятельностью,
подталкивающей пользователей и руководство к пониманию того, что они
предпочитали не замечать и игнорировать.
5.8 Заключение
Довольно легко оставить за бортом многие из тех идей, которые обсуждались
в этой главе, и оказаться впоследствии в плену пустопорожней бюрократии.
Однако, как отмечает Stephen Nesbit (я получил его сообщение как раз
тогда, когда добрался до конца этой главы и не знал толком, как ее
закончить):
Отсутствие стандартов и методологии само по себе может превратить проект в
безнадежный. Например, в моем последнем проекте сжатый и нереальный план
был использован в качестве предлога для того, чтобы отказаться от
следующего:
1) Использования системы конфигурационного управления для контроля
проектного исходного кода, сосредоточенного в трех различных компьютерных
системах, расположенных в двух территориально удаленных местах. В
результате значительное время было потеряно впустую в попытках:
а) осуществить сборку программного обеспечения;
б) определить, кому какая версия ПО принадлежит;
в) определить, почему ПО работает на одной системе и не работает на другой.
2) Регистрации узких мест и дефектов с помощью системы конфигурационного
управления. В результате стало совершенно невозможно оперативно выяснить,
какие ошибки устраняются, а какие проигнорированы; какие компоненты
закончены и могут тестироваться.
3) Документальной фиксации основных требований, проектных решений и
вариантов, узловых точек в процессе разработки и используемых тестов. В
результате участникам проектной команды оказалось чрезвычайно трудно
добиться взаимопонимания не только относительно текущего состояния
проекта, но также и относительно основных решений, принятых в самом начале
проекта.
Итак, пожалуйста, не надо воспринимать эту главу как предлог для отказа от
каких-либо процессов, методологий или методов вообще; в самом деле, это
может погубить безнадежный проект. Фокус заключается в том, чтобы отыскать
те процессы, методологии или методы, которые действительно работают, и
которым команда будет следовать естественным образом и бессознательно.
Последнее особенно важно: команда испытывает такой стресс и давление, что
должна делать многие вещи чисто инстинктивно. Если взвалить на команду
бремя новых, незнакомых процессов, которые настолько сложны, что они
вынуждены будут каждые пять минут останавливаться и заглядывать в
руководство, чтобы определить, что делать дальше, то все пропадет впустую.
Поэтому надо поступать проще - и если команда может запомнить только одно
слово, этим словом должно быть приоритетность.
Литература к главе:
1. Stephen R. Covey, Roger A. Merill, Rebecca R. Merill. First Things
First. New York: Simon & Schuster, 1994.
2. Watts Humphrey. A Discipline of Software Engineering. Reading, MA:
Addison-Wesley, 1995.
3. James Bach. The Challenge of 'Good Enough' Software. American
Programmer, October 1995.
4. Jim McCarthy. Dynamics of Software Development. Redmond, WA: Microsoft
Press, 1995.
5. G. Pascal Zachary. Show-Stopper! New York: Free Press, 1994.
6. Rob Thomsett. The Indiana Jones School of Risk Management. American
Programmer, September 1992.
7. Capers Jones. Assessment and Control of Software Risks. Englewood
Cliffs, NJ: Prentice Hall, 1994.
8. Rob Charette. Building Bridges over Intellectual Rivers. American
Programmer, September 1992.
Дополнительная литература:
1. 1. Alan M. Davis. Software Requirements: Objects, Functions, and
States. Englewood Cliffs, NJ: Prentice Hall, 1993.
2. Mark C. Paulk, Charles V. Weber, Bill Curtis, Mary Beth Chrises, et
al. The Capability Maturity Model: Guidelines for Improving the Software
Process. Reading, MA: Addison-Wesley, 1995.
3. Robert N. Charette. Application Strategies for Risk Analysis. New
York: McGraw-Hill, 1990.
4. Robert N. Charette. Software Engineering Risk Analysis and Management.
New York: McGraw-Hill, 1989.
Посмотри в окно!
Чтобы сохранить великий дар природы — зрение,
врачи рекомендуют читать непрерывно не более 45–50 минут,
а потом делать перерыв для ослабления мышц глаза.
В перерывах между чтением полезны
гимнастические упражнения: переключение зрения с ближней точки на более дальнюю.
ГЛАВА 6. ТЕХНОЛОГИЯ И СРЕДСТВА
Летом 1992 года мне довелось обедать с дружной группой менеджеров среднего
уровня Microsoft. Во время завязавшейся беседы я спросил, является ли для
проектных команд Microsoft обычным делом использование таких методологий,
как структурный анализ или объектно-ориентированное проектирование. Ответы
были примерно следующими: "иногда", "хммм, вроде бы да", "от случая к
случаю" и "а что это такое?". Когда же я спросил их относительно
использования CASE-средств (которые в то время все еще были довольно
популярными в индустрии ПО), то из их ответов понял, в чем заключается
общее мнение майкрософтовцев: такие средства годятся для "людей с улицы".
С таким выражением я еще не встречался, его можно грубо интерпретировать
как "невежественные дикари, которые только что вылезли из своего
первобытного леса и начали обучаться программированию, в отличие от
настоящих программистов, которые не нуждаются во всяких финтифлюшках".
Будучи слегка уязвленным, я поинтересовался, используют ли их проектные
команды хоть какие-нибудь средства, и в ответ услышал, что каждая команда
Microsoft может выбрать любые средства, которые сочтет подходящими для
своего проекта. Ухватившись за такой ответ, я спросил, какое средство
считает наиболее важным типичная проектная команда?
"На днях я задал одной из проектных команд такой же вопрос", - ответил
один из менеджеров. "Как вы думаете, что они ответили?"
"Какой-нибудь высокопроизводительный компилятор С++?", - спросил я.
"Ассемблер? Или мощное средство отладки для устранения множества ошибок в
их коде (хи-хи-хи)?"
"Ничего подобного", - ответил менеджер, игнорируя мое гнусное хихиканье.
"Они ответили: электронная почта. Средний разработчик Microsoft получает
сотню сообщений в день; он живет в электронной почте. Уберите электронную
почту, и проект умрет".
Рассказывая этот анекдотический случай, я неспроста в самом начале
упомянул 1992 год: эти события происходили до начала эры Internet и World
Wide Web. Сотня почтовых сообщений в день потрясла мое воображение; в 1992
году я был безумно счастлив, если получал два или три сообщения в день.
Однако можно представить себе, что если бы такой же вопрос о "наиболее
важном средстве" был задан в 1996 году, ответом могло быть "World Wide
Web"; по аналогии, "факс" в 1987, "ПК" в 1983, "онлайновый терминал" в
1976 и "мой собственный телефон на рабочем столе" в 1964 году, когда я
только начинал свою карьеру программиста.
Очевидно, не следует ожидать, что команда безнадежного проекта сможет
ограничиться только одним средством. Большинство команд - даже в
"нормальных" проектах - пользуются в своей повседневной работе самыми
разнообразными средствами и технологиями. Правда, иногда количество
средств становится чересчур большим, технологии - слишком новыми, а иногда
нежелательные средства навязываются им некомпетентными менеджерами.
Если вас встревожили эти обстоятельства, позвольте мне уверить вас, что я
вовсе не собираюсь агитировать за использование экзотических,
суперсовременных средств, которые, телепатически взаимодействуя с
программистом, получают из его беспорядочных мыслей хорошо
структурированный код. Напротив, я хочу обсудить понятие "минимально
необходимого набора средств" для безнадежных проектов. Я хочу также
обратить особое внимание на критически важные взаимосвязи между средствами
и процессами, особенно поскольку процессы в безнадежном проекте, скорее
всего, отличаются от тех, которые используются в организации. И, наконец,
я хочу предостеречь от использования в безнадежном проекте совершенно
новых средств.
6.1 Минимально необходимый набор средств
В предыдущей главе я настоятельно рекомендовал устанавливать приоритеты
для пользовательских требований. Такой же подход можно использовать по
отношению к средствам и технологии: существуют средства, которые
"необходимо использовать", "следует использовать", и огромное разнообразие
средств, которые "можно использовать". Этот подход разумно применить в
самом начале проекта, и тому есть ряд причин.
Наиболее очевидная причина лежит в плоскости экономики. Даже если средства
хорошо работают и все знакомы с ними, их приобретение может стоить слишком
дорого. Кроме того, на их получение может уйти слишком много времени -
процесс приобретения в условиях обычной корпоративной бюрократии может
завершиться уже после окончания проекта. Для большинства безнадежных
проектов следует сосредоточиться на небольшом количестве критически важных
средств, и затем убедить высшее руководство (или соответствующую службу) в
необходимости их приобретения.
С другой стороны, предположим, что команда работает в крупной корпорации,
имеющей в своем распоряжении сотни различных средств, приобретавшихся в
течение целого ряда лет. Следует ли их все использовать? Конечно, нет!
Даже если все они работают, те умственные усилия, которые необходимо
приложить, чтобы запомнить, как ими пользоваться, а также дополнительные
усилия для обеспечения их совместной работы обычно сводят на нет всю
выгоду. Можно провести аналогию с командой альпинистов, которые собираются
штурмовать вершину и пытаются решить, какое снаряжение им использовать.
Существуют вещи, которые необходимы (палатки, питьевая вода и т.д.); и,
если маршрут не слишком сложный, можно взять с собой некоторые новомодные
приспособления, о которых они прочли в своем любимом альпинистском
журнале. Однако, если они собираются штурмовать Эверест, им не обойтись
без помощи ослов-носильщиков или местных жителей, иначе они будут не в
состоянии тащить на спине по 300 фунтов снаряжения на человека.
Команда безнадежного проекта должна самостоятельно, независимо от принятых
в организации стандартов, решить, какие средства являются необходимыми, а
без каких можно обойтись. Меня очень удивил подход ряда организаций, в
которых я побывал, к безнадежным проектам, когда менеджер проекта с
грустью говорил, что все проекты заставляют разрабатывать на КОБОЛе (или,
в других организациях, в таком качестве может фигурировать Visual Basic
или Oracle или что-нибудь еще ...), даже если эта технология совершенно не
подходит для его проекта. Чепуха! Пошлите их подальше! Используйте те
средства и технологии, в которых есть смысл! В противном случае это можно
сравнить с ситуацией, когда кто-либо говорит руководителю команды
альпинистов, собирающейся штурмовать Эверест: "Наш комитет решил, что ваша
проектная команда должна взять подробную схему Нью-Йоркского метро,
поскольку в большинстве проектов ее сочли очень полезной". (Иногда в это
дело вмешивается своими грязными руками политика. В прошлом году мне
приходилось видеть несчастных сотрудников IBM, вынужденных использовать
Lotus Freelance вместо PowerPoint и Lotus 1-2-3 вместо Excel, поскольку у
них не было никакого желания ввязываться в противном случае в политические
баталии. Аналогично, я не уверен, что хотел бы оказаться в проектной
команде Microsoft, которая решила бы примерно в августе 1996 года
использовать Netscape Navigator вместо Internet Explorer.)
Я думаю, очень важно, чтобы участники команды пришли к единому мнению
относительно используемых в проекте средств, иначе наступит хаос.
Разумеется, это утверждение не следует понимать слишком буквально; оно не
означает, что все участники команды должны обязательно использовать один и
тот же текстовый процессор для подготовки своих документов, однако, скорее
всего, важно использовать один и тот же компилятор С++. Одна из проблем,
связанных с безнадежными проектами, заключается в том, что разработчики ПО
считают допустимой полную анархию на индивидуальном уровне (например, если
им хочется использовать никому не известный компилятор С++, который они
переписали с университетского Web-сайта, то они считают, что это их
неотъемлемое право). Это совсем не так: неотъемлемым правом обладает
команда, и менеджер проекта должен неуклонно проводить его в жизнь во всех
ситуациях, когда несовместимые средства могут привести к значительным
разногласиям.
Это означает, что, пока участники команды не поработают вместе на
нескольких безнадежных проектах, они не придут к единому мнению
относительно "минимального" набора средств. После того, как достигнут
консенсус по поводу набора средств, команда может обсудить средства,
которыми "следует" пользоваться, при этом проблемы заключаются в том,
чтобы добиться согласия в команде и получить разрешение руководства на
приобретение новых средств. Если после этого еще останется время и
желание, то можно обсудить качества неопределенного количества средств,
которые "можно использовать" и в которых заинтересованы различные
участники команды.
Выше я высказал мысль, что менеджер проекта должен быть готов к тому,
чтобы настаивать на достижении консенсуса; в самом деле, это может быть
одним из критериев, используемых менеджером для выбора потенциальных
участников команды. Отметим, что то же самое можно сказать относительно
процессов, которые мы обсуждали в главе 5. И, как мы увидим далее, это
имеет еще большее значение, поскольку средства и процессы тесно связаны
друг с другом.
Помня обо всех высказанных предостережениях, практически невозможно для
такого "дилетанта", как я, с ходу перечислить все средства, рекомендуемые
для безнадежного проекта. Когда задают такой вопрос, мой ответ - "это
зависит от ... " - обычен для присущего консультантам и приводящего к
замешательству стремления уходить от прямого ответа на любой вопрос. Итак,
поскольку вы крепко запомнили мои предыдущие советы, далее приводится
перечень средств, которые мне хотелось бы видеть в безнадежных проектах:
* Электронная почта, ПО для групповой работы, средства Internet/Web - так
же, как и в эпизоде с Microsoft, эти средства находятся в начале моего
списка. Причина заключается в следующем: электронные средства общения и
взаимодействия являются не только гораздо более эффективным средством
коммуникации, чем записки и факсы, но они также способствуют координации и
сотрудничеству. Лично мне безразлично, какие именно средства использовать:
Microsoft Mail, cc:Mail, Netscape Collabra или Lotus Notes; важно только,
чтобы вся команда работала в сети хранила общие проектные данные также в
сети. Помимо этого, существуют и другие хорошие новые средства, но они
скорее относятся к категории "следует использовать", а не "необходимо
использовать".
* Средства прототипирования/быстрой разработки приложений (RAD) - как
отмечалось ранее, почти все безнадежные проекты используют в той или иной
степени прототипирование и пошаговую разработку; следоват
...Поділитися у соцмережах