Летом 1992 г. Эдварду Йордону довелось обедать с группой менеджеров среднего уровня Microsoft. Во время беседы он спросил, является ли для них обычным делом использование таких методологий, как структурный анализ или объектно-ориентированное проектирование. Ответы были примерно следующими: «иногда», «вроде бы да», «от случая к случаю» и «а что это такое?». Когда же он поинтересовался относительно использования CASE-средств (которые в то время все еще были довольно популярными в индустрии ПО), то из их ответов понял, в чем заключается общее мнение майкрософтовцев: эти средства годятся для «людей с улицы», т.е. «невежественных дикарей, которые только что вылезли из своего первобытного леса и начали обучаться программированию, в отличие от настоящих программистов, не нуждающихся во всяких финтифлюшках».
Будучи слегка уязвленным, он полюбопытствовал, используют ли их проектные команды хоть какие-нибудь средства, и в ответ услышал, что каждая команда Microsoft может выбрать любые средства, которые сочтет подходящими для своего проекта. Ухватившись за такой ответ, Йордон спросил, какое средство считает наиболее важным типичная проектная команда?
«На днях я задал одной из проектных команд такой же вопрос», - ответил один из менеджеров. «Как вы думаете, что они ответили?»
«Какой-нибудь высокопроизводительный компилятор C++? Ассемблер? Или мощное средство отладки для устранения множества ошибок в их коде (хи-хи-хи)?»
«Ничего подобного», — ответил менеджер, игнорируя иронию. «Они ответили: электронная почта. Средний разработчик Microsoft получает сотню сообщений в день; он живет в электронной почте. Уберите электронную почту, и проект умрет».
Эти события происходили до начала эры Internet и World Wide Web, когда сотня почтовых сообщений в день могла потрясти воображение. Однако можно представить себе, что если бы такой же вопрос о «наиболее важном средстве» был задан в 1996 г., ответом могло быть «World Wide Web»; по аналогии, «факс» в 1987 г., «ПК» в 1983 г., «онлайновый терминал» в 1976 г. и «телефон на рабочем столе» в 1964 г.
Очевидно, не следует ожидать, что команда «безнадежного» проекта сможет ограничиться только одним средством. Большинство команд (даже в нормальных проектах) пользуется в своей повседневной работе самыми разнообразными средствами и технологиями. Правда, подчас количество средств становится чересчур большим, технологии — слишком новыми, а иногда нежелательные средства навязываются некомпетентными менеджерами.
Ранее настоятельно рекомендовалось устанавливать приоритеты для пользовательских требований. Такой же подход используется по отношению к средствам и технологии, и его разумно применить в самом начале проекта. Наиболее очевидная причина — экономия средств. Даже если средства хорошо работают и все знакомы с ними, их приобретение может стоить слишком дорого. Кроме того, на их получение может уйти много времени — процесс приобретения их в условиях обычной корпоративной бюрократии может завершиться уже после окончания работы над проектом. Для большинства «безнадежных» проектов следует выбрать небольшое количество критически важных средств и убедить высшее руководство (или соответствующую службу) в необходимости их приобретения.
С другой стороны, предположим, что команда работает в крупной корпорации, имеющей в своем распоряжении сотни различных средств, приобретавшихся в течение ряда лет. Следует ли их все использовать? Конечно, нет! Даже если все они работают, те умственные усилия, которые необходимо затратить, чтобы запомнить, как ими пользоваться, а также дополнительные усилия для обеспечения их совместной работы обычно сводят на нет всю выгоду. Можно провести аналогию с командой альпинистов, которые собираются штурмовать вершину и пытаются решить, какое снаряжение им использовать. Существуют необходимые вещи (палатки, питьевая вода и т.д.); и, если маршрут не слишком сложный, можно взять с собой некоторые новомодные приспособления, о которых написано в альпинистском журнале. Однако, если они собираются штурмовать Эверест, им не обойтись без помощи ослов или носильщиков из местных жителей, иначе они будут не в состоянии тащить на спине по 300 фунтов снаряжения на человека.
Команда «безнадежного» проекта должна самостоятельно, независимо от принятых в организации стандартов, решить, какие средства являются необходимыми, а без каких можно обойтись. Очень важно участникам команды прийти к единому мнению относительно используемых в проекте средств, иначе наступит хаос. Разумеется, это утверждение не следует понимать буквально; оно не означает, что все участники команды должны обязательно использовать один и тот же текстовый процессор для подготовки своих документов, хотя, скорее всего, важен один и тот же компилятор C++. Одна из проблем, связанных с «безнадежными» проектами, заключается в том, что разработчики ПО считают допустимой полную анархию на индивидуальном уровне (например, если им хочется использовать никому не известный компилятор C++, который они переписали с университетского Web-сайта, то они считают это своим неотъемлемым правом). Но это не так: неотъемлемым правом обладает команда, и менеджер проекта должен неуклонно проводить его в жизнь во всех ситуациях, когда несовместимые средства могут привести к значительным разногласиям.
Следовательно, пока участники команды не поработают вместе над несколькими «безнадежными» проектами, они не придут к единому мнению относительно «минимального» набора средств. Определив набор средств, команда выбирает те, которыми следует пользоваться. При этом возникает еще одна проблема — добиться согласия в команде и получить разрешение руководства на приобретение новых средств.
Менеджер проекта должен настаивать на достижении консенсуса; в самом деле, это может быть одним из критериев, используемых менеджером для выбора потенциальных участников команды. То же самое можно сказать относительно процессов, которые обсуждались ранее.
Вот перечень средств, которые рекомендуются для «безнадежных» проектов:
Электронная почта, ПО для групповой работы, средства Internet/Web, видеоконференции и т.д. Так же, как и в эпизоде с Microsoft, эти средства находятся в начале списка. Причина заключается в следующем: электронные средства общения и взаимодействия являются не только более эффективным средством коммуникации, чем записки и факсы, но они также способствуют координации и сотрудничеству. Безразлично, какие именно средства использовать: Microsoft Outlook или Lotus Notes; важно только, чтобы вся команда работала в сети и хранила там общие проектные данные.
Средства прототипирования/быстрой разработки приложений (RAD). Почти все «безнадежные» проекты используют в той или иной степени прототипирование и пошаговую разработку; следовательно, им необходимы соответствующие инструментальные средства. Сегодня не так просто отыскать популярную среду разработки приложений, которая заявляла бы о себе иначе, чем среда RAD. Большинство таких средств обладают визуальным пользовательским интерфейсом, выполненным в стиле «drag and drop», облегчающим и ускоряющим процесс разработки. Важно, чтобы вся команда использовала один и тот же набор средств от одного и того же поставщика. Если часть команды использует среду разработки Java компании Sun, а другие — Microsoft Visual J++, то это явно глупо, хотя и допустимо с точки зрения технологии.
Средства управления конфигурацией/управления версиями. Некоторые полагают, что они должны быть на первом месте в списке. Очевидно, использование средств управления конфигурацией может принести больше пользы, если они будут интегрированы со средствами разработки приложений. Например, SourceSafe от Microsoft может и не быть самым лучшим средством управления версиями ПО, однако тот факт, что оно тесно интегрировано с Visual Basic, является весомым аргументом в его пользу. Аналогично, многие другие средства разработки приложений интегрированы с PVCS или другими подобными средствами управления конфигурацией.
Средства тестирования и отладки. Многие автоматически включают эти средства в «базовый» набор средств разработки приложений, позволяющих создавать, компилировать и выполнять код.
Средства управления проектом (оценка, планирование, PERT/GANTT и т.д.). Обычно их считают средствами менеджера проекта. К этой же категории следует отнести такие средства оценки, как ESTIMACS (Computer Associates), CHECKPOINT (Software Productivity Research) и SLIM (Quantitative Software Management). Они, я считаю, являются важными, поскольку позволяют в ходе выполнения проекта динамически пересматривать планы и сроки.
Наборы повторно используемых компонентов. Если проектная команда знакома с концепцией повторного использования ПО и рассматривает ее как стратегическое оружие, позволяющее достичь высокого уровня продуктивности разработки, тЬ набор повторно используемых компонентов должен быть в списке тех средств, которые необходимо использовать. Это может быть набор компонентов VBX для Visual Basic, компоненты Java компании Sun или библиотека классов 8ТЪдля C++. Разумеется, можно использовать и компоненты, разработанные другими проектными командами в организации. Выбор их обычно зависит от используемого языка программирования, и это еще одна проблема, нуждающаяся в выработке единого подхода со стороны проектной команды.
CASE-средства для анализа и проектирования. Некоторые проектные команды рассматривают CASE-средства как «костыли» для новичков, а другие считают их не менее важными, чем текстовые процессоры. Самая большая проблема, связанная с CASE-средствами, заключается в том, что они поддерживают (а иногда навязывают) определенную методологию, которую проектная команда не понимает и не желает использовать.
Упомянутая проблема CASE-средств, вероятно, представляет собой наиболее очевидный пример трюизма: средства и процессы связаны друг с другом сложным образом. Бессмысленно браться за объектно-ориентированное CASE-средство, поддерживающее анализ, если разработчики никогда не слышали об иерархии классов или диаграммах вариантов использования. Использование такого CASE-средства будет не только бесполезным, но и чрезвычайно обременительным, если проектная команда искренне полагает, что диаграммы классов представляют собой лишенные смысла формы бюрократических документов.
Но ситуация не всегда бывает черно-белой. Например, проектная команда считает, что диаграммы потоков данных полезны, но только как «неформальное» средство моделирования. Таким образом, «гибкое» CASE-средство может рассматриваться как нужное и полезное, в то время как «жесткое» CASE-средство может быть отвергнуто.
Все это означает, что команда «безнадежного» проекта должна в первую очередь нормально воспринимать те процессы и методы, которым она собирается следовать. Кроме того, она должна решить, каким из них надо подчиняться беспрекословно, а каким — следовать духу, но не букве закона. После принятия такого решения можно соответственно выбрать (или отвергнуть) средства и технологию. Таким же образом менеджер проекта может решить использовать какое-либо средство для усиления процесса, необходимость которого все понимают, но на практике следуют ему достаточно небрежно; примеры таких процессов — контроль версий и управление конфигурацией.
Один из величайших мифов, касающихся использования инструментальных средств в любых проектах (и особенно опасных в безнадежных проектах) заключается в отношении к средству как к «серебряной пуле», которая позволит творить чудеса. Разумеется, поиском чудес занимается в основном высшее руководство. Однако даже менеджера проекта могут соблазнить рекламные заявления поставщика, уверяющего, что с помощью его гениальных средств можно в десять раз повысить производительность программирования, тестирования или какой-нибудь другой деятельности.
Помимо проблемы, заключающейся в новизне таких средств и в неумении их использовать, существует более важный момент: средство станет подобным «серебряной пуле» только в том случае, если оно позволит или заставит разработчиков изменить свои процессы. Едва ли кто-нибудь станет возражать против использования усовершенствованных технологий, позволяющих избавляться от рутинных и утомительных процессов. Труднее внедрить новую технологию, требующую введения новых процессов или модификации существующих процессов, к которым привыкли.
Ирония заключается в том, что большинство организаций в своих провалах винит технологию. Они приобретут дорогостоящую библиотеку классов или поменяют свою старую технологию разработки ПО на объектно-ориентированную, исходя из предположения, что объекты и повторное использование — это одно и то же. Обнаружив, что не добились сколько-нибудь ощутимых результатов, они будут винить во всем объектную технологию, библиотеку классов, поставщика и др. Между тем все процессы остались в точности такими же, какими были до внедрения новой технологии. Культура такой организации может быть выражена следующей фразой: «Только бездари пользуются чужим кодом; настоящие программисты, черт возьми, пишут свой!»
С точки зрения работы над «безнадежным» проектом мораль проста: если внедрение новых средств потребует серьезного изменения стандартных процессов команды, то это значительно увеличит риск и, возможно, будет способствовать провалу проекта. Необходимость обучения и освоения практического использования новых средств создает дополнительные проблемы. Однако наиболее серьезной из них является изменение режима работы, который целиком определяется процессом. Это трудно сделать и в нормальных условиях, когда у нас достаточно времени, чтобы относительно безболезненно перейти к новому процессу. Для «безнадежного» проекта такой переход будет просто катастрофическим.
При работе над «безнадежными» проектами некоторые часто хватаются за новые средства и технологии для достижения более высокой продуктивности. При этом возникают два наиболее вероятных риска — технология и обучение. Во многих случаях новое средство даже не является законченным коммерческим продуктом; обычно кто-нибудь из проектной команды переписывает из Интернета бета-версию. Или же данное средство невозможно интегрировать с любыми другими средствами, используемыми проектной командой; поставщик давал на этот счет неопределенные обещания, однако в результате оказалось, что возможности экспорта-импорта изобилуют ошибками. Или, средство никем не поддерживается — оно разработано студентом из Ирака или (что еще хуже) создано в домашних условиях одним из разработчиков ПО, который не видит ничего странного в том, что банк разрабатывает свое собственное CASE-средство, а страховая компания — свою СУБД.
Допустим, что средство является достаточно надежным, а его поставщик пользуется устойчивой репутацией и поддержкой на высоком уровне. В этом случае проблемы будут связаны с освоением, поскольку даже если это средство прежде широко использовалось в организации, никто не воспринимал его как «серебряную пулю», которая сможет чудесным образом спасти проектную команду от гарантированной катастрофы. Иногда можно встретить проектную команду, добивающуюся разрешения использовать какое-либо мощное средство, с которым она уже имела дело в предыдущей работе. Однако это редкое явление. В большинстве случаев никто из участников проектной команды и вообще никто в организации никогда прежде не видел или не использовал подобное средство. Если предположить, что не существует никаких проблем, связанных с данным средством, тогда все, что остается — это обучение и практика.
Как много времени на это потребуется? Очевидно, это зависит от характера и сложности средства, а также от его пользовательского интерфейса, возможностей онлайновой подсказки и др. В лучшем случае разработчики могут самостоятельно разобраться в использовании средства. В такую возможность очень хочется верить менеджеру проекта и разным другим руководителям, поскольку они считают любое обучение потерей времени и отвлечением от работы над проектом. Более реалистичная оценка заключается в том, что на освоение средства потребуется час, день или неделя. Независимо от формы обучения (занятия в классе, чтение книги или просто «игры» со средством), на это все равно потребуется какое-то время.
Однако в результате недельного обучения не получится опытного пользователя, в совершенстве владеющего средством. Это должно быть очевидным, однако нарушает планы высшего руководства, которое склонно возмущаться: «Мы потратили кучу денег на этих высокооплачиваемых преподавателей и напрасно потеряли столько времени в классах, чтобы эти ленивые бездельники-программисты могли научиться кодировать. Теперь мы хотим увидеть реальную отдачу от этого «замечательного» средства, за которое вы так агитировали!» Наверное, в такой наивности высшего руководства нет ничего удивительного, поскольку они сами практически не сталкивались с инструментальными средствами. Однако, к сожалению, приходится наблюдать похожую реакцию со стороны многих менеджеров «безнадежных» проектов, гораздо лучше разбирающихся в технических вопросах.
Если бы внедрение новой технологии не оказывало никакого влияния на процессы, не требуя специального обучения и практики, то можно было бы принять решение, основываясь всего лишь на сопоставлении затрат и выгод. Поскольку инстинкт многих руководителей высокого уровня подсказывает им, что любую проблему можно решить с помощью простого финансового вливания, то существует тенденция к гораздо большему использованию совершенно новых технологий в «безнадежных» проектах, чем в нормальных. Ирония заключается в том, что новое средство может оказаться последней каплей, переполнившей чашу терпения. Таким образом, именно на средство будет возложена ответственность за неудачу проекта.
Итак, нужно использовать любые средства, которые подходят для «безнадежного» проекта, не обращая внимания на то, какими их считает весь остальной мир: современными или устаревшими. Но не следует забывать, что новые средства в «безнадежном» проекте окажут воздействие и на людей, и на процессы. Как сказал 150 лет назад Генри Дэвид Торо, люди становятся орудиями в руках собственных средств.
! Следует запомнить
1. Во многих проектах наиболее серьезные проблемы носят не столько технический характер, сколько политический, социальный, культурный и человеческий.
2. Проекты, выполняющиеся в экстремальных условиях, предъявляют особые требования к используемым методам, средствам и технологиям.