В предыдущем разделе шла речь о том, что организации начинают и/или допускают существование безнадежных проектов по вполне определенным причинам. Мы можем с ними соглашаться или не соглашаться, можем сочувствовать тем, кого постиг неожиданный кризис, но, в конце концов, должны принять их безоговорочно.
Однако это вовсе не означает, что мы как индивидуумы обязаны лично участвовать в безнадежных проектах. В своей книге я в основном исхожу из предположения, что вы будете участвовать в безнадежном проекте, хотя в дальнейшем я советую в определенных обстоятельствах отказаться от участия. И в большинстве случаев это лучше всего сделать в самом начале проекта. Когда вам говорят, что вас решили включить в такой проект в качестве менеджера или технического специалиста, следовало бы ответить: «Благодарю покорно! Я лучше постою в стороне». Если же для вашей внутрикорпоративной культуры такой ответ неприемлем, вы почти всегда оставляете за собой право сказать: «Благодарю покорно! Я лучше уволюсь».
Очевидно, некоторые разработчики и, вероятно, еще в большей степени менеджеры возразят, что такой вариант им практически не подходит. Далее мы вкратце поговорим на эту тему, а сейчас важно отметить, что это одна из нескольких возможных «негативных» причин участия в безнадежном проекте; в этом нет ничего особенно хорошего, но, возможно, альтернативы еще хуже.
С другой стороны, некоторые разработчики (и менеджеры) с радостью соглашаются участвовать в таких проектах; спрашивается, почему же (не считая наивных оптимистов) нормальный здравомыслящий человек добровольно соглашается участвовать в проекте, где ему, скорее всего, придется работать 14 часов в день, 7 дней в неделю и год или два без отпуска?
Наиболее распространенные причины приведены в табл. 1.2, ниже они будут подробно обсуждаться.
Таблица 1.2 Причины участия в безнадежных проектах
Риск высок, но вознаграждение тоже |
Синдром покорителей Эвереста |
Удовольствие «вкалывать» среди других таких же энтузиастов |
Наивность и оптимизм молодости |
Альтернатива - безработица |
Возможность будущей карьеры |
Альтернатива - банкротство или прочие разные бедствия |
Возможность победить бюрократию |
Месть |
Если вы задумываетесь о том, что происходит в вашей организации, нетрудно понять, почему существуют безнадежные проекты. Как отмечает Scott Adams [2]:
Когда я впервые услышал эти истории [о неразумном корпоративном поведении], я пришел в недоумение, однако после тщательного анализа я разработал сложную теорию, объясняющую такое странное поведение. Она заключается в следующем: люди - это идиоты.
Включая меня. Идиоты все, не только люди с низкими интеллектуальными показателями. Единственная разница между нами заключается в том, что мы идиоты по отношению к различным вещам в различное время. Неважно, насколько вы остроумны и находчивы, все равно большую часть дня вы проводите как идиот.
Наверно, слишком тягостно представить себе, что вы идиот, окружены идиотами и руководят вами идиоты. Наверно, вы рассматриваете как оскорбление даже саму возможность такого предположения. На этот случай в табл. 1.1 приведен более детальный список причин, порождающих безнадежные проекты.
Хотя эти причины могут показаться очевидными, они все равно заслуживают обсуждения - поскольку они могут выставить ваш безнадежный проект таким безумным и иррациональным, что в нем абсолютно нет смысла принимать участие. Действительно, даже не имея явных причин, подобных перечисленным в табл. 1, следует серьезно подумать, хочется ли вам следующие несколько месяцев (или лет), участвуя в таком проекте (далее в этой главе мы поговорим на эту тему).
Таблица 1.1. Причины безнадежных проектов
Политика, политика, политика |
Наивные представления маркетинговых служб, высшего руководства, менеджеров проекта и др. |
Наивный оптимизм юности: «Мы сможем сделать это за выходные!» |
Менталитет первопроходцев у неопытных предпринимателей |
Менталитет «Морского Корпуса» (Marine Corps): Настоящие программисты не нуждаются в сне! |
Высокая конкуренция, порожденная глобализацией рынков |
Высокая конкуренция, вызванная появлением новых технологий |
Сильное воздействие неожиданных правительственных решений |
Неожиданный и/или незапланированный кризис - например, ваш поставщик оборудования/ПО только что обанкротился, или три ваших лучших программиста только что умерли от бубонной чумы |
Многие разработчики ПО клянутся, что не дадут втянуть себя в политику, поскольку они сделали вывод, что политические игры - это не их дело, и, кроме того, они считают все связанное с политикой отвратительным. Увы, уйти от политики невозможно; как только в какое-либо совместное предприятие войдут двое или более человек, тут же появится политика.
Однако, когда в большом, сложном проекте политика начинает доминировать, он скорее всего выродится в безнадежный проект. Вспомните мое определение безнадежного проекта: сроки, штат, бюджет или ресурсы на 50-100% меньше, чем следует. Откуда берутся эти ограничения? Как будет видно из дальнейшего обсуждения, существует много возможных объяснений, тем не менее, в большинстве случаев ответ весьма прост: «Политика». Это может быть война между двумя менеджерами в вашей организации, либо проект может быть намеренно провален в качестве мести менеджеру, который наступил не на тот мозоль, да еще в неподходящее время. Количество таких ситуаций бесконечно.
Вряд ли найдешь таких политиков, которые прояснили бы вам реальное положение вещей; тем не менее, если вы технический специалист, не будет лишним спросить вашего менеджера, не является ли весь проект политической спекуляцией. Даже если политика вам не нравится, или вы в ней новичок, внимательно выслушайте ответ менеджера. Вы не глупы и не настолько наивны. Если у вас есть шестое чувство, что в проекте доминируют малоприятные политические игры, вероятно, так оно и есть; и, если ваш непосредственный начальник отделывается односложным или неопределенным ответом, вы должны сами сделать для себя выводы.
Что если ваш менеджер открыто соглашается с вами? Что если он отвечает: «Да, на самом деле весь этот проект не более, чем ожесточенная схватка между вице-президентом Смитом и вице-президентом Джонсом»? Если это так, почему же тогда сам менеджер участвует в этом проекте? Для этого, как сказано ниже в подразд. 1.4, может быть множество причин; но причины, заставляющие менеджера участвовать в проекте, совсем не обязательно должны заставлять и вас. Неизбежное зло политики не означает, что вы должны немедленно бросить проект или совсем уволиться с работы, однако, что бы там не происходило в проекте, следует отстаивать свои собственные приоритеты, цели и моральные ценности - особенно потому, что скорее всего многие принимаемые решения (начиная с решений по плану/бюджету/ресурсам, превративших проект в безнадежный с самого начала) не соответствуют интересам пользователей и организации в целом. Если проект все же увенчается успехом, то это скорее всего либо счастливая случайность, либо означает, что намеченный козел отпущения (например, ваш непосредственный руководитель или менеджер более высокого уровня) оказался более хитрым политиком, чем считали его противники.
В дискуссии по поводу прототипирования, контрольных точек и мини-этапов неявно подразумевалось, что очередные результаты, получаемые проектной командой, появляются через интервалы, измеряемые месяцами или неделями. К этому приучил большинство из нас прежний опыт «нормальных» проектов, и это согласуется с обычным темпом деловой жизни – например, еженедельными совещаниями персонала, ежемесячными отчетами о состоянии работ, ежеквартальными презентациями для высшего руководства и т.д.
Однако, безнадежные проекты, как мы могли убедиться в данной книге, обычно нуждаются в другом подходе. Когда такой проект приходит к прототипированию и пошаговой разработке, обычно имеет смысл организовать всю работу над проектом на основе принципа «ежедневной сборки проекта». Под этим я понимаю следующее: компиляция, сборка, установка и тестирование всей совокупности разработанного командой кода должны выполняться каждый день, как если бы этот день был последним перед завершением проекта, и на следующее утро было бы необходимо сдать законченную систему пользователям.
Разумеется, реалии таковы, что приступить к ежедневной сборке проекта с самого первого дня невозможно. Правда, уже на второй день проекта можно написать подпрограмму типа «Hello, World», и трудно сегодня удивить кого-то совершенно новыми технологиями (в частности, многие из проектов, использующих Java, во время написания этой книги уже находились в процессе разработки). Однако, существуют определенные требования, которым должна удовлетворять версия прототипа системы при первой «официальной» демонстрации: помимо того, что она включает необходимую совокупность компонентов, процедур или модулей и, по крайней мере, несколько сотен, а может быть и тысяч строк кода, она должна выполнять реальный ввод данных, производить реальную обработку или вычисления и формировать реальный выход. Именно с этого момента следует начинать ежедневную сборку проекта и формировать каждый день новую (желательно улучшенную) версию системы.
Почему это так важно? Как любит говорить Jim McCarthy, менеджер продукта Microsoft Visual C++ и автор книги Dynamics of Software Development [4]: «Ежедневная сборка - это биение сердца проекта.
Она дает знать, что жизнь продолжается». Такая стратегия может быть приоритетом номер один для менеджера проекта. Если в течение недели каждый крутит свою прялку, и никто не соберется с духом, чтобы сообщить менеджеру проекта, что разрабатываемое ими клиент-серверное приложение никак не хочет правильно взаимодействовать с новой замечательной объектно-ориентированной базой данных, то в результате проект может безнадежно отстать от графика. До тех пор, пока менеджер судит о состоянии проекта по устным отчетам, запискам или диаграммам потоков данных, будет слишком легко перепутать движение с прогрессом и усилия с результатами. Однако, если менеджер проекта настаивает на ежедневной физической демонстрации результатов, будет гораздо труднее скрыть какие-либо трудности, которые в конечном счете могут способствовать провалу проекта.
Некоторые менеджеры проекта будут кивать головами и подтверждать, что они всегда именно так и поступают, однако большинство согласится, что они довольствуются еженедельным, ежемесячным или полугодовым контролем реализации системы. В то время как вряд ли кто-нибудь вправе претендовать на «изобретение» данного подхода, многие знают, что он впервые стал популярным во время разработки операционной системы Windows NT (интересную дискуссию на эту тему можно обнаружить в описании данного проекта, приведенном в [5]). Любопытно также отметить, что при разработке Windows 95 также использовался принцип ежедневной сборки проекта; заключительная бета-версия перед выпуском конечного продукта была реализована в августе 1995 года и называлась «Проект 951».
Важно осознавать, что подобный подход становится неотъемлемой составляющей процесса разработки системы, которому следует проектная команда. Представьте себе, каково быть участником команды, которая должна демонстрировать работающую версию программного обеспечения 951 день подряд! (Правда, если быть честным, я не уверен, что команда Microsoft действительно свято соблюдала такой порядок каждый день. Возможно также, что формирование более чем одной версии укладывалось в 24-часовой промежуток, и возможно, команда могла день или два отдохнуть в этом марафоне.) Кроме того, чтобы быть эффективным, процесс ежедневного завершения проекта должен быть автоматизированным и должен выполняться ночью без чьего-либо участия, когда все программисты отправились домой спать (или влезли на свои рабочие столы и забрались в спальные мешки!).
Такой подход подразумевает наличие автоматизированного управления конфигурацией ПО и механизмов контроля исходных кодов, а также разнообразных «скриптов» для выполнения компиляции и сборки приложений. Но что еще более важно, он подразумевает наличие системы автоматизированного тестирования, которая может работать всю ночь, выполняя гору тестов для проверки работоспособности системы. Таким образом, чтобы реализовать на практике принцип ежедневной сборки проекта, необходимо иметь в своем распоряжении адекватный набор средств и технологий; мы еще вернемся к этому вопросу в главе 6.
Действие данного принципа может также дополнительно усилить ряд следующих мер:
· Менеджеру проекта следует переместить свой офис непосредственно к месту разработки и тестирования системы, как только начнется процесс ежедневной сборки проекта. Так поступил Dave Cutler в Microsoft. Рассказывают страшные истории, как он метал громы и молнии, когда появлялся в офисе и обнаруживал, что сборка очередной версии в полночь накрылась. Будет менеджер проявлять свой гнев или нет, важно, чтобы он был почти всегда
на виду и непосредственно
участвовал в ежедневном процессе, а не уподоблялся генералу, который получает ежедневные сводки с поля боя, находясь за много миль от него в тылу.
· Поскольку вполне вероятно, что ночной процесс ежедневного формирования версии потребует минимального человеческого вмешательства, будет полезным установить следующий порядок: любой программист, допустивший ошибку в коде, которая привела к аварийному завершению ежедневной сборки, удостаивается высокой чести наблюдать за очередной сборкой, пока не появится следующая жертва. Разумеется, такой порядок имеет как плюсы, так и минусы, но по крайней мере благодаря ему команда гораздо «ближе» знакомится с принципом ежедневной сборки проекта.
· Поручите одному из программистов, который обычно приходит в офис рано утром, проверять успешность завершения ежедневной сборки и вывешивать результаты на видное место.Если ни у кого нет желания или возможности появляться в офисе рано утром, наймите студента колледжа. Одна компания велела студенту поднимать над офисом флаг, чтобы таким образом предупреждать сотрудников, какой день ожидается: плохой или хороший. Зеленый флаг означал успешное завершение процесса ежедневной сборки, а красный - аварийное завершение.
Открытые и честные взаимоотношения являются важной составляющей процесса формирования эффективной команды. Подбор исполнителей, обладающих психологической совместимостью друг с другом – другая ключевая составляющая. Как отмечалось выше, крайне важно, чтобы менеджер проекта имел свободу действий при выборе участников команды, а также может оказаться полезным использовать методы наподобие тестов оценки личности Бриггса-Мейерса, чтобы попытаться заранее оценить способность участников команды к взаимодействию друг с другом.
Еще одна составляющая заключается в концепции командных ролей. Многие менеджеры проекта сосредотачиваются на чисто «технических» ролях, таких, как проектировщики баз данных, специалисты по сетям, эксперты по пользовательскому интерфейсу и т.д. Хотя все они важны, не менее важно подумать о ролях «психологического» плана, которые могут играть один или более участников команды. Эти роли присутствуют и в «нормальных» проектах, однако в безнадежных они приобретают особую важность. Rob Thomsett в [4] определил восемь ключевых ролей в проекте следующим образом:
· Председатель (chairman) – выбирает путь, по которому команда движется вперед к общим целям, обеспечивая наилучшее использование ее ресурсов; умеет обнаружить сильные и слабые стороны команды и обеспечить наилучшее использование потенциала каждого участника команды. Можно подумать, что таким человеком является, как правило, официальный руководитель проекта; однако, в самоуправляемых командах им может быть любой человек.
· Оформитель (shaper) – придает законченную форму усилиям команды, направляет внимание и пытается придать определенные рамки групповым обсуждениям и результатам совместной деятельности. Такой человек может иметь официальную должность «архитектора» или «ведущего проектировщика», но главное то, что эта роль «воображаемая». В безнадежном проекте особенно важно иметь единое и четкое представление о проблеме и ее возможном решении.
· Генератор идей (plant) – выдвигает новые идеи и стратегии, уделяя особое внимание главным проблемам, занимается поиском возможных новых подходов к решению проблем, с которыми сталкивается группа.
Для такой роли мне больше нравится название «провокатор» – человек, который пытается внедрять в команде радикальные идеи и технологии, искать новые решения технических задач.
· Критик (monitor-evaluator) – анализирует проблемы с прагматической точки зрения, оценивает идеи и предложения таким образом, чтобы команда могла принять наиболее сбалансированные решения. В большинстве случаев такой человек поступает как «скептик», уравновешивая оптимистические предложения оформителя и генератора идей. Критик хорошо знает, что новые технологии отнюдь не всегда работают, обещания поставщиков относительно возможностей новых средств и языков программирования иногда не сбываются, и все может пойти не так, как было задумано.
· Рабочая пчелка (company worker) – превращает планы и концепции в практические рабочие процедуры, систематически и эффективно выполняет принятые планы. Другими словами, в то время как оформитель придает законченную форму крупным технологическим решениям, генератор идей предлагает радикальные новые решения, а критик занимается поиском изъянов и недостатков в этих предложениях, рабочая пчелка – это тот человек, который работает, не привлекая внимания, и выдает «на гора» тонны кода. Очевидно, любой безнадежный проект нуждается по крайней мере в паре таких пчелок, но сами по себе они не способны принести успех проекту, поскольку не обладают необходимой широтой кругозора.
· Опора команды (team worker) – поддерживает силу духа в участниках проекта, оказывает им помощь в трудных положениях, пытается улучшить взаимоотношения между ними и в целом способствует поднятию командного духа. Другими словами, такой человек выполняет в команде роль «дипломата». Им может быть и менеджер проекта, однако им может быть также любой из участников команды, который несколько более, по сравнению с другими, восприимчив к ущемлению прав личности и более внимателен к чувствам участников команды. Как правило, эта роль также особенно важна в безнадежных проектах, поскольку команда зачастую испытывает сильный стресс, и по меньшей мере один или два ее участника начинают вести себя как равнодушные ко всему «супермены».
· Добытчик (resource investigator) – обнаруживает и сообщает о новых идеях, разработках и ресурсах, имеющихся за пределами проектной группы, налаживает внешние контакты, которые могут оказаться полезными для команды, и проводит все последующие переговоры. Я предпочитаю называть такого человека «уборщиком мусора», поскольку он всегда знает, где отыскать бесхозный ПК, свободный конференцзал, дополнительный рабочий стол или почти что любой другой ресурс, в котором нуждается команда. Такие ресурсы могут быть добыты по официальным каналам, а могут и нет; но даже если их можно достать «нормальным» способом, это нередко требует заполнения 17 форм в трех экземплярах, после чего приходится шесть месяцев ждать выполнения всех бюрократических процедур. Безнадежный проект не может ждать так долго и не может позволить, чтобы вся работа застопорилась из-за того, что какой-то помощник вице-президента из зависти не разрешает воспользоваться единственным в организации свободным конференцзалом. Командный добытчик имеет, как правило, много друзей и связей в своей организации, с помощью которых можно выпросить или одолжить необходимые ресурсы. Самое главное во всем этом то, что добытчик обожает свою деятельность.
· Завершающий (completer) – поддерживает в команде стремление к настойчивости в достижении цели, активно стремится отыскать работу, которая требует повышенного внимания, и старается, насколько это возможно, избавить команду от ошибок, связанных как с деятельностью, так и с бездеятельностью. Такой человек обычно играет доминирующую роль во время тестирования системы на завершающей фазе жизненного цикла проекта, однако его роль на более ранних стадиях тоже важна. Команде необходимо время от времени – а еще лучше каждый день! – напоминать, что они не делают себе карьеру на всю жизнь, а всего лишь участвуют в проекте с жесткими сроками и промежуточными контрольными точками, которые необходимо достигать вовремя, чтобы не провалить проект.
К сожалению, даже наличие исполнителей на каждую роль и психологическая совместимость не гарантируют, что команда будет представлять собой единое целое.
Как отмечено в [1]:
Вряд ли вам удастся заставить команду стать сплоченной. Вы можете на это надеяться, можете скрещивать пальцы, можете предпринимать все возможное, но превратить команду в единое целое не в вашей власти. Этот процесс слишком хрупкий, чтобы им можно было командовать.
Если процесс формирования такой команды протекает успешно, обычно это бывает заметно по некоторым внешним признакам. Как замечают DeMarco и Lister, в преуспевающих командах обычно присутствует сильное ощущение общности интересов и гордости за свою команду, а также (по крайней мере, в безнадежных проектах типа «невыполнимая миссия») чувство, что они в состоянии хорошо выполнять свою работу и получать от этого удовольствие. С другой стороны, если организация не в состоянии обеспечить создание такой сплоченной команды, это может
привести к тому, что DeMarco и Lister называют «командным самоубийством» (teamcide) - т.е., принимается сознательное или бессознательное решение плыть по течению и не совершать никаких действий для создания сплоченной и целостной команды. Такая ситуация обычно порождается следующими причинами:
· Оборонительное руководство - не доверяющее проектной команде. Отметим, что при этом для команды становится очень важным наличие «защитника», как обсуждалось в главе 2.
· Бюрократия - изобилие бумажной работы. Если команда обладает хоть каким-то здравым смыслом, она просто откажется заниматься бумажной работой или невнятно пообещает вернуться к ней после окончания проекта.
· Физическое разобщение участников команды - (например, по различным зданиям, городам или странам) - конечно, электронная почта и средства групповой работы могут частично решить эту проблему, однако этого явно недостаточно для поддержки командного духа, который столь необходим для успеха безнадежного проекта.
· Фрагментация рабочего времени участников проекта - особенно в ситуациях, когда участники команды часть своего времени официально заняты в безнадежном проекте, а в остальное время занимаются сопровождением старой системы или организацией рождественской вечеринки в компании.
Трудно вообразить себе, что в безнадежных проектах может происходить такое, однако это на самом деле случается в больших бюрократических организациях.
· Снижение качества продукта - хотя команда может быть готова к тому, чтобы допустить некоторое снижение уровня качества с целью своевременной разработки «достаточно хорошего» ПО, обычно существует некоторая нижняя грань, которую они откажутся перейти. Понятие качества может подразумевать наличие дефектов (ошибок), отсутствующие функции, примитивный пользовательский интерфейс или некачественную документацию.
· Нереальные сроки - настолько жесткие сроки, что команда абсолютно не верит в возможность их выполнения. Такая разновидность «командного самоубийства» обычно превращает проект «невыполнимая миссия» в «самоубийственный» проект.
· Произвол руководства - роспуск проектной команды после завершения проекта. Как было отмечено выше, некоторые команды по завершении проекта приходят к выводу, что он невыразимо скучен, а пользователи, для которых они разрабатывали свои программы - неблагодарные деревенщины; таким образом, единственное удовлетворение, полученное от проекта, заключается в удовольствии от совместной работы в одной команде с конкретными людьми. В самом деле, это удовлетворение может быть настолько большим, что участники команды выражают надежду на перспективу продолжения совместной работы в будущих проектах. Но на их беду тот командный дух, который помог им добиться успеха, зачастую воспринимается руководством как угроза для своего благополучия, поэтому роспуск такой команды после завершения проекта является обычным делом. Такая перспектива, в свою очередь, является настолько деморализующей, что команда может распасться еще до окончания проекта.
Последнее, что следует сказать относительно формирования сплоченной команды: даже если удается это сделать, то никак не в самый первый день проекта. Типичная команда в процессе своей эволюции проходит четыре стадии, которые также относятся к процессу достижения понимания и поиску общего решения прикладной проблемы:
* Формирование: участники команды определяют цели, роли и направление работы.
* Утряска: команда устанавливает правила и процедуры принятия решений и, как правило, пересматривает роли и ответственность.
* Нормирование: вырабатываются процедуры, стандарты и критерии.
* Выполнение: команда начинает функционировать как целое.
В идеальном случае команда оказывается уже прошедшей первые две стадии еще до начала проекта - поскольку участники команды работали вместе в предыдущих проектах. Тем не менее, все проекты разные, и в каждой проектной команде обычно имеются один или два новых человека, присутствие которых повлечет за собой некоторое «формирование» и «утряску». Но независимо от того, сколько времени потребуется на весь процесс - день, неделя или месяц - он все равно произойдет; если это окажется возможным, менеджеру проекта следует постараться как можно больше ввести команду в курс дела еще до «официального» начала проекта, с тем, чтобы к этому моменту уже оказаться в стадии «выполнения».
Важно также не забывать, что даже сплоченная команда может развалиться под воздействием тех стрессов, которые они испытывают в безнадежном проекте. В своем письме ко мне Dale Emery рекомендует, чтобы менеджер проекта внимательно следил за процессами, происходящими в команде:
Уделяйте внимание взаимоотношениям, складывающимся в команде, и не жалейте усилий на поддержку готовности людей к совместной сверхурочной работе. Давление, которое испытывают участники безнадежного проекта, может превратить небольшие недоразумения в большие конфликты. Периодическое «измерение температуры» в группе может помочь вам и команде справляться с проблемами во взаимоотношениях, когда они еще находятся в самом зародыше.
В худшем случае может случиться, что команда так и не пройдет первые две стадии, или, иначе говоря, встанет на путь «командного самоубийства», не сумев справиться с перечисленными выше проблемами. Если через какое-то время менеджер проекта (или кто-нибудь из более высокого руководства) обнаружит, что так оно и произошло, может оказаться слишком поздно формировать новую команду.Се ля ви.
Как было отмечено выше, некоторые безнадежные проекты хватаются за новые средства и технологии, как за панацею для достижения гораздо более высокой продуктивности работы. Предположим на минуту, что мы нашли способ разрешить культурные и политические проблемы, связанные с изменением процессов. О чем же еще необходимо побеспокоиться?
Два наиболее вероятных риска - технология и обучение. Во многих случаях новое средство даже не является законченным коммерческим продуктом; обычно кто-нибудь из проектной команды переписывает из Internet бета-версию. Или же, данное средство невозможно интегрировать с любыми другими средствами, используемыми проектной командой; поставщик давал на этот счет неопределенные обещания, однако в результате оказалось, что возможности экспорта-импорта изобилуют ошибками. Или, средство никем не поддерживается - оно разработано студентом из Узбекистана или (что еще хуже!) создано в домашних условиях одним из разработчиков ПО, не видящим ничего странного в том, что банк разрабатывает свое собственное CASE-средство, а страховая компания - свою СУБД.
Допустим, что средство является достаточно надежным, а его поставщик обладает устойчивой репутацией и обеспечивает поддержку на высоком уровне. В этом случае проблемы будут связаны с освоением, поскольку даже если это средство прежде широко использовалось в организации, никто не воспринимал его как «серебряную пулю», которая сможет чудесным образом спасти проектную команду от гарантированной катастрофы. Иногда можно видеть проектную команду, добивающуюся разрешения использовать какое-либо мощное средство, с которым они уже имели дело в предыдущей работе - однако, это достаточно редкое явление. В большинстве случаев никто из участников проектной команды и вообще никто в организации никогда прежде не видел или не использовал это средство.
Как отмечалось раньше, любое нетривиальное средство обычно предъявляет жесткие требования к соответствующим процессам; таким образом, новое средство обычно подразумевает новый процесс.
Хотя такая зависимость должна быть очевидной, тем более поразительно, насколько часто представители поставщика, занимающиеся обучением, пробегают пятидневный семинар по использованию средства и только после этого обнаруживают, что сотрудники, обучающиеся на курсах (руководители которых уже впали в панику по поводу пятидневного отставания от плана из-за их обучения), абсолютно ничего не понимают в процессах, поддерживаемых данным средством. Чрезвычайно неприятно, например, провести два дня, объясняя лишенному какого-либо энтузиазма студенту, как рисовать ER-диаграммы, и затем услышать от него вопрос: «Между прочим, а что такое сущность? Поскольку я собираюсь программировать все на С++, зачем мне вся эта чепуха?»
Предположим, однако, что участники команды разбираются в процессах, поддерживаемых (или автоматизируемых) данным средством и готовы с энтузиазмом использовать его в практической работе; правда, мой 20-летний опыт преподавания структурных и объектно-ориентированных методов говорит о том, что такое предположение наивно, и бессмысленно продолжать дальше обсуждение этой проблемы. Итак, если мы предположим, что не существует технических проблем, связанных с данным средством, и если предположим, что соответствующие процессы также не вызывают никаких проблем, тогда все, что остается - это обучение и практика, связанные с самим средством.
Как много времени на это потребуется? Очевидно, это зависит от характера и сложности средства, а также от его пользовательского интерфейса, возможностей онлайновой подсказки и др. В лучшем случае разработчики могут самостоятельно разобраться, как использовать средство, без какого-либо формального обучения; в такую возможность ужасно хочется верить менеджеру проекта и разным другим руководителям, поскольку они считают любое обучение потерей времени и отвлечением от «реальной работы» над проектом. Более реалистичная оценка заключается в том, что на освоение средства потребуется час, день или неделя. Независимо от формы (занятия в классе, чтение книги или просто «игры» со средством), на это все равно потребуется какое-то время.
Тем не менее, в результате обучения мы не
получим опытного пользователя в совершенстве владеющего средством. Обучение не является двоичным феноменом: к концу недельного обучения в классе участники проектной команды не перейдут из состояния полного непонимания в состояние высшего мастерства владения средством. Это должно быть очевидным, однако нарушает планы высшего руководства, которые склонны ворчать и возмущаться: «Хорошо, мы потратили кучу денег на этих высокооплачиваемых преподавателей и напрасно потеряли столько времени в классах, чтобы эти ленивые бездельники-программисты могли научиться кодировать. Теперь мы хотим увидеть реальную отдачу от этого «замечательного» средства, за которое вы так агитировали!» Наверное, в такой наивности высшего руководства нет ничего удивительного, поскольку они сами практически не сталкивались с инструментальными средствами; однако, к сожалению, мне приходилось наблюдать похожую реакцию со стороны многих менеджеров безнадежных проектов, гораздо лучше разбирающихся в технических вопросах.
В замечательной статье [1] мой коллега Mellir Page-Jones утверждает, что в разработке ПО существует семь ступеней мастерства; его статья сосредоточена в основном на методологиях, но я думаю, что она в такой же степени применима к средствам и технологиям. К списку, приведенному ниже, я добавил свои собственные оценки, касающиеся времени достижения разработчиком средней квалификации различных ступеней мастерства в предположении, что средство или технология обладают средней сложностью:
Таблица 6.1 Семь ступеней мастерства в разработке ПО
1. Наивный новичок |
Никогда не слышал о технологии Х (очевидно, для этого не требуется никакого времени). |
2. Осведомленный разработчик |
Прочел статью о технологии Х (в большинстве случаев разработчику ПО достаточно одного часа, чтобы разобраться в общих чертах и высказать свое мнение о преимуществах и недостатках средства, даже если он никогда его не видел или не использовал). |
3. Начинающий разработчик |
Посетил пятидневный семинар (неделя, возможно, сжатая до двух дней ввиду того прессинга, под которым находится безнадежный проект. Следует отметить, что при этом разработчик, скорее всего, успел всего лишь поработать с компьютерными руководствами, предоставленными поставщиком, или пробежаться по небольшим примерам, иллюстрирующим возможности средства. Ему не пришлось столкнуться с какими-либо проблемами и недостатками средства, у него не было возможности, каким образом можно масштабировать средство (если это вообще возможно) для больших и сложных проектов; он не пытался интегрировать средство с большинством остальных средств в данной среде). |
4. Практикующий разработчик |
Готов использовать технологию Х в реальном проекте (по-видимому, достаточно месяца, чтобы в основном постичь все нюансы использования средства и быть вполне готовым к его использованию в «реальном» проекте). |
5. Квалифицированный разработчик |
Постоянно использует технологию Х в своей работе и очень недоволен, если по какой-то причине лишается этой возможности (для достижения такого уровня обычно требуется 6-12 месяцев, и если средство действительно подобно «серебряной пуле», то разработчик превращается в проповедника и пытается всеми способами убедить каждого, что это средство - самое замечательное в мире). |
6. Мастер |
Усвоил все детали технологии Х; знает, как обходить ее правила (на это требуется два или три года, это также означает, что разработчик прошел через две или три новые реализации продукта, познакомился со всеми пользовательскими сообществами в Internet, знает все отсутствующие в справочниках номера телефонов специалистов по технической поддержке в организации поставщика). |
7. Эксперт |
Пишет книги, выступает с докладами на конференциях, ищет способ распространить технологию Х на другие галактики (Page-Jones в своей статье говорит о методологиях, поэтому не совсем очевидно, что это применимо по отношению к средствам и технологии). |
Наилучший пример данной ситуации - это работа в начинающей компании, которая обсуждалась в подразд. 1.3.4. Если вы заверите участников проекта, что его успех принесет компании всеобщую известность, а их самих сделает миллионерами, то они с радостью будут работать до изнеможения. Конечно, они могут отдавать себе отчет в рискованности этой затеи, но, поскольку многие верят, что они всемогущи и бессмертны, они не обратят особого внимания на риск.
В самом деле, если принимать во внимание влияние западной культуры (особенно в США), то вовсе не удивительно наблюдать, как молодые программисты готовы добровольно участвовать в безнадежных проектах. Мы не устаем повторять, что успех кинозвезд, рок-певцов, выдающихся спортсменов и олимпийских чемпионов, а также лидеров в софтверном бизнесе, объясняется их колоссальной энергией, огромной работоспособностью и готовностью принести свою личную жизнь в жертву успеху. Мы никогда не слышали о том, чтобы успех могли принести хитрость и двуличность, сомнительные сделки и противозаконная деятельность. И нам не часто приходится слышать, что удачу приносит умение оказаться в нужном месте в нужное время. Например, Билл Гейтс, определенно, представляет собой книжный образ удачливого бизнесмена; однако, если бы группа руководителей IBM не появилась бы в Сиэттле, чтобы взглянуть на операционную систему для ПК, и если бы Гейтс не оказался под рукой в то время, как IBM не смогла дождаться результата от своего первоначального подрядчика, кто знает, где была бы Microsoft сегодня?
И еще один момент: мы не слишком много знаем о реальных последствиях тех «жертв», которые обычно требует безнадежный проект - жертв, связанных с физическим и психическим здоровьем, человеческими взаимоотношениями. Все это кажется неважным для 22-летнего специалиста и для необщительных интровертов, которые полностью поглощены работой на компьютерах. С другой стороны, несколько удивляет, что среди 40- и 50-летних тоже оказываются добровольные участники безнадежных проектов; ведь они не только знают, что большинство таких проектов обречено на провал, но и убедились (на своем же горьком опыте!), что бессмысленно жертвовать своей семейной жизнью и хорошими отношениями с детьми.
Некоторые менеджеры, прочтя предыдущий раздел данной главы, могут высказать недовольство: «Вот здорово! Это выглядит гораздо более формальным, чем все, что мы когда-либо делали!» Когда мне приходилось сталкиваться с такой реакцией в некоторых консалтинговых проектах, это просто ставило меня в тупик. С одной стороны, я уверен, что документирование, определение приоритетов и управление требованиями просто необходимы (независимо от того, какие средства и методы для этого используются); с другой стороны, я опасаюсь следующего: когда проектной команде, и без того заваленной работой выше головы, навязывается совершенно новый и незнакомый процесс, то этот процесс - например, управление требованиями - может оказаться последней каплей, переполнившей чашу терпения.
В самом деле, у меня нет для этой дилеммы другого решения, кроме как надеяться, что проектная команда все же сможет справиться с одной новой идеей среди прочих своих средств и процессов. Однако, меня охватывает гораздо большее беспокойство, когда я вижу команды, которые предпринимают свой первый безнадежный проект с решением (или, что более вероятно, с указанием, навязанным им блюстителями методологии), обязывающим их использовать формальные процессы, например, те, которые регламентируются SEI-CMM или ISO-9000. Формальные процессы - это великая вещь, если вы хорошо знаете, что делаете, и если вы уже использовали их прежде. Однако, реальность такова, что такие формальные процессы, как правило, ранее вообще не использовались в организации, и безнадежный проект представляет собой пилотный проект для апробации структурного анализа или ISO-9000.
Какое безумие! Это действительно
последняя капля, которая переполнит чашу терпения; в конце концов типичный безнадежный проект пытается выполнить то, что раньше никогда не делалось, и (несмотря на мои предостережения в главе 4) команда нередко состоит из людей, которые никогда раньше не работали вместе. Так мало того, они еще вынуждены осваивать использование незнакомой методологии или процесса, не будучи уверенными в том, что это им необходимо в первую очередь, и, напротив, будучи убежденными, что это только затормозит их работу.
Чему же тогда удивляются блюстители методологии, когда они в подобных обстоятельствах сталкиваются с сопротивлением? Консультант Doug Scott недавно привел мне пример такой ситуации:
В одном проекте, насколько мне известно, потребовался диаграммер для ERD, и они приобрели Excelerator. Обнаружив, что он поддерживает методологию SSADM, они внедрили ее без какого-либо обучения персонала, после чего обнаружили, что темп работы на проектом значительно снизился (фактически, работа просто остановилась), в то время как каждый был занят чтением руководств, освоением средств и решением проблемы, что делать дальше (или переделывать то, что было сделано в «неправильном» порядке). Почти идеальный сценарий для тех, кто наблюдает за безнадежными проектами.
Чтобы достичь успеха, проектная команда должна придти к соглашению, какие процессы будут формализованы - например, контроль исходного кода, управление изменениями и (хорошо бы) управление требованиями - и какие будут выполняться на полностью неформальной основе (например, проектирование пользовательского интерфейса). Бессмысленно навязывать какой-либо процесс в обязательном порядке, если никто не собирается ему следовать. Блюстители методологии просто зря теряют время, пытаясь сделать это, а в результате, что гораздо хуже, может напрасно потерять время проектная команда (во многих случаях эти деятели не совершают ничего полезного, кроме суеты вокруг департамента информационных технологий и надоедания и без того уставшей от всего проектной команде).
Это означает, что менеджер безнадежного проекта должен безоговорочно настаивать на процессах, которые он считает принципиально важными - например: «Каждый, кто посмеет внести изменения в исходный код, минуя процесс управления изменениями, будет немедленно уволен!» Или проектная команда должна сама сознательно пойти на внедрение процесса, понимая, что это позволит сократить затраты. Такое может скорее произойти в том случае, если участники команды ранее уже работали вместе и приобрели общий опыт использования различных процессов создания ПО; и наоборот, это маловероятно, если только один из участников команды встанет и скажет: «Я глубоко уверен, что структурный анализ является критически важным для успеха нашего проекта», в то время как другие и понятия не имеют, о чем это он говорит.
Еще одно утверждение, следующее из этого правила: попытка внедрить в безнадежном проекте новый, незнакомый процесс может закончиться катастрофически, даже если команда верит, что он может помочь в работе. Проблемы с освоением, неизбежная путаница и споры по поводу деталей процесса обычно сводят на нет все выгоды.
Это означает, что такие формальные подходы, как SEI-CMM, ISO-9000 или внедрение новых методологий анализа/проектирования должны иметь место где-нибудь за пределами безнадежного проекта. Внедрение таких процессов имеет смысл как часть долговременной корпоративной стратегии, и должно начинаться с выполнения пилотного проекта (который не должен быть безнадежным проектом), сопровождаясь организацией необходимого обучения.
Если все это уже сделано, и если все другие разработки ПО в организации уже выполняются на третьем уровне SEI-CMM, то интересно выяснить, следует ли также использовать такие процессы в безнадежном проекте. Как однажды заметил Watts Humprey на конференции в докладе по поводу SEI-CMM: «Если процесс нельзя использовать в критических условиях, его вообще не следует использовать».
Я не уверен, что многие согласятся с этим утверждением, особенно если безнадежный проект рассматривать как единственное в жизни исключение из правил. Если это в самом деле так, то, возможно, имеет смысл отказаться от формальных процессов и предоставить проектной команде возможность использовать любые методы, которые она сочтет приемлемыми. Однако не забывайте при этом мое утверждение, высказанное в главе 1: безнадежные проекты становятся нормой, а не исключением. Если это так, то официально принятые в организации процессы следует, при необходимости, усовершенствовать, чтобы сделать их пригодными для использования в безнадежном проекте. Тогда и только тогда утверждение Humprey будет иметь смысл.
Между прочим, если вы в самом деле столкнулись с потребностью усовершенствовать сложившуюся практику работы команды безнадежного проекта, я рекомендую обратиться к методологии PSP (Personal Software Process), автором которой является Watts Humprey.Ее основные положения изложены в моей книге «Rise and Resurrection of the American Programmer. Можно также прочесть книгу [2], хотя я честно предупреждаю: в ней 789 страниц.
Как было отмечено ранее, одной из причин безнадежных проектов, связанной с глобализацией рынков, являются правительственные решения, открывающие ранее закрытые сектора рынка, снижающие тарифы и ликвидирующие импортные квоты. Но это только один пример действий властей, которые могут породить безнадежные проекты. Два других очевидных примера - ликвидация государственного управления отраслями промышленности и приватизация государственных учреждений. В самом деле, многие безнадежные проекты, имеющие место во всем мире сегодня - это прямое следствие ликвидации государственного управления индустрией телекоммуникаций, финансовых услуг, авиационной промышленностью и т.д.
С другой стороны, можно также привести много примеров повышения степени регулирования со стороны властей - особенно в области налогообложения, аудита, рынков ценных бумаг, охраны окружающей среды и т.д. В любом демократическом обществе о таких решениях должно быть известно задолго до их принятия, поскольку законодательные органы обсуждают их в деталях в течение нескольких месяцев или даже лет, пока не примут в окончательном виде. Однако, зачастую, конкретные детали решений могут оставаться неясными до последнего момента, и типичная реакция высшего руководства заключается в игнорировании всех проблем, пока они не станут неизбежной реальностью. Вот вам, пожалуйста, еще один безнадежный проект.
Самое неприятное в подобных проектах - это конечный срок: новая система во что бы то ни стало должна быть готова к некоторой произвольной дате, например, к 1-му Января, иначе придется платить по миллиону долларов в день. Хотя иногда бывают исключения и работу можно продлить, но, как правило, срок окончателен и обжалованию не подлежит. И при этом, если новая система не будет сдана вовремя, организацию ожидают такие же ужасные последствия, как отмечалось выше: увольнения, банкротство или другие напасти.
Следует отметить, что в подобных проектах технология обычно не причем; безнадежность таких проектов определяется крайне сжатыми сроками. Разумеется, иногда само руководство усложняет ситуацию, не выделяя необходимого количества людей или бюджетных средств.
Почему люди штурмуют такие опасные горы, как Эверест, несмотря на риск и мучения? Почему они участвуют в марафонских забегах и доводят себя до физического изнеможения в многоборье? Потому что этим они бросают вызов окружающим. Еще больше возбуждает, если ты пытаешься совершить то, что до тебя никто не смог сделать. Например, из пяти миллиардов людей на планете только один может сказать: «Я был первым человеком, ступившим на Луну». Кто-то может подумать, что даже сама попытка совершить нечто подобное - это безумие и эгоизм, а другие, наоборот, хотели бы бросить вызов всем преградам в надежде завоевать славу и общественное признание. Как заметил недавно в своем письме ко мне консультант Al Christians:
Существует много занятий, вызывающих подобное удивление. Работа шахтера, ковбоя, лесоруба, пилота-истребителя, подводника и даже мойщика окон высотных зданий имеет массу отрицательных моментов, которые гораздо более серьезны, чем в проектировании ПО, и, тем не менее, в каждой из этих профессий есть люди, которые не мыслят себя вне ее.
То же самое можно сказать и про безнадежные софтверные проекты. У меня была возможность посетить разработчиков проекта Macintosh в конце 1983 г., за несколько месяцев до официального объявления продукта, и я был просто поражен их энергией. Помимо прочих причин, побуждающих их долго и интенсивно работать, имея дело с маниакальной личностью Стива Джобса, участники команды были абсолютно уверены (отчасти благодаря харизме Джобса), что Macintosh должен произвести революцию в персональных вычислениях. Они были вполне счастливы.
С точки зрения такой перспективы даже проваленные безнадежные проекты могут выглядеть довольно значительными. В эту категорию попадает бесчисленное множество проектов в Силиконовой Долине, зачастую после прожигания десятков миллионов долларов. Несмотря на то, что их провал влечет за собой банкротство целых компаний, разводы, язвенные болезни, нервные расстройства и многое другое, люди, участвовавшие в таких проектах, все еще с гордостью говорят о своем опыте.
« Я работал над созданием операционной системы в корпорации Go!, это была настоящая революция в программном обеспечении!», - скажет закаленный ветеран охваченному благоговением стажеру.
Хотя такие проекты могут никогда не попасть на первые страницы Computerworld, тем не менее в больших корпорациях выполняется множество чрезвычайно амбициозных проектов, и разработчики приложений с радостью соглашаются участвовать в них, поскольку «корпоративный Эверест» выглядит в их глазах весьма достойным вызовом. Иногда такие проекты заканчиваются провалом, потому что пользователи на рынке и в самой корпорации не хотят и не нуждаются в такой чудесной и революционной системе; иногда - потому, что проектная команда хватает больше, чем может съесть, и обещает больше, чем может сделать.
Если вас все же затягивает массовый психоз безнадежного проекта типа «покорения Эвереста», не забывайте про две важные вещи. Во-первых, остерегайтесь проектов, которые заранее обречены на неудачу. Предположим, например, кто-то сказал вам, что есть возможность принять участие в первой экспедиции на Марс и, даже более того, вам может выпасть честь оказаться первым человеком, ступившим на поверхность Марса. «Разумеется», - продолжал бы ваш менеджер проекта, - «у вас не будет никаких кислородных баллонов, потому что в космическом корабле не хватает места для дополнительного груза. Это означает, что вы наверняка погибнете - однако подумайте о чести и славе, которая вас ждет!» (Когда я заканчивал писать эту книгу в конце 1996 г., в New York Times появилась статья, в которой описывалась примерно такая же стратегия первого полета на Марс: послать астронавтов с достаточным для 40-летней жизни на Марсе количеством пищи и воды, но без топлива на обратный полет. Логика была такой: топливо на обратный полет весит гораздо больше, чем пища и вода. Но самое замечательное заключается в том, что этот доклад был совершенно серьезно представлен на научной конференции, и почти треть слушателей выразила готовность участвовать в таком путешествии в одну сторону!).
Более детально такие проекты (под названием «камикадзе») будут обсуждаться в главе 3, а сейчас описанный выше сценарий говорит сам за себя.
Во-вторых, следует остерегаться таких ситуаций, когда грандиозная задача, поставленная руководством корпорации (или владельцем вашей софтверной компании), может впоследствии оказаться совсем не такой важной. Особенно коварна ситуация, когда проблема по своей природе является чисто технической, например, «Мы будем первыми людьми на Земле, сумевшими уместить операционную систему с функциональностью Windows 95 в 4К ROM!». Да, это было бы замечательное техническое достижение, ну и что с того?
Это хорошая мысль - регулярно
задавать такой вопрос на каждое очередное сообщение руководства корпорации. Например, вам говорят: «Такая Windows 95 сможет уместиться в ваших наручных часах!», а вы в ответ снова спрашиваете: «Ну и что?» В конце концов, ответы могут оказаться настолько глупыми, что это само собой вернет вас на грешную землю. Например, вообразите, что ваш босс отвечает на второй вопрос «ну и что?» таким объяснением: «Ну, если мы сможем сжать до такого же размера систему распознавания речи, то можно будет писать программы на Visual Basic, прогуливаясь по улице и разговаривая со своими часами!»
Нет сомнения, что найдется несколько дюжин программистов, которые воскликнут: «Здорово!» и добровольно согласятся посвятить следующие три года своей жизни такому проекту. Для них не имеет никакого значения, что ни один разумный человек не будет пользоваться такой системой; достаточным оправданием служит сама техническая проблема. Размещение Windows 95, системы распознавания речи и Visual Basic в 4К ROM даст вам право на высшую степень бахвальства перед любым собранием хакеров и программистов; если это именно то, ради чего вы живете, то вперед и с песнями.
Еще одна хорошая мысль - простым нетехническим языком изложить суть проекта своей супруге, родителям или, еще лучше, детям. Они спросят «ну и что?», не будучи обремененными никаким искушением вызова, бросаемого технической проблемой.
« Ты собираешься угробить свои вечера, выходные и отпуска на два года вперед только для того, чтобы впихнуть Windows 95 в наручные часы?», - с ужасом спросит ваша супруга. И ваши дети спросят: «Зачем вообще это нужно делать?» Если вы в состоянии ответить на эти вопросы, не чувствуя себя полным идиотом, то можете с чистой совестью участвовать в этом проекте.
Наихудшей разновидностью проекта «покорения Эвереста» является та, где решаемая проблема имеет чрезвычайно важное значение для руководства корпорации, но ровным счетом никакого значения для любого, кто остановится и задумается о ней хотя бы на секунду. «Почему мы должны участвовать в этом безнадежном проекте, босс?», - невинно спросит молодой программист. «Потому», - ответит босс с праведным негодованием, - «что это увеличит доход нашей корпорации на одну акцию на целых 3,14159 цента!» Это означает, что если программиста вполне удовлетворяет обладание сотней акций своей компании, и если каждый цент из возросших доходов будет выплачен в виде дивидендов, то он получит огромные деньги - целых 3,14 доллара; и, если реакция Уолл-Стрита на успех проекта будет настолько замечательной, что акции подорожают на один доллар, то чистый доход программиста увеличится еще на какую-нибудь сотню долларов. «И это все, что я буду иметь за тысячи часов сверхурочной работы, босс?», - спросит программист. Но босс будет хранить молчание, потому что честный ответ (и он прекрасно это знает): ничего. Такой проект лишен какой-либо привлекательности, не использует новых технологий, и вероятность его провала - не меньше 75%.
Но, по-моему, еще хуже тот случай, когда босс умышленно вводит в заблуждение ничего не подозревающую проектную команду, заставляя их поверить, что проект на самом деле сродни покорению Эвереста, в то время как он прекрасно знает, что это не так. Представьте себе, что участник проектной команды спрашивает: «Почему мы должны так стараться, чтобы разработать на КОБОЛе эту пакетную систему резервирования авиабилетов для мэйнфрейма всего за шесть месяцев, босс?» Босс, скорее всего, ответит: «Потому что раньше во всей авиационной индустрии никто даже не пытался сделать это быстрее, чем за три года!» Может быть, это на самом деле серьезная техническая задача, заслуживающая внимания, но это совсем не та технология, с которой я бы хотел иметь дело в конце 90-х годов.В любом случае, это проект выглядит безнадежным не из-за решаемой технической проблемы, а из-за смехотворных сроков. Почему же менеджер проекта поступает таким образом? Причины могут быть самыми разными, однако вряд ли всем этим можно будет похвастаться перед своими друзьями год спустя.
Упомянутая выше проблема CASE-средств, вероятно, представляет собой наиболее очевидный пример трюизма: средства и процессы связаны друг с другом достаточно сложным образом. Бессмысленно браться за CASE-средство, поддерживающее структурный анализ, если вы никогда не слышали сокращений DFD и ERD. Использование такого CASE-средства будет не только бесполезным, но и чрезвычайно обременительным, если проектная команда искренне полагает, что DFD и ERD представляют собой лишенные смысла формы бюрократических документов, преследующие единственную цель: чтобы блюстители методологии могли прикрыть свои задницы.
Но ситуация не всегда бывает такой черно-белой. Например, проектная команда может считать, что диаграммы потоков данных полезны, но только как «неформальное» средство моделирования. Таким образом, «гибкое» CASE-средство может рассматриваться как нужное и полезное, в то время как «жесткое» CASE-средство может быть отвергнуто. Можно провести очевидную аналогию с текстовым процессором: мы все способны оценить достоинства проверки орфографии, но не хотим, чтобы нас заставляли ее использовать, и вполне вероятно, что мы ее никогда
не использовали, поскольку проверка орфографии слишком медленна и неудобна (по крайней мере, именно под таким
предлогом я не использую ее в Microsoft Word!). Мы будем еще больше раздражаться, если текстовый процессор будет настойчиво отвергать слово «ain’t» как ошибочное, или требовать, чтобы любые фразы, содержащие утверждения расистского или женоненавистнического характера, утверждались специальным комитетом. Нескольких таких «замечательных» свойств может оказаться достаточно, чтобы вынудить нас вернуться к бумаге и карандашу.
Все это означает, что команда безнадежного проекта должна в первую очередь нормально воспринимать те процессы и методологии, которым она собирается следовать; кроме того, она должна решить, каким из этих процессов следовать беспрекословно, а каким - следовать духу, но не букве закона. После принятия такого решения можно соответственно выбрать (или отвергнуть!) средства и технологию.
Таким же образом менеджер проекта может решить использовать какое-либо средство для усиления процесса, необходимость которого все понимают, но на практике следуют ему достаточно небрежно; хорошие примеры таких процессов - контроль версий и управление конфигурацией.
Один из величайших мифов, касающихся использования инструментальных средств в любых проектах (и особенно опасных в безнадежных проектах) заключается в отношении к средству как к «серебряной пуле», которая позволит творить чудеса. Разумеется, поиском чудес занимается в основном высшее руководство, однако даже менеджера проекта могут соблазнить рекламные заявления поставщика, уверяющего, что с помощью его гениальных средств можно в десять раз повысить производительность программирования, тестирования или какой-нибудь другой деятельности.
Помимо проблемы, заключающейся в новизне таких средств и в том, что никто не знает, как их использовать (о чем будет говориться ниже), существует более важный момент: средство может
стать подобным «серебряной пуле» только в том случае, если оно будет позволять или заставлять разработчиков изменять свои процессы. Например, если я пишу программу, а затем компилирую ее, я делаю это в соответствии с определенным процессом. При этом программированию может предшествовать процесс сквозного контроля или тщательного, формального проектирования. Теперь, если вы дадите мне компилятор, который работает на 10% быстрее, чем предыдущий, это облегчит мою работу и сделает ее несколько более эффективной; может быть, незначительно возрастет продуктивность всего проекта в целом.
Но мне не придется менять свой процесс.
С другой стороны, если мне дадут компилятор, который работает в десять раз быстрее, то он изменит мой процесс. Так произошло, когда мы перешли в 70-е годы от ночной пакетной компиляции к онлайновой компиляции, затем к компиляции на собственных ПК и рабочих станциях в 1980-е годы, и затем к различным сочетаниям пошаговой компиляции (а ля Delphi) и интерпретации (а ля Visual Basic).
Вследствие этого многие разработчики отказались от тщательного проектирования, предшествующего кодированию, из тех соображений, что они смогут писать программы на ходу и импровизировать в процессе кодирования; во многих проектах отказались также от практики сквозного кодирования, полагая, что программист и так сможет быстро обнаружить и исправить свои ошибки.
Едва ли кто-нибудь станет возражать против использования усовершенствованных технологий, позволяющих избавляться
от рутинных и утомительных процессов. Гораздо труднее внедрить новую технологию, требующую введения новых
процессов или модификации
существующих процессов, к которым мы привыкли. Хорошим примером служит процесс повторного использования и связанная с ним технология библиотек повторно используемых компонент, броузеров и других средств. Проектные команды, использующие эту технологию, могут повысить уровень повторного использования кода приблизительно от 20 процентов (уровень, который я называю «случайным») до 60 процентов и более; разумеется, если технология используется в масштабе всей организации, то уровень повторного использования может достигать 80-90 процентов и более.
Разница между 20-процентным и 80-процентным уровнем повторного использования эквивалентна четырехкратному повышению производительности. Как отмечено в [2], постепенное последовательное повышение уровня повторного использования приносит больше выгод, чем можно было бы ожидать. Если уровень повторного использования возрастает с 80 до 90 процентов, это означает, что вместо разработки «с нуля» 20 процентов кода проектной команде придется разрабатывать только 10 процентов. Таким образом, их загрузка снизится вдвое.
Все это замечательно - и вполне достойно называться «серебряной пулей» - но совершенно бесполезно, если проектная команда (и в конечном счете вся организация) окажется неспособной или не пожелает менять свои процессы в соответствиями с требованиями технологии повторного использования. Ирония заключается в том, большинство организаций поставят в вину самой технологии свои собственные провалы: они приобретут дорогостоящую библиотеку классов или поменяют свою старую методологию разработки ПО на объектно-ориентированную методологию, исходя из предположения, что объекты и повторное использование - это одно и то же; когда они в конечном счете обнаружат, что не добились сколько-нибудь ощутимых результатов, то будут винить во всем объектную технологию, библиотеку классов, поставщика и др.
Между тем, все процессы остались в точности такими же, какими были до внедрения новой технологии. Культура такой организации может быть выражена следующей фразой: «Только бездари пользуются чужим кодом; настоящие
программисты, черт возьми, пишут свой!»
С точки зрения безнадежного проекта в этом заключена весьма простая мораль: если внедрение новых средств потребует серьезного изменения «стандартных» процессов команды, то это значительно увеличит проектный риск и, возможно, будет способствовать провалу проекта. Иногда дополнительные проблемы вносит необходимость обучения и освоения практического использования новых средств (они будут обсуждаться ниже). Однако обычно гораздо более серьезной проблемой является изменение режима работы, который целиком определяется процессом. Это достаточно трудно сделать и в нормальных условиях, когда у нас достаточно времени, чтобы относительно безболезненно перейти к новому процессу. Для безнадежного проекта такой переход будет просто катастрофическим.
Было бы здорово, если можно было бы решить проблему мотивации, посулив большие суммы денег каждому участнику проектной команды (и менеджеру, конечно!). Frederick Herzberg [2], тем не менее, полагает, что не всегда можно обойтись одними деньгами:
Деньги, выгода, комфорт и тому подобное являются факторами «гигиены» - их отсутствие вызывает неудовлетворенность, однако они не могут заставить людей полюбить свою работу и дать им необходимые внутренние стимулы. Что действительно может дать такие стимулы, так это ощущение значительности достигнутых результатов, гордость за хорошо выполненную работу, более высокая ответственность, продвижение по службе и профессиональный рост - все то, что обогащает работу.
Эта оценка, по-видимому, достаточно точно характеризует «нормальные» проекты. Что же касается большинства безнадежных проектов, то деньги все же играют в них важную роль. На самом деле, они могут являться главной целью всего проекта. Многие начинающие компании Силиконовой Долины предпринимают безумные и безнадежные проекты в надежде на то, что им удастся разработать какое-нибудь совершенно «убойное» приложение для нового технического устройства и продать миллион его копий на сгорающем от нетерпения рынке. Если участники проектной команды являются акционерами и собираются поучаствовать в распределении прибыли, то денежное вознаграждение, очевидно, составляет весьма существенную часть мотивации их участия в проекте. Действительно, многие компании Силиконовой Долины намеренно придерживают зарплату на 20-30% ниже преобладающего на рынке уровня, заинтересовывая своих специалистов возможностью серьезного участия в акционировании и других формах распределения будущей прибыли. Эта стратегия направлена не только на повышение мотивации, но также и на снижение расхода наличности, поскольку зарплаты сотрудников зачастую составляют единственные самые крупные затраты начинающей софтверной компании.
Разумеется, существуют такие из ряда вон выходящие безнадежные проекты, в которых деньги не играют никакой роли.
Разработчик ПО, получивший единственный в жизни шанс в проекте, подобном полету Аполлона 11 на Луну, не нуждается в деньгах; он, безусловно, согласен с комментарием Стива Джобса по поводу проекта Macintosh: «Само путешествие - это награда».
С другой стороны, мне доводилось встречаться с угнетающе скучными безнадежными проектами в дряхлеющих правительственных учреждениях, в которых никто не питает ни малейшей надежды на какое-либо дополнительное вознаграждение. Размеры зарплаты определяются уровнем, установленным для государственных служащих, и ее структура закреплена законодательством - она не допускает никаких премий, акционирования или участия в распределении прибыли. В таких ситуациях, очевидно, глупо даже обсуждать денежное вознаграждение в качестве стимула - это может только расстроить участников команды.
Однако, как насчет организации, располагающей необходимой гибкостью? Если безнадежный проект достаточно важен для организации, для нее вовсе не является запредельной возможность зарезервировать значительный премиальный фонд для поощрения проектной команды, если ей удастся завершить проект в срок. Возможность премирования существует и для «нормальных» проектов, однако премии там обычно гораздо более умеренные. Приятно получить в конце проекта чек на 1,000$, однако третью часть этой суммы составят налоги, и того, что останется, явно недостаточно, чтобы заметно повлиять на жизненный уровень типичного разработчика ПО со средним уровнем доходов. Однако, в безнадежных проектах дело обстоит иначе: премиального чека на 10,000$ может оказаться достаточно для покупки новой машины (пускай даже самой скромной по современным меркам!) или отдыха за границей. Чека на 100,000$ достаточно, чтобы заплатить за обучение ребенка в престижном колледже или купить дом (или, по крайней мере, заплатить за него первый взнос). Наконец, чека на 1,000,000$ достаточно, чтобы обеспечить себе достойную пенсию.
Допуская возможность такого вознаграждения, сделаем некоторые замечания:
· Не забывайте о том, что 20%-ное повышение зарплаты имеет гораздо большее значение для молодого программиста, зарабатывающего 25,000$ в год, чем для опытного и квалифицированного программиста, зарабатывающего 75,000$ в год.
Что следует предпринять, если вы оказались втянуты в одну из описанных выше политических игр? Это в равной степени важно, даже если вы не являетесь их непосредственным участником, а наблюдаете со стороны - например, в качестве технического специалиста-участника проектной команды - все происходящие вокруг вас игры по поводу сроков, функциональности и бюджета. Thomsett высказывает интересную мысль, что все мы обучаемся этим политическим играм от наших наставников, менеджеров и «старейшин» политической культуры своей организации; поэтому, даже если мы сами не можем избежать этих игр, возможно, нам удастся уберечь от них своих подчиненных в надежде, что все эти политические игры сами по себе отомрут через поколение или два.
Это, конечно, было бы просто замечательно, но, к сожалению, я не столь оптимистичен. Иногда мне кажется, что политика заложена в нас на генетическом уровне, в коде ДНК. Даже если положение и не такое удручающее, реалии таковы, что политические игры, подобные описанным в этой главе, всегда вокруг нас; софтверные проекты вовсе не являются в этом смысле чем-то уникальным, и каждый из нас в течение своей жизни оказывался втянутым в те или иные игры. Даже если предположить, что такие игры нетипичны для софтверных проектов, все равно наша профессия достаточно мобильна для того, чтобы любая организация почти наверняка в какой-либо период времени оказалась «инфицирована» чересчур политизированными менеджерами, поставщиками и специалистами по маркетингу. Политические игры - это нечто такое, что следует принять как неизбежное зло, и мы должны уметь наилучшим образом справляться с ними.
Одна вещь, которую мы действительно можем
сделать (как советует Thomsett в своей замечательной статье [8]) - это не попасть в ловушку «скоропалительных» оценок проекта. Наихудшую разновидность такой ловушки представляет собой игра «испанская инквизиция», однако существуют и не такие заметные ловушки, которые поджидают нас в безнадежном проекте во время планирования и переговоров.
Преднамеренно или нет, но менеджера проекта часто ставят в положение, когда от него требуется быстро дать «грубую оценку» времени и количеству персонала, требуемым для реализации каких-либо частей проекта; и достаточно один раз сболтнуть об этом окружающим, как эти оценки могут превратиться в жесткие, не подлежащие изменению требования. Таким образом, в любой подобной ситуации менеджеру необходимо ответить что-либо наподобие: «Мне нужен один день (или неделя, или месяц - или даже час!), чтобы сделать необходимые расчеты, тогда я смогу дать оценку. Я отправлю ее по электронной почте». Разумеется, если все расчеты будут выполнены заранее, и вы уже окажетесь готовы к таким вопросам, то это даст вам очевидное преимущество, но, к сожалению, не всегда возможно это сделать.
В такой же степени не всегда возможно избежать требования дать немедленную оценку. Представьте, что во время презентации ваш клиент поворачивается к вам и спрашивает: «О’кей, Гарри, допустим, мы исключим из системы интерактивный Web-броузер и добавим десять наших людей в твою команду. Сколько времени тебе потребуется на всю работу?» Все поворачиваются и смотрят на вас, и вы видите, что менеджер по маркетингу чувствует себя явно не в своей тарелке; из всех предыдущих дискуссий по этому вопросу вы, вероятно, знаете, что политически приемлемый ответ - «Три месяца - и никаких проблем!» Хватит ли у вас духа ответить: «Джо, я в самом деле не знаю; нам следует вернуться в офис и проиграть то, что ты сказал, на нашей оценочной модели. Кроме того, мне необходимо поговорить с твоими людьми и выяснить их квалификацию...»
В подобной ситуации - и во многих других ситуациях, когда у вас действительно имеется некоторое время на выполнение формальной оценки - очень важно выразить ваши оценки в терминах «уровней достоверности» или в некотором диапазоне «плюс-минус». Если у вас абсолютно отсутствуют данные для детальной оценки, и если в безнадежном проекте будет использоваться совершенно новая технология и будет участвовать персонал неизвестной квалификации, то будет благоразумным сказать: «Проект, вероятно, потребует от трех до шести месяцев» или «Я думаю, что мы закончим проект через шесть месяцев плюс-минус 50%».
Конечно, большинство менеджеров проектов знают о таком подходе, и они уже могут его использовать (либо нет). Определение размера диапазона «плюс-минус» является составной часть науки проектных оценок, и я адресую интересующихся к тем источникам, которые перечислены в конце главы. Что касается безнадежных проектов, важно не забывать о вмешательстве политики в те оценки, которые даются во время переговоров. Наиболее распространенной, например, является такая ситуация, когда все, что вы говорите по поводу диапазона «плюс-минус», напрочь игнорируется вашими партнерами по переговорам. Так, если вы, находясь на совещании по вопросам планирования, говорите заказчику и другим руководителям: «Мы могли бы завершить этот проект за шесть месяцев±25%», каждый запишет в свой блокнот «шесть месяцев». (Конечно, те, кто поднаторел в политике, возьмут наихудшую оценку, данную вами, и добавят к ней еще для «надежности» перед тем, как докладывать своему высокому начальству. К сожалению, политически неопытные или амбициозные поступят как раз наоборот. В результате директор может сделать окончательный вывод, что проект будет закончен через четыре месяца или раньше.) Неважно, сколько раз вы это повторили, все равно никто не обратит внимания, и когда информация вернется обратно от вашего босса, вы обнаружите, что срок разработки составляет шесть месяцев. Все, что вы в состоянии сделать - это никогда
не отказываться от знака «±» в любых устных или письменных утверждениях, обещаниях, соглашениях или оценках, которые вы даете. Это не устранит проблему, но, по крайней мере, послужит для вас оправданием, если срок разработки окажется максимальным в соответствии с вашей оценкой.
К сожалению, есть один довольно неприятный момент, связанный с использованием приближенной оценки: вас могут обвинить в неуверенности, слабости или даже в некомпетентности. Это особенно характерно для безнадежных проектов с синдромом «Морского Корпуса», который обсуждался ранее. Чего на самом деле хочет от вас высшее руководство - это твердого обещания и обязательств, что проект будет закончен к точно определенной дате, его бюджет будет составлять определенное количество долларов, и персонал будет включать определенное количество людей.
Им доставляет огромное удовольствие (а) не заботиться больше о проблемах, связанных с продолжительностью проекта, и (б) иметь козла отпущения, на котором можно отыграться, если обещания будут нарушены. Оценки, имеющие вид «Х месяцев ± 50%», «500.000$ ± 100%» и «10 человек ± 25%», никак не могут их удовлетворить.
Jim McCarthy в своей замечательной книге [5] утверждает, что менеджер проекта должен открыто идти навстречу этим проблемам, убеждая заказчиков и руководство, что они должны войти в положение проектной команды и разделить с ней то бремя неопределенности, под тяжестью которого она будет находиться ежедневно. Таким образом, менеджеру следует сказать заказчику или высшему руководству: «Послушайте, я не могу с абсолютной точностью сказать, когда закончится проект - но поскольку именно я являюсь менеджером проекта, я гораздо скорее, чем кто-либо еще в этой организации, смогу оценить срок настолько точно, насколько это вообще возможно. Обещаю немедленно докладывать вам обо всем, что мне станет известно».
Только у менеджера с высокой степенью самоуверенности и способностью уклоняться от различных заданий хватит нахальства сказать такое в политизированной атмосфере безнадежного проекта. Однако, самое удобное время для того, чтобы высказаться таким образом - это начало проекта. В конце концов, если заказчик и высшее руководство не воспринимают вас всерьез как менеджера проекта, то у вас хороший шанс показать, что вы в самом деле
знаете о проекте больше других; зачем же тогда на вас в первую очередь возложили ответственность за этот проект? Неужели вам хочется быть козлом отпущения? Или вы собираетесь выступать в качестве «марионеточного менеджера», когда все решения будут приниматься за вас разными политическими манипуляторами? Если это так, самое время хлопнуть дверью!
Аналогично, если вы - младший программист в проектной команде и имеете счастье наблюдать подобные политические игры, это почти наверняка означает, что ваш менеджер проекта (а) не уверен ни в одной из своих оценок, (б) у него не хватает твердости характера, чтобы постоять за себя и за свою команду и (в) он оказался в ситуации, когда почти все ключевые решения принимаются людьми, не имеющими непосредственного отношения к проекту.Это говорит о том, что проект скорее всего провалится, и пока вы еще не слишком в него втянулись, может быть, лучше поискать себе пастбище позеленее.
Хотя я и говорю об этом, я, конечно же, хорошо знаю, насколько трудно бывает менеджеру убедить различных «игроков», чтобы они в полной мере прониклись неопределенностью, связанной со сроками, бюджетом и персоналом. Сообразительный заказчик, разумеется, в состоянии сделать это; организация-разработчик ПО, обладающая достаточным опытом, учитывает такую неопределенность как один из обязательных элементов управления рисками; наконец, люди, которые относятся друг к другу с уважением и заботой, согласятся, что было бы непорядочно подвергать одного из членов группы высокому риску и перспективе заработать язву.
В то время как премии и дополнительные отпуска являются положительным стимулом, необходимость сверхурочной работы во время проекта обычно считается отрицательным стимулом. Тем не менее, в безнадежных проектах она почти всегда неизбежна; это единственный
способ, дающий менеджеру проекта хоть какой-то шанс уложиться в жесткий график. И, как отмечалось ранее, для нее зачастую не требуется никаких специальных просьб менеджера: молодые, холостые и фанатичные участники команды, которых возбуждает брошенный вызов и возможность использования в проекте самой передовой технологии, рады работать по 60, 80 или 100 часов в неделю.
Несмотря на это, сверхурочным временем необходимо правильно распоряжаться, чтобы избежать отрицательного воздействия на команду и не поставить под угрозу успех проекта. Один из способов это сделать – убедиться, что высшее руководство знает реальную стоимость сверхурочной работы; как отмечает консультант Dave Kleist:
До тех пор, пока участники проектной команды не будут иметь такие же хорошие возможности участия в акционерном капитале компании, как высшее руководство, любые другие формы компенсации за участие в безнадежном проекте нельзя всерьез рассматривать как вознаграждение (в положительном смысле). В то время как менеджер проекта редко распоряжается такого рода компенсацией, то, что реально можно сделать – это немедленно оплачивать сверхурочную работу. При этом люди, почти полностью отдающие себя проекту, получат хоть какую-то отдачу, а тех, кому не мешало бы знать реальную стоимость проекта (высшее руководство и др.), можно будет заставить ее узнать (посредством бюджета).
Независимо от того, получают участники команды компенсацию за сверхурочную работу или нет, самой большой ошибкой будет отсутствие учета этого времени, исходя из неверного допущения, что поскольку участникам команды это время не оплачивается, то оно как бы «свободное». Даже если с точки зрения бухгалтерии именно так оно и есть, с точки зрения менеджера проекта сверхурочное время никак не должно
Давайте предположим, что некоторая организация решила изменить свою культуру и начала выполнять все свои проекты в стиле безнадежных. Как было отмечено выше, это может произойти без какого-либо осознанного решения и независимого от того, желают ли отдельные личности примириться более чем с одним безнадежным проектом. Предположим, тем не менее, что это сознательная стратегия руководителей, отвечающих за информационные технологии, или еще более высокого руководства, которому они подчиняются. Какими будут последствия и как типичная организация может осуществить такие изменения?
Самое важное, что должно произойти – это замена «нормальной» культуры разработки ПО на «радикальную» культуру, которую олицетворяют собой безнадежные проекты. Такие изменения не могут произойти легко или быстро, поскольку бюрократия будет усиленно отстаивать старые порядки. Правда, в разумной организации понимают, что успех первого безнадежного проекта – это в основном дело случая и результат упорства части команды. Если организация хочет заранее прогнозировать успех в последующих безнадежных проектах, она должна измениться.
Изменения захватывают средства и технологии, процессы и методологии, стили управления и стратегии планирования, используемые организацией-разработчиком ПО. Они подразумевают решение таких вопросов, как:
· Каких сотрудников следует принимать на работу? В рамках закона и этических норм и при отсутствии какой-либо дискриминации организация, вероятно, будет стремиться найти более молодых и энергичных людей, отдавая предпочтение неженатым и тем, кто не слишком интересуется чем-либо, помимо работы. Молодые, неженатые трудоголики – это именно то, что требуется многим организациям для их безнадежных проектов.
· Что следует говорить потенциальным новым сотрудникам об организации. Мне кажется, что не только неэтично, но и просто глупо скрывать тот факт, что организации собирается следовать стратегии безнадежных проектов. В самом деле, организации, внедряющие такой подход, обычно весьма гордятся этим, так же, как и любым другим аспектом своей культуры.
Организация может не пожелать акцентировать внимание на том, что только небольшой процент пришедших новобранцев успешно пройдет через первый безнадежный проект (так же, как в колледжах не признаются, что большая часть вновь пришедших первокурсников провалится на экзаменах и будет отчислена), однако ей следует
предупредить, что рабочий день вряд ли будет укладываться в рамки «с 9 до 5».
· Каким образом безнадежные проекты могут повлиять на карьерную политику – в частности, продвижение по службе, повышение в должности и премии? Например, в юридических фирмах и компаниях «Большой Шестерки» новобранцам принято говорить, что должно пройти от семи до девяти лет, прежде чем они смогут стать партнерами; они могут занимать промежуточные ступеньки «менеджера» или «старшего менеджера», но ни у кого не должно быть иллюзий, что долгие часы и тяжелая работа закончатся через год или два.
· Каким образом безнадежные проекты могут повлиять на стиль руководства? Следует ли ожидать, что с самого начала проекта менеджеры будут выжимать из участников команды все соки и затем выбрасывать их за ненадобностью? Или же менеджер проекта будет нести ответственность за хорошее самочувствие участников команды в такой же степени, как за своевременную сдачу работоспособной системы пользователям? Отметим, что если нормальная организация хочет внедрить культуру безнадежных проектов (вместо того, чтобы периодически бороться с такими проектами), она, по-видимому, хочет, чтобы такие проекты завершались успешно; в соответствии с классификацией в главе 1 это означает, что организация сознательно идет на проекты типа «невыполнимая миссия» или «отвратительные». Однако, если дела идут паршиво, а люди «сгорают на работе» и разбегаются к концу проекта, почему бы не воспользоваться услугами консультантов? Sharon Marsh Roberts замечает по этому поводу:
Я считаю, что организации необходимо найти способ обновления своих ресурсов. Одна альтернатива – использование множества консультантов, от которых ожидается работа в стиле «заработай кучу денег и отваливай».
Другая альтернатива – иметь «зону безопасности», в которой сотрудники могли бы отсиживаться между безнадежными проектами.
· Какими средствами должна быть оснащена сама организация, если каждый проект будет безнадежным? Если окажется, что главным фактором успеха первого безнадежного проекта стала технология повторного использования с соответствующей библиотекой классов или визуальное средство быстрой разработки приложений, то, возможно, каждый проект должен иметь в распоряжении эти средства.
· Какого типа инфраструктуру должна иметь организация, чтобы поддерживать безнадежные проекты? Она может включать электронную почту в масштабах всей компании или более развитую инфраструктуру рабочих групп, основанную на использовании Lotus Notes. Кроме того, она могла бы также включать серьезные изменения в человеческой инфраструктуре – т.е., сеть администраторов и обслуживающего персонала должна разрастаться, а слой бюрократов – сокращаться.
· Какого рода процессы подходят для культуры безнадежных проектов? Механизм определения приоритетов, формальные процессы и многое другое из того, что обсуждалось в главе 5, должно быть принято на уровне организации, чтобы каждая команда могла получить необходимую ей поддержку, когда она пытается реализовать соответствующие процессы на практике в конкретном безнадежном проекте. Отметим также, что на процессы оказывает влияние (хотя и небольшое) длительность проекта; большинство организаций находит, что вероятность успеха краткосрочных безнадежных проектов выше. Как отмечает Bill Hamaker:
Вместо нескольких крупных безнадежных проектов лучше выполнить побольше небольших проектов. Сконцентрируйтесь на создании такой организации, которая умеет извлекать уроки из результатов каждого безнадежного проекта. Отведите достаточно времени между проектами, чтобы специалисты могли оценить все плюсы и минусы разработки; это время будет для них своего рода отдыхом.
Если управление требованиями - особенно определение приоритетов требований - является в безнадежном проекте наиболее важным процессом, то вторым важнейшим процессом является управление рисками. Если бы понятие «риска» не было столь критическим, тогда мы не употребляли бы по отношению к проекту определение «безнадежный». Интересно отметить, что один из вопросов «теста на алкоголь» связан с идентификацией проектных рисков, и если ответом на такой вопрос со стороны менеджера «нормального» проекта может быть удивленный взгляд (даже если проект оказался в плачевном состоянии), то менеджер безнадежного проекта скорее всего даст на такой вопрос четкий и ясный ответ. Менеджер был бы просто глупцом, если бы он приступил к безнадежному проекту, не имея какого-либо серьезного представления об основных рисках и о том, как с ними бороться.
Увы, но в ходе проекта ситуация может выйти из-под контроля. Это происходит потому, что управление рисками строится в основном на эмоциях и инстинктах, а не на формальных процессах, и менеджер зачастую может просто не заметить вовремя появление новых рисков в ходе проекта. В лучшем случае будут устраняться риски, которые являются очевидными в самом начале проекта; в нормальной ситуации они будут поводом для беспокойства в течение всего проекта (например, риск ухода ключевого разработчика). Однако, могут неожиданно возникнуть совершенно новые риски, которых никто не ожидал, и поскольку команда обычно обладает слишком малым запасом прочности (в терминах плана, бюджета и ресурсов), эти риски могут оказаться для проекта убийственными.
Если вся эта дискуссия относительно рисков разработки ПО кажется вам чересчур раздутой или вообще не относящейся к делу, можете смело переходить к следующей главе. Меня больше всего заботит менеджер проекта, который успешно завершил несколько «нормальных» проектов, справляясь с рисками на интуитивном уровне; такой подход в безнадежном проекте обычно не работает. На самом деле, существуют эффективные формальные процессы управления рисками, позволяющие предпринимать безнадежные проекты, которые в противном случае наверняка стали бы самоубийственными.
Проблемы создания нормальных условий для работы уже так много лет обсуждаются среди разработчиков ПО, что кажется бессмысленным снова их поднимать. Tom DeMarco и Tim Lister, чья книга уже не раз цитировалась в этой главе, уделяют большое внимание тем преимуществам, которые дает создание нормальных условий для работы; например, если разработчики ПО работают в достаточно тихом помещении, вероятность появления у них ошибок уменьшается на одну треть по сравнению с теми, кто работает в шумном офисе и постоянно отвлекается на посторонние дела. Проанализировав работу 600 разработчиков ПО, DeMarco и Lister смогли получить результаты, убедительно говорящие о том, что продуктивность работы тех, кто находится в хорошем офисе и может закрыть дверь, не отвечать на телефонные звонки и не отвлекаться на посторонние дела, почти в 2,6 раза выше, чем у находящихся в обычном офисе.
Хотя DeMarco и Lister опубликовали свою работу в 1987 году, с тех пор в условиях работы большинства разработчиков ПО мало что изменилось - за исключением фирм-разработчиков ПО. Условия работы в Microsoft и в большинстве других софтверных компаний Силиконовой Долины в самом деле достаточно цивилизованные - отдельные помещения с закрытыми дверями, наличие содовой, сока и других напитков, и «постоянный» телефонный номер, который остается за программистом даже в том случае, если он перебирается в другое помещение.
Что касается разработчиков ПО, работающих в банках, страховых компаниях, правительственных учреждениях, промышленных предприятиях и сотнях других компаний, которые до сих пор смотрят на программное обеспечение как на «накладные» расходы, то им приходится работать не в нормальных офисах, а в отгороженных клетушках, где возможность сконцентрировать свои умственные усилия на решении какой-либо проблемы варьируется от плохой до полностью отсутствующей. Звучит набившая оскомину музыка, не прекращаются телефонные звонки, лают собаки, кричат люди, и нет никакого спасения от кого угодно (от курьера до директора), кто может засунуть голову в твою комнату и отвлечь тебя.
Как отмечают DeMarco и Lister:
Проектировщики с полицейскими наклонностями проектируют рабочие места наподобие тюрем: оптимальная вместимость при минимальных затратах. Мы бездумно соглашаемся с ними в вопросах проектирования рабочих мест, хотя в большинстве организаций, испытывающих проблемы с продуктивностью работы, не существует более подходящего фактора ее повышения, чем рабочие места.
До тех пор, пока сотрудники будут тесниться в шумных и неприспособленных помещениях, нельзя говорить о сколько-нибудь продуктивной работе.
К сожалению, мои рассуждения относительно сложившейся ситуации вряд ли смогут оказать на нашу индустрию большее воздействие, чем гораздо более детальные и убедительные выкладки DeMarco и Lister. Однако не следует забывать, что мы здесь говорим о безнадежных проектах, к которым применимы другие правила, и я думаю, что менеджеру проекта следует принять такую философскую позицию, которая подразумевает отсутствие вообще каких бы то ни было правил.
Если вы являетесь менеджером безнадежного проекта с практически нереальными сроками, то сведений о том, что хорошие условия работы могут улучшить продуктивность в 2,6 раза, может оказаться достаточно, чтобы заставить вас сломать множество преград. То, чего вам удастся в этом деле достичь, может оказаться всего лишь временным; как только проект закончится, налетит хозяйственная служба, все отберет и вернет вас обратно в крохотные клетушки. Однако, если безнадежный проект продолжается хотя бы полгода, и вы достаточно изобретательны, стоит попытаться обеспечить подходящие условия для работы таким образом, чтобы хозяйственная служба вообще не знала о том, что происходит.
Для этого есть несколько возможностей:
· Лобовая атака - если у вашего проекта есть защитник и/или владелец, которые крайне заинтересованы в его успехе, объясните им, насколько важно, чтобы проектная команда работала в хороших условиях. Если защитник проекта является руководителем высокого уровня, то организовать временный переезд команды в более подходящее помещение будет относительно несложно.
· Самовольный захват - не спрашивая ни у кого разрешения, займите какое- нибудь пустое помещение, которое пока никем не занято, в то время как хозяйственная служба пытается подсчитать, сколько сотен людей они смогут туда впихнуть. Такой захват обеспечит 90% успеха в борьбе за условия работы; пока бюрократы будут ругаться, спорить и отправлять в разные стороны гневные послания, вам, может быть, уже удастся закончить проект и незаметно удалиться на прежнее место.
· Дистанционный доступ - разрешите всем работать дома и организуйте еженедельные рабочие совещания в ближайшем «МакДональдсе» (в 9 часов утра, когда почти нет посетителей). Пока кто-нибудь обнаружит исчезновение команды, может пройти не одна неделя. Для дополнительного отвлечения внимания можно посадить чучела за столы, которые обычно занимала проектная команда; руководству понадобится достаточно много времени, чтобы отличить их от других зомби, сидящих в офисе.
· Переход в ночную смену - это более радикальный вариант, однако он может оказаться достаточно эффективным, если большая часть работы может выполняться без взаимодействия с пользователями. Не слишком приятно просить людей работать в ночное время вместо дневного, однако фактически это гарантирует отсутствие обычных отвлечений. Подобная стратегия наверняка вызовет гнев местных бюрократов, но самая замечательная вещь заключается в том, что бюрократы не остаются в офисе до полуночи! Они будут слать сердитые записки и послания по электронной почте, при этом следует игнорировать их и делать вид, что никогда их не получали. Если это не удается, просто откажитесь менять свой график работы; пока они не додумаются отключать свет или поменять замки на двери офиса, вряд ли им удастся помешать вам в рамках обычного безнадежного проекта.
· Преграды и заслоны - если ваша команда работает в обычном «открытом» офисе и упомянутые выше стратегии неприменимы, тогда постарайтесь сделать все возможное, чтобы сосредоточить команду в смежных помещениях.
После этого сделайте все необходимое, чтобы забаррикадироваться от остальной толпы в офисе. Отключите селекторную связь и вопящий из угла громкоговоритель (и будьте готовы проделывать это еженедельно, поскольку обслуживающий персонал может снова включить их). Выключите телефоны из сети, или, как советуют DeMarco и Lister, набейте вату в звонок. Если вы сможете проделать такое на целом этаже или вообще во всем здании, то будет еще лучше. Поднимите над зданием пиратский флаг, как это сделал Стив Джобс со своей командой в Apple во время проекта Macintosh. Установите охрану, чтобы гнать прочь непрошеных визитеров.
Некоторые из этих могут спровоцировать более резкую ответную реакцию корпоративной бюрократии, чем другие; команда и ее менеджер должны решить, какая стратегия будет наиболее эффективной. Но я хотел бы подчеркнуть, что вполне серьезно рассматриваю все
эти стратегии, невзирая на очевидный факт, что они нарушают «правила игры», принятые почти в каждой крупной компании. Бороться с бюрократией таким способом - не для робкого десятка; но ведь и сами безнадежные проекты тоже не для робкого десятка. Если менеджер безнадежного проекта не проявляет желания бороться и отстаивать право на нормальные условия работы, то с какой стати проектная команда должна проявлять готовность идти на экстраординарные жертвы ради организации и менеджера проекта?
Все вышесказанное предполагает, что в безнадежном проекте необходимо уделить особое внимание такому относительно новому аспекту жизненного цикла разработки ПО, как требованиям. Почему я употребил определение «новому»? В конце концов, каждый проект содержит требования, и нельзя сказать, чтобы разработчики были совсем уж незнакомы с этим понятием.
Традиционные методологии создания ПО - включая различные «структурные» и «объектно-ориентированные» методологии, разработкой которых некоторые мои коллеги и я занимались более 20 последних лет - сосредоточены на моделировании требований, обычно с помощью таких графических средств, как диаграммы потоков данных или диаграммы «сущность-связь». Но я в данной главе говорю именно об управлении требованиями в той лихорадочной обстановке, которая присуща безнадежному проекту.
Эти два понятия - моделирование и управление - не являются противоречивыми или несовместимыми. Можно потратить время и силы как на одно, так и на другое; если команда безнадежного проекта считает, что для лучшего понимания требований к системе полезно построить объектно-ориентированную модель, у меня нет никаких возражений. Я только хотел бы предостеречь проектную команду, чтобы она делала то, что именно она сама считает важным и полезным, а не то, что считают «правильным» блюстители чистоты методологии (здесь частично затрагиваются вопросы «наилучшей» практики, которые будут обсуждаться ниже).
Мой опыт говорит о том, что в большинстве безнадежных проектов не используются формальные методы моделирования, такие, как SA/SD или OOA/OOD. Отчасти это из-за того, что эти методологии кажутся проектной команде слишком громоздкими и бюрократическими; отчасти из-за того, что CASE-средства, поддерживающие эти методологии, кажутся слишком неудобными для использования; и, как правило, из-за того, что они не видят, каким образом можно преобразовать полученные в результате анализа модели в работающий код - единственное, что в конечном счете нужно пользователю. (В «нормальном» проекте, наоборот, SA/OOA-модели сами по себе воспринимаются, как весьма полезные.
Пользователи и специалисты, определяющие бизнес- политику организации, будут толпиться вокруг диаграмм потоков данных и тихо бормотать друг другу: «Так вот в чем заключается наш бизнес! Может быть, имеет смысл провести реинжиниринг бизнес-процессов и изменить все это перед тем, как создавать новую автоматизированную систему».)
В самом деле, в экстремальной ситуации проектная команда даже не будет документировать ни одно из пользовательских требований; в свое оправдание (которое наверняка слышал каждый менеджер проекта!) они говорят, что это требует слишком много времени, требования слишком часто меняются и, кроме того, пользователи сами не знают, что им нужно. Таким образом, команда обычно полагается на методы и средства прототипирования, с помощью которых можно наглядно продемонстрировать всю важную проектную работу, а также выявить реальные требования к системе.
С точки зрения «приоритетности», о которой шла речь в разд. 5.1, все это порождает одну главную проблему: невозможность сколько-нибудь организованным способом управлять требованиями. Как можно в любой момент времени сказать, какие требования «необходимо выполнить», какие «следует выполнить» и какие «можно выполнить»? Интересно отметить, что методологии SA/SD и OOA/OOD также не дают ответа на этот вопрос. Можно, конечно, определять приоритеты, раскрашивая кружочки на диаграммах потоков данных, но они изначально предназначены вовсе не для этого. Методологии SA/SD и OOA/OOD предназначены в первую очередь для понимания и объяснения требований, а не для управления ими в динамике.
Именно динамическая
составляющая управления требованиями обычно вызывает наибольшие трудности. Если бы вам в самом начале проекта удалось убедить всех акционеров и заинтересованных лиц согласиться с приоритетностью требований, и если бы эти приоритеты никогда не менялись в течение проекта ... ну что ж, если вы в самом деле в это верите, то вы, наверное, также верите в фей и колдунов. В реальных
же безнадежных проектах обычно возникают в различных вариантах следующие дилеммы:
· Акционеры и заинтересованные лица не могут полностью согласиться с предложенными приоритетами. Разумеется, если они совсем не согласны, проект будет просто парализован; однако, нередко можно встретиться с такой ситуацией, когда для 80 процентов требований устанавливаются приоритеты и начинается работа над проектом, в то время как политиканы продолжают спорить относительно оставшихся 20 процентов. В результате этих споров требования с высоким приоритетом иногда появляются в самый последний момент. Это ставит перед проектной командой трудную задачу, однако вряд ли возможно этого избежать.
· Во время проекта изменяется ситуация в команде. Например, в одно прекрасное утро менеджер проекта приходит в офис и обнаруживает, что два его лучших программиста, Матильда и Эзекиель, решили создать реггей-бэнд и только что уехали в Нэшвил в поисках контракта для записи диска. Никто не предполагал, что такое может случиться, однако это случилось. Первые три вопроса, которые вынужден выяснить менеджер, заключаются в следующем: «Над какими обязательными требованиями работали эти мерзавцы, каков статус этих требований и кому я могу их перепоручить?»
· Изменяются обстоятельства вовне проектной команды. В зависимости от финансовых успехов компании увеличивается или уменьшается бюджет. Срок окончания проекта отодвигается или приближается (и даже очень сильно) в зависимости от того, насколько департамент маркетинга осведомлен относительно изменения конкурентной ситуации на рынке. Меняются решения правительства, меняются технологии (не всегда в лучшую сторону!), поставщики приходят и уходят, и т.д., и т.п. Каждое из этих внешних событий может оказать некоторое воздействие на решения, принятые в отношении приоритетов требований.
· Нередко наступает «момент истины», когда пользователи, высшее руководство и участники проектной команды вынуждены признать, что система не будет готова в срок. Разумеется, если в начале проекта была проделана достаточно квалифицированная работа по определению приоритетов требований, такой кризис может и не наступить вообще.
Но что если команда вынуждена признать, что она не может выполнить в срок даже все необходимые требования? Как было отмечено выше, менеджеру проекта обычно «снимают голову» и заменяют на другого; при этом, если новому менеджеру удается отодвинуть конечный срок, то приоритеты могут быть оставлены без изменения. Однако в этот момент все же, как правило, ранее принятые решения подвергаются серьезному пересмотру. Конечный срок уже маячит впереди на расстоянии нескольких недель, и пользователи могут волей-неволей согласиться с тем, что некоторые требования, считавшиеся ранее абсолютно необходимыми, вообще перестают быть таковыми.
Этот перечень можно продолжать дальше, но думаю, что вывод ясен: управление приоритетом требований является критически важной частью «процесса» безнадежных проектов. Конечно, если безнадежный проект содержит всего дюжину требований, то управлять ими будет совсем несложно; можно нацарапать их на бумажной салфетке и просто пересматривать по мере необходимости. Однако, большинство проектов включает сотни требований, а многие - даже тысячи; проект самолета Боинг-777 (который вполне можно считать мешком программ с крыльями) включал, по слухам, 300.000 требований. Но это еще не все, ведь требования обычно не являются независимыми; некоторые требования зависят от других требований, а некоторые в свою очередь порождают другие требования.
Все это подразумевает необходимость в методах, процессах и средствах для описания зависимостей между требованиями и управления большим количеством таких зависимостей. В решении данной проблемы могут, конечно, помочь такие известные методы, как структурный анализ и объектно-ориентированный анализ, но, к сожалению, до сих пор эти методы традиционно игнорировали атрибуты требований, такие, как приоритет, стоимость, риск, план, владелец и разработчик, который занимается его реализацией. В результате проектным командам, испытывающим потребность в управлении требованиями, приходилось использовать доморощенные средства, базирующиеся на электронных таблицах, текстовых процессорах или наспех созданных приложениях, чтобы обеспечить хотя бы некоторую степень автоматизированной поддержки.
К счастью, в настоящее время появилось новое поколение средств, обеспечивающих более комплексную и сложную поддержку управления требованиями. Вот некоторые из доступных на сегодняшний день средств: Requisite (Requisite, Inc.), DOORS (Zycad Corp.), RTM (Marconi Systems). Поскольку данная глава посвящена в основном процессам, а не средствам, я не буду вдаваться в детали этих трех продуктов; но поскольку средства влияют на процессы, важно знать хотя бы о их существовании (ветераны-разработчики ПО вспомнят старую поговорку: «Если единственным вашим инструментом является молоток, то все ваши проблемы выглядят как гвозди»).
Существует один аспект в комбинации процессов и средств, который следует особо отметить. Как было сказано выше, многие команды безнадежных проектов отказываются от использования формальных методологий SA/SD или OOA/OOD, поскольку они выглядят слишком громоздкими и бюрократическими. Что интересно, акционеры и заинтересованные лица рассуждают точно так же. Если предоставить им выбор, то они предпочли бы, чтобы их не заставляли изучать, как читать диаграммы потоков данных; в самом деле, руководители и конечные пользователи высокого уровня иерархии жалуются, что они ничего не понимают во всех этих «технических» диаграммах. У них также не хватает терпения продираться сквозь сотни страниц с диаграммами и мелкими деталями описаний элементов данных или спецификаций процессов. Конечно, если времени и терпения достаточно, то проектная команда в состоянии преодолеть сопротивление и убедить конечных пользователей в том, что тщательно разработанные модели на самом деле приносят большую пользу - однако в безнадежных проектах вечно не хватает ни времени, ни терпения.
Что пользователи в состоянии
понимать - так это их собственный родной язык, например, английский для большинства североамериканских проектов. И что большинство из них предпочитают читать - это небольшой документ из 10-20 страниц, суммирующий все требования к системе. Требования в таком документе могут называться «характеристиками», а сам документ в целом - «Требования к системе» («Product Requirements Document» - PRD) или «спецификация высокого уровня» или еще какой-нибудь подходящей фразой.
Главное, что этот документ небольшой и на английском языке. Он не должен содержать рекламной «шелухи», а также непонятной терминологии или обозначений, заставляющих пользователей задумываться, что бы это значило. В идеальном случае каждый абзац или даже каждое отдельное предложение должны соответствовать конкретному требованию, чтобы и пользователи, и участники проектной команды могли использовать их в качестве отправной точки для своей дальнейшей работы.
Во всем этом есть один интересный момент - он заключается в том, что у нас уже одно знакомое всем средство для создания таких документов; оно называется «текстовый процессор». В самом деле, начальная версия такого документа обычно исходит от пользователей - например, в виде записки от вице-президента по маркетингу к исполнительному директору по поводу возникшей потребности в новом замечательном продукте со свойствами X, Y и Z, который мог бы соперничать с продуктом конкурента - даже когда департамент информационных технологий еще ничего об этом не знает. На этой ранней стадии пользователи рассматривают текстовый процессор как свое средство, а записку службы маркетинга – как свой документ; в результате они проявляют гораздо большую готовность участвовать в последующих дискуссиях по поводу приоритетности требований, если при этом продолжают использоваться аналогичные средства и документы. Таким образом, мы наблюдаем тенденцию, ведущую к документо-центричному
управлению требованиями, когда средства, используемые специалистами по ИТ (например, Requisite, DOORS или RTM), тесно интегрируются с текстовыми процессорами и документами, в которых пользователи хорошо разбираются (я должен честно признаться, что это в какой-то степени рекламный трюк, поскольку такая интеграция является одним из основных свойств Requisite, и я был одним из членов правления компании Requisite, когда писал эту книгу. Но поскольку я играю роль объективного автора, я искренне рекомендую вам познакомиться со всеми тремя перечисленными здесь продуктами.)
Еще одно последнее соображение: очень важно, чтобы все акционеры и заинтересованные лица участвовали в процессе выработки начальных требований, их документирования и определения приоритетов. Разумеется, это касается любых проектов, однако нехватка времени и политические баталии, присущие безнадежным проектам, нередко соблазняют менеджера проекта рассуждать следующим образом: «Ладно, мы будем двигаться дальше и обойдемся без этого идиота Мелвина из департамента маркетинга; все, на что он способен – это не соглашаться никогда и ни с чем». При этом может возникнуть следующая проблема: Мелвин, получив серьезную «политическую» пощечину и чувствуя, что его игнорируют (и что менеджер проекта считает его идиотом!), скорее всего найдет способ саботировать проект.
Теоретически каждый понимает и соглашается с такой точкой зрения, однако на практике просто удивительно наблюдать, как безнадежные проекты потихоньку обрастают все новыми и новыми требованиями. Дополнительные требования, модификации существующих требований и недвусмысленные предложения игнорировать некоторые требования - все это сваливается на проектную команду в виде телефонных звонков, посланий по электронной почте и разговоров с глазу на глаз с менеджером проекта. Многие из этих предложений предваряются такими успокаивающими фразами, как «извини, что я забыл об этом сказать на нашем последнем совещании, но ... » или «я рассчитывал, что у нашей группы управления будет время справиться с этой проблемой, но ... ».
Существует ли у менеджера проекта такая формальная группа управления - т.е., группа, состоящая из акционеров и заинтересованных лиц, которая оценивает полученные в проекте результаты и принимает определенные решения относительно приоритетности требований - или нет, в данном случае не имеет значения; это зависит от того стиля управления и организации проектов, который сложился в каждой организации. Но что действительно
имеет значение для успешного завершения безнадежного проекта - это тщательное документирование каждой модификации, вносимой в исходные требования, и извещение о ней всех акционеров и заинтересованных лиц.Если вице-президент по финансам хочет потихоньку вставить в проект еще одно приоритетное требование, это замечательно; однако при этом менеджер проекта должен позаботиться, чтобы об этом узнали вице-президент по маркетингу и исполнительный директор.
Традиционно владелец - это человек, который принимает, санкционирует или финансирует систему и/или результаты проекта. Чрезвычайно важно идентифицировать этого человека и сделать все возможное, чтобы он был удовлетворен ходом проекта.
Удивительно, как много проектов выполняются без малейшего представления их участников о том, кто является владельцем; это особенно типично для организаций, где проекты порождаются честолюбием и сверхэнергией IT-профессионалов, которые стремятся перещеголять друг друга утверждениями вроде «держу пари, что отдел маркетинга придет в экстаз, когда увидит эту новую систему, которую мы разрабатываем для них». Очевидно, в организациях с грамотным руководством такие проекты никогда не смогут начаться - но главное, что я хотел здесь сказать - можно с трудом найти такие безнадежные проекты, которые начались бы без четкого распоряжения со стороны владельца. Причина очевидна: такие проекты чрезвычайно дороги и/или рискованны и/или ограничены по срокам. Невероятно, чтобы IS/IT-подразделение выдумало такой проект по собственной инициативе, и нормальные бюрократы в организации не позволят включить его в план и финансировать до тех пор, пока не получат четкое и недвусмысленное указание от того, кто имеет на это право.
Отсюда следует одно интересное соображение: владелец безнадежного проекта зачастую является руководителем гораздо более высокого уровня, чем в случае «нормального» проекта. В самом деле, владельцем может быть президент или исполнительный директор, поскольку проект может затрагивать жизненно важные интересы организации. Даже если это всего лишь вице-президент, заметим, что владелец безнадежного проекта обычно имеет гораздо больше полномочий в вопросах дополнительных расходов или исключения бюрократических ограничений, чем в «нормальном» проекте.
С другой стороны, это не означает, что вся руководящая иерархия куда-то исчезла; наоборот, одна из проблем во многих безнадежных проектах заключается в том, что менеджер проекта совсем мало или вообще не контактирует непосредственно с владельцем проекта.
Различные распоряжения и требования об отчетах о состоянии проекта могут спускаться вниз по цепочке от владельца к менеджеру среднего уровня, который является как раз непосредственным начальником менеджера проекта. И все эти посредники между реальным владельцем и менеджером проекта могут быть, говоря вышеуказанными терминами, пользователями, акционерами, заинтересованными лицами или чемпионами - или политическими противниками проекта.
Об этом важно помнить, поскольку изначальные требования владельца проекта могут быть легко искажены, пока достигнут менеджера проекта. Наиболее часто тем аспектом безнадежного проекта, по которому не удается достичь соглашения, является конечный срок: новая Супер-Система однозначно и безусловно должна быть закончена к 1 января, иначе наступит конец света! Однако, пока это указание доберется вниз по иерархической лестнице до менеджера, оно с помощью бюрократии обрастет целым слоем дополнительных требований, например: в качестве языков программирования использовать только Ada и RPG; в проектную команду нужно обязательно включить Джорджа, Харриет и Мелвина (потому что они настолько некомпетентны, что их не берут ни в один проект; в проекте должна использоваться вновь созданная (но никогда не использовавшаяся ранее) объектно-ориентированная методология; проектная команда должна еженедельно проверяться на предмет того, правильную ли методологию она использует; каждый участник проектной команды должен в конце каждого рабочего дня заполнять 17-страничную форму XJ13 в трех экземплярах; ... и так можно продолжать до бесконечности.
В подобных ситуациях встреча непосредственно с самим владельцем проекта иногда может способствовать отмене всех этих идиотских требований, за исключением одного - конечного срока. Однако, если менеджер обладает официально утвержденными полномочиями, освобождающими его от необходимости следовать всяким смехотворным правилам (которые сами по себе могут быть серьезной причиной нарушения сроков выполнения проекта), может оказаться возможным завершить безнадежный проект в соответствии с плановым сроком.
И, если владельца проекта можно убедить в том, что необходимо выделить некоторые дополнительные средства на приобретение оборудования, инструментальных средств или даже на еженедельную пиццу для проектной команды, то менеджеру проекта обычно удается их получить, даже если все скупердяи в организации будут делать все возможное, чтобы не допустить этого.
Очевидно, не все владельцы проектов в такой степени расположены к сотрудничеству и не все обладают достаточно высоким положением в организации. Но главное заключается в следующем: идентифицировать владельца важно для любого проекта, а для безнадежного важно вдвойне. Мой опыт говорит о том, что в большинстве случаев владелец проекта - это друг, а не враг. В интересах владельца разрезать красную ленточку и избавиться от бюрократических рогаток, что почти всегда является благом для менеджера проекта.
Вместе с тем не надо забывать, что владелец проекта может быть совсем не тем человеком, который будет реально использовать разработанную систему, и вовсе не он один может иметь политическое влияние на ход выполнения проекта. Следует учитывать влияние и других «игроков», которые рассматриваются ниже.
Как было сказано выше, бывают ситуации, когда «приглашение» участвовать в безнадежном проекте сопряжено с опасностью поставить будущее продвижение по службе в зависимость от успеха проекта и того признания, которое он получит. Зачастую это связано с реинжинирингом - например, «Только те люди, которые возглавят этот невероятно сложный проект реинжиниринга Total System 2000, возглавят и сам Мега-Банк в XXI столетии!» Если вы оказались в подобной ситуации, помните, что ключевым фактором здесь является политика. Те люди, которые в конечном счете делают ставку на успех безнадежного проекта, могут сами в нем и не участвовать. Тот менеджер, который инициирует безнадежный проект реинжиниринга, может рассматривать его просто как возможность сделать себе карьеру, наплевав на судьбу, которая ожидает участников проектной команды.
Если вы помните каждое слово из «Принца» Маккиавелли, и если политические игры доставляют вам удовольствие, то такие безнадежные проекты как раз для вас. Однако большинство профессиональных разработчиков ПО вряд ли читало «Принца» после окончания колледжа (или вообще никогда) и, помимо своей неискушенности в политике, они просто испытывают отвращение к ней самой и абсолютное неуважение к тем людям, которые увлекается политикой. Если это так, почему же тогда находятся люди, готовые участвовать в проекте Total System 2000 Мега-Банка? Единственный правдоподобный ответ: они искренне верят, что других таких проектов больше не будет и что этот проект надолго обеспечит им успешную карьеру в Мега-Банке. Если вы на самом деле верите в это, то вы, должно быть, верите также, что свиньи умеют летать.
В большинстве ситуаций, которые мне приходилось наблюдать, угроза для карьеры является неотъемлемым свойством обсуждаемой ранее культуры «Морского Корпуса». Хорошо это или плохо, в данный момент не имеет значения; важно то, что это непреложный факт. Если такая угроза имеет место в вашем первом безнадежном проекте, то, вероятно, то же самое будет во втором, третьем и четвертом. Когда вы только начали работать в какой-либо компании, вы еще слишком простодушны, чтобы всерьез задуматься над долгосрочными последствиями такой политики, но рано или поздно вам придется с ними столкнуться. В этой ситуации у вас только две возможности: принять все как есть или уйти.
Технические специалисты и менеджеры проектов часто жалуются, что их корпоративная бюрократия снижает продуктивность работы и вносит ненужные задержки в процесс разработки ПО. Чем крупнее организация, тем сильнее пускает в ней бюрократия свои корни - особенно в тех организациях, где служба стандартов требует строгого соблюдения требований SEI-CMM или ISO-9000. Аналогично, департамент персонала может использовать процедуры скрупулезной проверки каждого вновь принимаемого на работу сотрудника или стороннего разработчика, привлекаемого к участию в проекте.
Безнадежные проекты нередко предоставляют возможность обойти некоторые, если не все, бюрократические рогатки - и этого достаточно, чтобы раздраженные бюрократией разработчики ПО принимали участие в таких проектах. В крайнем случае проектная команда даже перебирается в отдельное здание, где они могут выполнять свою работу, не отвлекаясь на обычную бюрократию. Даже в менее экстремальной ситуации безнадежный проект зачастую дает возможность свои собственные средства и языки программирования, осваивать новые технологии наподобие объектно-ориентированного программирования, а также сокращать большинство громоздких процедур и объем документации, которые в обычных условиях требуются в полном объеме. Не менее важно, что менеджер проекта зачастую получает гораздо большую свободу действий в подборе участников проектной команды, чем в обычных условиях.
В лучшем случае все эти перемены могут сделать безнадежный проект своего рода цивилизованным экспериментом, поскольку отвергается или смягчается целый ряд ограничений на процедуры, технологии или людские ресурсы, которые обычно угрожают превратить проект в безнадежный. И, если безнадежный проект будет иметь шумный успех, он может послужить катализатором процесса внедрения используемых технологических и управлеченских новшеств во все другие проекты, выполняемые в организации. И наоборот, если проект проваливается, это может послужить подтверждением того, что «стандартные» бюрократические процедуры, в конце концов, не так уж и плохи.
В любом случае, подобная ситуация является вполне благовидным предлогом для участия в проекте. В некоторых организациях ряд разработчиков считает своим долгом всегда участвовать в подобных проектах, поскольку это единственный способ избежать бюрократических ограничений.
Некоторые организации, не допускавшие в прошлом никаких безнадежных проектов, в 90-е годы оказались вынуждены сделать это просто по причине возросшего уровня конкуренции, связанного с глобализацией рынков. Вторичными факторами в данном случае являются глобальные телекоммуникации (включая Internet) и правительственные решения, открывающие ранее закрытые сектора рынка и ликвидирующие специальные тарифы и квоты.
Для некоторых организаций все это не так уж и ново. Автомобильная и электронная промышленность, например, имеют дело с высокой конкуренцией с начала 70-х годов. Однако, что касается других организаций, появление европейских и азиатских конкурентов на североамериканском рынке оказалось для них настоящим шоком. Когда высшее руководство осознает реальность серьезной конкуренции, оно может решиться на различные радикальные меры от даунсайзинга до реинжиниринга, но может также решить встретить конкурентов во всеоружии с новым продуктом или услугой, которые, в свою очередь, потребуют для своей поддержки создания новой, претенциозной системы. Вот вам, пожалуйста, и безнадежный проект.
Такие проекты часто сопровождаются кошмарными картинами, которые рисует высшее руководство - например, в случае неудачи неизбежны увольнения или вообще банкротство корпорации. И, как будет сказано ниже, это может оказаться основным оправданием участия в таких проектах.
Конкуренция на расширяющемся рынке зачастую вызывает защитные меры, но может также привести к активной и агрессивной политике - «Если мы создадим эту новую систему с двухбайтовыми символами, тогда мы сможем продавать наши продукты в Японии». Аналогично, появление принципиально новой технологии может вызвать у компании, которую вполне устраивают продукты, созданные с помощью прежней технологии, защитную реакцию; либо может привести к смелому решению использовать новую технологию для получения преимущества в конкурентной борьбе. В то время, как писалась эта книга, технологии, подобные Java или World Wide Web, представляли собой очевидный пример такого феномена. Самое замечательное в нашей индустрии то, что такие технологии появляются каждые несколько лет.
Если реакция корпорации на новую технологию является в основном защитной по своей природе, то безнадежный проект может быть результатом попытки выжать из старой технологии гораздо больше, чем она может дать. Поэтому, если организация вложила в старую технологию и соответствующую инфраструктуру слишком много средств, чтобы совсем от нее отказаться, она может попытаться перепрограммировать свои старые системы, потребовав при этом, чтобы программисты нашли способы сделать их в десять раз производительней и привлекательней.
Многие безнадежные проекты данной категории связаны с применением в первый раз новых технологий. Вспомните первые проекты в вашей организации, связанные с объектно-ориентированной технологией, технологией «клиент-сервер», реляционными базами данных или Internet/Java; некоторые из них носили экспериментальный характер и имели целью извлечение потенциальных выгод из новой технологии, однако, другие, вероятно, были ответом конкурентам, внедрившим такую же технологию. В последнем случае такие проекты могут быть непомерно большими, а также отягощенными чрезвычайно агрессивными планами и бюджетами.
В то же время самым серьезным фактором безнадежности проекта, помимо его масштаба, плана и бюджета, является попытка использовать неопробованную технологию в критически важных приложениях. Даже если технология в принципе применима, она может не годиться для крупномасштабного применения; никто не знает, как использовать ее преимущества и избежать ее недостатков; у поставщика нет опыта ее поддержки и т.д., и т.п.
Хотя все это может восприниматься участниками старой проектной команды (теми, кто помнит «старое доброе время» языков FORTRAN II и Ассемблера) как неприятный опыт, важно помнить, что молодые технари и менеджеры предпочитают
эти новые технологии именно потому, что они новые. И это те же самые люди, которых я ранее характеризовал как наивных оптимистов по отношению к тем условиям ограниченных планов и бюджетов, в которых они работают. Что же удивительного в том, что все работают до позднего вечера и в выходные, пытаясь придать экспериментальной новой технологии некоторое подобие работоспособной, а проекты при этом вырождаются в безнадежные?
Разница между акционерами и заинтересованными лицами может показаться чисто теоретической, но на самом деле она важна. Заинтересованные лица - это те, кто имеет свою «долю» в конечных результатах проекта, даже если они не участвуют непосредственно в принятии решений. В этом смысле заказчики, владелец проекта и другие акционеры также являются заинтересованными лицами.
Другими заинтересованными лицами могут быть члены руководящей иерархии, которым придется отказаться от использования своей старой информационной системы, если новая система будет сдана в срок. Они могут также быть членами различных объединений, поставщиками, заказчиками или конкурентами. Они могут даже быть другими сотрудниками IT-подразделения, поскольку если безнадежный проект завершится успешно, это может повлиять на методы, средства и другие аспекты «нормальных» проектов. Paul Neuhardt отмечает другую общую категорию заинтересованных лиц:
Не стоит забывать про «узкий круг» тех людей, которые вроде бы не имеют прямого интереса в проекте, однако имеют влияние на его участников, мнение о том, что следует делать и горячее желание навязать это мнение всем окружающим. Известные также, как «кабинетные советчики», эти люди часто проводят время, нашептывая мягким и действующим на подсознание тоном на ухо тем, кто принимает решения, и могут довольно быстро сделать из друга врага, причем так, что вы об этом и не узнаете. Это случается в любой политической организации от Белого Дома до Конгресса и в любой компании, где работает больше 3-х человек. Даже если у них нет явных интересов в проекте, их лучше иметь среди своих сторонников. Такими людьми могут быть старые одноклассники, вице-президент по продажам, который имеет свое мнение по любому вопросу и нахально верит в то, что он всегда прав, или преданный секретарь, проработавший на своем месте 20 лет, который «все это уже видел» и знает, «что на самом деле нам нужно».
Другими словами, если вы хотите иметь дело с г-ном Клинтоном, то вам не стоит ссориться с г-жой Клинтон.
Заказчик - это как раз тот человек или, во многих случаях, группа людей, которые будут использовать разработанную систему после завершения проекта. Во всем мире такого человека или группу обычно называют «пользователями». Заказчики могут в свою очередь быть и владельцами безнадежных проектов, однако в большинстве случаев они являются административными или канцелярскими работниками, которые будут взаимодействовать с разработанной системой и эксплуатировать ее.
Политические аспекты, связанные с ролью заказчиков, рассматриваются в большинстве книг по управлению проектами, и я не собираюсь обсуждать их детально; достаточно сказать, что в безнадежных проектах политика имеет гораздо большее влияние. Мы знаем, например, что от заказчика обычно исходят детальные требования к системе, поскольку владелец (и другие различные руководители высокого уровня) имеет весьма небольшой опыт практической работы с бизнес-приложениями (или не имеет его совсем) и склонен окидывать взглядом эти проблемы с высоты 30.000 футов. Но, несмотря на необходимость непосредственного взаимодействия с заказчиком/пользователями для выявления детальных требований к системе, мы знаем, что во многих проектах владелец (или другие менеджеры) не рекомендуют участникам проекта общаться с пользователями, поскольку «они слишком заняты» или «я сам могу сообщить вам все необходимое относительно их требований», или в ход идут еще какие-нибудь отговорки. В конечном счете, мы знаем, что в «нормальных» проектах пользователи могут полностью саботировать конечные результаты, отказываясь их использовать или утверждая, что они не соответствуют их требованиям.
Все это в равной степени справедливо и для безнадежных проектов, с одной дополнительной оговоркой: пользователи могут ничего не знать относительно той экстраординарной политики, ограничений и давлении, которому подвергается безнадежный проект. Может произойти настоящая катастрофа, если кто-нибудь из проектной команды подойдет к пользователю и скажет: «Я был бы очень признателен, если бы ты смог прервать сейчас твою работу и рассказать о своих требованиях, потому что если проект не будет выполнен в срок, то вся компания обанкротится. Но разумеется, даже если проект закончится успешно, ты все равно останешься без работы, поскольку основная задача нашей новой системы - способствовать проведению обширного даунсайзинга, который сократит весь твой канцелярский департамент из 700 человек».
Постольку, поскольку существуют потенциальные противники безнадежного проекта, существуют и сторонники - включая таких, которые обладают столь большой властью и готовностью оказать помощь, что их называют защитниками. Нет ничего лучшего во всей вселенной, чем защитник, который одновременно является и владельцем проекта; защитниками могут также быть заказчики, акционеры и заинтересованные лица. Тем не менее, защитники обычно оказываются вне традиционного круга политических игроков проекта. Защитник может быть заинтересован в успехе молодого менеджера проекта - своего протеже; его интерес может быть также связан с успехом всего проекта в целом ввиду того влияния, который это оказывает на репутацию и доверие к IS/IT-подразделению или всей организации. Гораздо чаще защитник бывает заинтересован в новой технологии типа «серебряной пули», с помощью который менеджер безнадежного проекта надеется сотворить чудеса - то ли это Java, объектно-ориентированная технология или новое средство разработки приложений «клиент-сервер», защитник мог ранее посещать презентации этой технологии или даже быть одним из тех, кто предложил использовать ее в безнадежном проекте.
У каждого проекта могут быть один или два защитника, но только безнадежным проектам они действительно
необходимы. Это следует, очевидно, из предыдущего обсуждения: у подобных проектов и без того хватает критиков и противников, не считая тех, кто будет пытаться предвосхитить каждое решение менеджера проекта. Во время работы над проектом не раз будут возникать ситуации, когда кто-нибудь на совещании у руководства вздумает пожаловаться, что «эти чокнутые из Проекта Титаник уже заказали семь копий Visual Basic Enterprise в обход принятого порядка заказов. Но мало этого, так менеджер проекта еще истратил в последнюю пятницу целых 32,98$ на гамбургеры и жареный картофель для своей команды. С какой стати я в своем офисе должен был нюхать, как пахнет этот картофель?! Мы не можем позволить им с таким вопиющим пренебрежением относиться к принятым в компании правилам!» Защитник в такой ситуации способен прервать эту чепуху и сказать: «Поверьте мне, может быть, эти ребята и чересчур смелые, однако они сделают свою работу.
Оставим их в покое.»
Разумеется, если защитник не пользуется большим авторитетом в политических кругах организации, то ничего хорошего из этого не получится - не имея такого авторитета, он вообще не может быть защитником. Это означает, что защитник, как правило, имеет многолетний стаж работы в организации, он старше и мудрее, чем нетерпеливые менеджер проекта и его добровольные участники, у которых все еще достаточно выносливости, чтобы месяцами работать по 18 часов в день.
Подведем итог: защитник более важен для проекта, чем любая, самая новейшая методология или супермодный язык программирования. В отсутствие защитника, способного отстоять право проектной команды игнорировать бюрократические правила и поддержать решение использовать достаточно рискованные методы и средства, безнадежный проект будет всего лишь единичным жалким экспериментом. Я бы поостерегся выполнять такой проект. Если же ваш защитник является также владельцем проекта, и
не существует каких-либо других заслуживающих внимания акционеров, и если ваш владелец/защитник - достаточно авторитетная фигура для всех заинтересованных лиц, то вы можете позволить себе роскошь игнорировать всю эту политику; в то время как обычно проблемы, связанные с политикой, ложатся на плечи менеджера проекта, остальные участники проектной команды должны иметь хотя бы минимальное представление о составе действующих лиц на политической арене.
В безнадежных проектах одним из важных вопросов, связанных с человеческими ресурсами, является природа и степень взаимодействия между менеджером проекта и остальной командой. По моему убеждению, идеальная ситуация – когда у менеджера проекта нет секретов от команды, и каждый участник команды знает о проекте все. Это означает, что каждый
участник команды располагает текущей, актуальной
информацией относительно состояния проекта, первоочередных приоритетов, рисков, ограничений, политики и т.д.
При таких условиях в команде может быть создана атмосфера взаимного доверия и доброжелательности. Если участники команды прилагают экстраординарные усилия к работе над проектом и приносят в жертву личную жизнь, для них было бы крайним разочарованием обнаружить, что менеджер проекта скрывает от них важную информацию или играет за их спиной в политические игры. Поскольку в безнадежном проекте все процессы протекают интенсивнее и быстрее, чем в «нормальном», выше вероятность, что участники команды обнаружат утаивание информации или непристойные политические игры вокруг них.
Очевидный контраргумент против такой философии заключатся в том, что менеджер должен оберегать команду от посторонних помех, особенно от каждодневных мелочных политических игр, которые происходят вокруг проекта. В большинстве случаев участники команду по достоинству оценят возможность освободиться от политики; однако они также нуждаются в уверенности, что в ответ на прямой вопрос менеджер не станет темнить или лгать им. В большинстве проектов, нормальных или безнадежных, регулярно проводятся совещания, на которых обсуждается состояние проекта и поднимаются различные острые вопросы; если участники команды удовлетворены тем, что они всегда могут узнать о том, что происходит в проекте, тогда они спокойно смогут на 99% сконцентрироваться на своей непосредственной работе.
Уровень коммуникации между отдельными
участниками команды также весьма важен, особенно в таких сложных ситуациях, когда участники команды прежде не работали вместе. Очень важно, чтобы внутрикомандное взаимодействие оберегалось от постороннего вмешательства, тогда можно будет поддерживать честный и откровенный обмен информацией. Для большинства сегодняшних проектов это обязательно подразумевает наличие электронной почты и различных средств групповой работы, наподобие Lotus Notes. Однако, помимо этого, менеджеру проекта следует планировать еженедельные совместные завтраки или обеды, чтобы участники команды могли пообщаться друг с другом вне стен офиса.