Глава 21
Выход на финишную прямую
Она появилась после десяти месяцев отсутствия так же неожиданно, как исчезла. Просто однажды дверь в ее кабинет оказалась открытой. И она, как всегда, сидела на своем диванчике у окна и смотрела, как на улице идет дождь.
Первым желанием мистера Томпкинса было… впрочем, он и сам не знал, каким оно было. Но сразу после этого у него появилось второе желание. «Где, черт возьми, ты пропадала?» — хотел он спросить спокойным тоном, но у него ничего не вышло.
— Вебстер… — она посмотрела на него с застенчивой улыбкой.
— Черт возьми, Лакса, пока тебя не было, тут такое творилось! Ты хоть бы позвонила разок за все это время!
— Я вернулась, Вебстер, — она встала и пошла ему навстречу.
— Ну и где ты пропадала? — повторил он.
— На Бермудах. По крайней мере, в последнее время. Как тебе мой загар?
— Отвратительный. Лакса, я действительно на тебя зол. Серьезно.
— А я-то думала, что он соскучился.
— Я зол, рассержен, разочарован, раздражен, сердит, разгневан, взбешен, я просто в ярости, я…
— Так ты скучал по мне. Я тоже скучала по тебе, Вебстер, — сказала Лакса и поцеловала его.
Мистер Томпкинс непроизвольно отступил на шаг. Наконец он снова обрел дар речи:
— И ты думаешь, что это все извиняет? — уже тише спросил он. Конечно же, это все извиняло.
— Вебстер.
Он снова почувствовал, что начинает злиться.
— Мы так о тебе волновались! Мы даже не знали… А тут все вообще встало с ног на голову. Твоя помощь пришлась бы очень кстати.
— О, господи. Я обо всем уже знаю. Бэллок?
— Да, черт возьми. Бэллок. Хоть бы посоветовала мне, как себя с ним вести, по меньшей мере.
— Можешь о нем больше не беспокоиться, дорогой. Я уже избавила вас от Бэллока.
— Ты?
— Да, я. Он уехал и в обозримом будущем здесь не появится.
— И чем же мы обязаны такому невероятному везению?
— Стечение обстоятельств. Бедняга подхватил где-то редкий вид герпеса.
— Надеюсь, это серьезно.
— Не представляет угрозы для жизни, а так — премерзостное заболевание.
— Не тот ли это вид герпеса, который поражает… э-э-э… определенные органы?…
— Боюсь, что именно этот. У него как раз случился приступ. Сильнейшая боль, я думаю. Впрочем, он уже на пути в клинику, где о нем позаботятся. Клиника находится в Атланте, там этот вид герпеса лечат патентованными средствами.
— Боже мой… но ты уверена, что он будет долго лечиться? — самое главное, чтобы зловредный министр отсутствовал еще около девяти месяцев, до окончания контракта.
— Целый год. Конечно, боль пройдет гораздо раньше — как только они начнут курс лечения. Но уехать оттуда он не сможет, потому что ему нужно будет посещать процедуры. Так что, я надеюсь, больше Аллэра мы не увидим.
И тут мистера Томпкинса осенила ужасная мысль:
— Постой-ка! Как же так получилось, что это совпало с твоим появлением? Неужели эта болезнь и твой приезд?… — он не закончил и молча уставился на нее.
Она улыбнулась своей очаровательной кривоватой усмешкой:
— Неужели мне придется рассказать тебе всю правду? У меня есть отвратительная привычка — ничего не могу с ней поделать. Вебстер, я подсыпаю людям в напитки всякую всячину.
— Значит, герпес попал к нему через какой-то напиток?
— В общем-то, да. Он любит лимонад. А я за время путешествий приобрела замечательный порошок, всего-то щепоточку — и в пятницу высыпала этот порошок в его лимонад. В субботу он уже верещал от боли. Тогда я позвонила в Джорджию, в ту самую клинику. Телефон мне дал тот же человек, который продал порошок. Ну да это неважно. Я позвонила, и сейчас Аллэр уже летит в Атланту на корпоративном самолете, а я сразу же выехала из Корзака сюда, в Айдриволи.
— Все шесть команд А уже давно зомби, — говорил мистер Томпкинс. — Они уже давно скончались, просто из-за определенных политических соображений мы поддерживали в них видимость жизни. А теперь, поскольку наш обожаемый министр Бэллок отсутствует…
Аристотель Кенорос захихикал.
— …то политических соображений больше нет. И теперь мы можем сделать то, что Белинда требовала сделать еще несколько недель тому назад: распустить команды А.
— Я говорила «распустить», Вебстер, но ты не можешь использовать это слово, как официальный термин. И вообще, нам надо быть осторожнее и прежде, чем что-то делать, хорошо подумать, как мы будем объяснять это нашим разработчикам.
— Я понял, Белинда. Итак, нужно представить это так, чтобы никто из наших ребят не потерял лицо. Проекты А, конечно, зомби, но люди, которые над ними работают, — вовсе нет. У них есть чувства, у них есть профессиональная гордость. Как же нам все это подать? У тебя есть идеи, Мелисса?
— На самом деле ты их спасаешь, Вебстер. Они все прекрасно знали с самого начала, что только одна команда выйдет победителем и выпустит готовый продукт. Команда PMill-A, к примеру, уже догадывается, что стать первой из трех ей не удастся. Думаю, что и остальные команды А испытывают подобные чувства. Так что нам надо представить это, как спасение ценных профессиональных ресурсов. Мы снимаем их с ненужной работы и переносим туда, где их участие действительно нужно и даже необходимо.
— Да, что-то в этом роде, — поддержал девушку Гэбриел Марков, — Нельзя сейчас просто взять и распределить людей из команд А по командам Б и В. Если мы так поступим, то половина людей будет рассматривать это, как второе поражение. — Он встал, пересек комнату и подошел к доске для рисования. — Я бы предложил создать новые команды под руководством наших шести главных руководителей проектов и укомплектовать их сотрудниками из всех трех групп, в том числе и команд А.
Все собрание руководителей молча созерцало диаграмму.
— Это только начало, — сказал им мистер Томпкинс. — Гэбриел, ты только что изобразил вариант архитектурных изменений всей нашей системы. Мы проектируем и создаем программы, но сами мы — тоже живая система. И ты только что перепроектировал ее. Но прежде чем мы перейдем к фазе реализации, я хотел бы, чтобы мы поступили с этим вариантом изменения архитектуры системы так, как это принято в командах Б и В. — Он обернулся к Кеноросу. — Аристотель, ты нам поможешь?
— О'кей, босс, — весело улыбнулся тот. — Ну-ка, ребята, превращайтесь в архитекторов! У нас есть куча работы.
После того, как министр Бэллок выбыл из игры, никто не мог запретить мистеру Томпкинсу вернуться к изначальным срокам сдачи проектов. Что он и не замедлил сделать. После этого по Айдриволи буквально пронесся вздох облегчения. Теперь у всех команд Б и В появился вполне реальный шанс успеть сделать все вовремя, даже у самых крупных проектов. Что же касается маленьких, таких как QuickerStill, то они должны были сдать свои системы задолго до указанного срока. На самом деле, у мистера Томпкинса еще оставалась надежда, что один из этих небольших проектов завершится к 1 июня. Конечно, Бэллока здесь уже не было, но мистер Томпкинс все равно не мог забыть об этой проклятой дате. Он даже попросил миссис Бирцих, чтобы она не снимала в его кабинете отсчет дней до 1 июня. Сейчас, в середине февраля, там значилось:
Осталось всего 106 дней до «дня Д»!
После перегруппировки проектов мистеру Томпкинсу уже почти ничего не оставалось делать, кроме как смотреть и ждать. Он весь день расхаживал по Айдриволи и разговаривал с людьми, выслушивая всевозможные сплетни, подбадривал, выражал одобрение хорошей работой, а самое главное — выискивал малейшую возможность поучаствовать и помочь. К слову сказать, такая возможность выпадала довольно редко. Проекты твердо шли к намеченной цели, и постепенно мистер Томпкинс стал чувствовать себя чуть ли не лишним.
Белинда, как оказалось, тоже испытывала похожие чувства. С каждым днем она все больше времени проводила у себя под пальмой, читая книги. Более того, она снова поселилась на улице, так что в здании отеля ее можно было увидеть, только если погода на улице становилась совсем уж ненастной. Однажды мистер Томпкинс пришел к ней в парк и принес с собой две коробки для ленча.
— Пообедаем? — предложил он ей. — А то совсем нечего делать.
Белинда ухмыльнулась:
— Твоя работа уже закончена, Вебстер. В идеале так и должно происходить, только почему-то почти никогда не получается. Теперь ты можешь только взять бинокль и смотреть, как разворачиваются события. Как генерал Патгон, помнишь?
Мистер Томпкинс вспомнил, как ему понравилась история об этом генерале и его тактике, когда он только что услышал ее. Что может быть лучше, чем взирать на то, как один за другим сбываются твои планы! На деле все оказалось не так уж замечательно. Мистер Томпкинс просто с ума сходил от того, что не участвовал в активной жизни проекта. Интересно, не испытывал ли подобных чувств и Паттон?
Поев с Белиндой в парке, мистер Томпкинс отправился в библиотеку и взял там видеокассету о фильмом о Паттоне. Потом он отправился домой и там, в тишине и спокойствии, стал смотреть фильм. К его удивлению, Белинда немного ошиблась в изложении событий. Да, Паттон наблюдал битву в бинокль, и только. До этого он уже распределил маневры танковых подразделений, обеспечил поддержку с воздуха, распорядился о порядке и сроке подвоза боеприпасов на позиции, высчитал правильный момент для начала сражения. Далее, когда сражение началось, он просто стал безучастным наблюдателем. Но в конце он отложил бинокль и послал курьера к генералу Бродли с новым указанием. Он немного поменял план в ходе сражения. Он вмешался. Вот это настоящий руководитель! Ты заранее скрупулезно планируешь битву, обучаешь младший персонал, как вести себя во время сражения, и в результате все проходит без сучка, без задоринки. Остается только смотреть… но если вдруг происходит хоть малейшее отклонение от задуманного тобой плана, ты тут же реагируешь. Ты вмешиваешься в процесс и меняешь план.
— Все идет настолько гладко, что я уже начала скучать, — сказала мистеру Томпкинсу Молли Макмора, руководитель команды QuickerStill-B. — Разумеется, это хорошо. У процесса разработки архитектуры, который предложил нам Кенорос, есть один замечательный побочный эффект. У нас теперь есть превосходные метрики, с помощью которых можно наблюдать за ходом этой части проекта. Мы точно знаем, сколько в нашей системе модулей, и можем предсказать, сколько в них будет строк кода, сколько ожидается дефектов, как много времени уйдет на ликвидацию каждого дефекта, сколько мы потратим на каждую отдельную часть работы…
— Но как же вы можете с точностью угадать количество строк кода в несуществующем модуле?
— Дело в том, что половина всех запланированных модулей уже готова. И поскольку мы уже отработали технику на четырехстах первых модулях, то теперь нам несложно предсказывать, как пойдет работа над остальными.
— Но что действительно дает чувство контроля над разработкой, — продолжала Молли, — так это план по сборкам системы. Пошли, посмотришь сам.
Она провела его в комнату, где обычно собиралась для мозгового штурма команда QuickerStill-B. Там на стене висела разноцветная диаграмма.
— Изначально мы предполагали поставить всю систему за шестьдесят сборок. Каждая сборка представляет собой часть общей системы и привносит в нее необходимую функциональность. Сегодня мы выпускаем элемент под номером двадцать четыре. Как ты видишь, на диаграмме показано, что он состоит из четыреста девяти модулей. А вот элемент двадцать три, который мы закончили на прошлой неделе… — она нашла диаграмму для этого блока, — состоял из трехста девяносто двух модулей. А это значит, что в последнем блоке было семнадцать новых модулей. Вот здесь обозначены идентификатор и размер для каждого модуля.
— Здорово.
— Разумеется, здорово. Мы высчитали, сколько процентов всей системы реализовано в каждом блоке. Помнишь, мы предположили, что вся система составляет тысячу пятьсот функциональных единиц. Правда, постепенно мы пришли к выводу, что их больше — тысяча восемьсот пятьдесят. Когда мы выпустили первый блок, то оказалось, что в нем реализовано около двух процентов всей функциональности, то есть около тридцати семи функциональных единиц. Во втором блоке было добавлено еще тридцать единиц, поэтому, когда мы закончили над ним работать, все знали, что мы уже сделали шестьдесят семь единиц из тысячи восьмисот пятидесяти, или три и шесть десятых процента. И вот на этой диаграмме показана статистика по каждому блоку, которые мы выпускали.
— Каждый столбец на графике — это очередная сборка. Те, которые мы уже завершили, закрашены. Все приемочные тесты мы тоже разбили на части, так что сборка не считается завершенной, пока не пройдут приемочные тесты.
— Иными словами, — сказал мистер Томпкинс, разглядывая диаграмму, — когда элемент номер двадцать четыре пройдет приемочные тесты, вы будете знать, что уже сделали сорок шесть процентов всей работы.
— Да. Сейчас новая сборка выходит каждые два-три дня. — Молли отошла от диаграммы. — Теперь ты знаешь, почему я так уверенно говорю, что наш проект будет закончен к последней неделе июня. Все дело в том, что мы прислушиваемся к тому, как проект сам рассказывает нам, насколько далеко мы продвинулись в своей работе.
Мистер Томпкинс печально смотрел на дату выхода проекта. Как бы он хотел последний раз посмеяться над Бэллоком, выпустив хоть один проект 1 июня!
— Слушай, а нельзя ли каким-то образом немного ускорить разработку? Не то чтобы я жаловался… нет-нет, вы делаете свою работу просто замечательно, но я все же…
— Я знаю, о чем ты думаешь, — весело улыбнулась Молли. — 1 июня, да? Я тоже иногда об этом вспоминаю. Честно говоря, не представляю, как нам это сделать. Мы можем довольно быстро выпускать новые сборки и даже слегка ускорить этот процесс, но как же все остальное? Вот, смотри, — она показала ему другую диаграмму, пришпиленную тут же на стене. — Вот так мы тратим время на разработку каждого модуля: время кодирования, время на инспектирование кода, блочные тесты, документация, ну и так далее.
— А нельзя ли выкинуть отсюда что-нибудь?
Она еще раз посмотрела на диаграмму
— Я ничего такого не вижу. Больше всего времени тратится на проверку кода. Мы проверяем каждый модуль, как только закончится написание программного кода. Как правило, три человека делают это в течение часа. Не знаю, чем мы можем поступиться, но уж точно не проверкой кода.
Что-то в ее тоне заставило мистера Томпкинса насторожиться. Так-так… Он вспомнил мысли, которые пришли к нему во время поездки в горы. Не зацикливаться на том, что не знаешь. Обрати внимание на то, в чем ты, казалось бы, абсолютно уверен.
— А почему ты так уверена, что мы не можем не проверять программный код? — обратился он к Молли.
— Потому что это правило существует уже последние десять лет, Вебстер. Проверка кода — самый дешевый способ избежать ошибок. Если ты не отловишь их во время проверки, то потеряешь больше времени на тестировании, так что выгоды все равно никакой не будет, скорее, наоборот.
Как раз в этот момент к ним подошел Аристотель Кенорос.
— Точно, — поддержал он Молли. — Это очевидно. Самый простой и дешевый способ избежать ошибок в коде — это проверка.
— Кстати о качестве. Вот мы доподлинно знаем, что наши программисты пишут хороший код, — гордо сказала Молли, подходя к огромной красной надписи на дальней стене комнаты. Надпись гласила:
Ровно 14!
— Четырнадцать чего? — удивился мистер Томпкинс.
— Четырнадцать проверок кода без единой ошибки, — Молли прямо светилась от радости.
— Это впечатляет, — пробормотал мистер Томпкинс. — Я полагаю, мы вполне могли бы сэкономить те сорок два человекочаса, которые были затрачены на эти проверки кода, а на качестве продукта это никак бы не отразилось. Ведь ошибок все равно не было.
— Думаю, ты ошибаешься, — несколько раздраженно ответила Молли. — Именно благодаря проверке кода мы добились такого высокого качества работы.
— Только не благодаря последним четырнадцати, верно? Без них вполне можно было бы обойтись.
— Ммм… и тем не менее я могу предоставить данные, которые докажут, что проверка кода приносит проекту много пользы. Я не уверена сейчас в том, что помню цифры,…
— Прекратите, — прервал ее мистер Томпкинс. Он чувствовал, что идет по верному следу.
— А?
— Прекратите проверять код. Просто выбросьте эту фазу из процесса разработки.
— Подождите! — застонала Молли. — Мы не можем так поступить! Аристотель, ну скажи хоть ты ему. Скажи ему то же, что ты говорил нам о важности исправления ошибок во время проверки кода. Он же с ума сошел.
На лице Кенороса появилась странная улыбка.
— Говоришь, он с ума сошел? Это может быть. Только это совсем не значит, что он не прав. Вебстер, я даже не думал о такой возможности, пока ты сейчас об этом не заговорил. Действительно, если во время проверок никто не обнаруживает ошибок, то мы не можем говорить о снижении стоимости исправления ошибок во время проверки!
— Ну, разве что в процессе проверки не были допущены какие-то грубейшие ошибки…
— Их не было, — быстро отреагировала Молли. — Мы проверяли и перепроверяли. Те модули, которые прошли через этот этап без каких-либо ошибок, так же хорошо проходили и тестирование. Так что это правда, ошибок в коде не было.
— Значит, проверка кода действительно просто потеря времени. Прекратите проверки.
Она посмотрела на Кенороса, ища поддержки.
— Ну, я даже не знаю… — начал было тот.
— Аристотель, там нет никаких ошибок, — перебил его мистер Томпкинс. — Именно поэтому мы так сейчас поступаем. Просто изначальное качество кода оказалось куда лучше, чем мы рассчитывали.
— Ммм…
— Вспомни, что ты сам говорил мне об ошибках. Они появляются не в самом модуле, а на «стыке» разных модулей?
— Да, помню.
— Так вот, значит, большинство ошибок — это ошибки взаимодействия, вот в чем дело. Значит, главные ошибки происходят во время проектирования системы. Было бы нелепо полагать, что во время проверки кода можно анализировать архитектуру всей системы. Это же твои собственные слова. Анализ дизайна должен происходить отдельно, тогда же нужно отлавливать ошибки, которые в нем присутствуют. Почему проверка кода считается эффективной? Потому что на этом этапе исправлять ошибки проектирования немного проще, чем во время тестирования. Но ведь наш процесс проектирования стал более формальным. Мы проводим тщательную проверку архитектурных решений, причем не во время написания кода, а в момент проектирования. Именно поэтому у нас практически нет ошибок. А значит, проверка кода — пустая трата времени.
— Может быть, ты и прав… — неуверенно начал Кенорос и стал себя убеждать. — Если ты прав, то получается, что проверка кода, на которую так полагается весь остальной мир программистов, — это всего лишь попытка найти и исправить ошибки в проектировании системы. А когда архитектура продумана и проверена достаточно хорошо, причем еще до того, как программисты начнут писать код, то проверять код просто незачем. Не могу сказать, что я абсолютно уверен в этом, но кое в чем я не сомневаюсь.
— В чем же?
— Нам нужно удостовериться, правильны ли наши предположения. Иначе какая же мы Лаборатория по управлению проектами?
Мистер Томпкинс сидел за столом, озадаченно уставившись на пустую страницу записной книжки, когда в дверях показалась Лакса Хулигэн.
— О, это ты, Лакса, — приветливо сказал он, слегка покраснев.
Он почти всегда краснел, когда оказывался рядом с этой удивительной женщиной. Затем опустил глаза на обидно пустую страницу.
— Ты подарила мне эту записную книжку несколько месяцев назад и сказала, чтобы я делал в ней записи каждый день. Записывать все, чему я в этот день научился, что нового и интересного открыл для себя. И ты знаешь, я ведь так и делал — почти каждый день. А сейчас я уже несколько недель подряд не знаю, что туда писать. Ты не знаешь, отчего так?
— Нет, — покачала она головой. — Не знаю. Давай, рассказывай все подробно.
— Я не знаю, чему я научился во время нашей эпопеи с Бэллоком. Если бы решил эту проблему сам, я бы вынес из этого какой-то урок. Что бы я ни сделал, все равно это был бы мой личный опыт. А так получается, что проблему я не решил. Это сделала за меня ты.
— И поэтому ты не можешь записать это в своей записной книжке?
— Нет. Потому что это странный способ решать проблемы. С моей точки зрения, ты появилась, как ангел, и решила все мои проблемы. В общем-то это вполне тянет на чудо. Как я могу это записать? «Если вам случится работать под руководством злобного придурка, надейтесь на чудо».
— А что бы ты хотел записать?
— Что-нибудь, что могло бы пригодиться и другим. В конце концов, мир полон неприятных персонажей, которые почему-то норовят оказаться выше тебя на иерархической лестнице. Таких, как Бэллок, а то и похуже. Я бы хотел записать рецепт, как можно найти выход в подобной ситуации.
— Может быть, Вебстер, такие ситуации просто безвыходны? Так тоже бывает. Скажи честно, ты ведь не надеялся найти способ избавиться от Бэллока самостоятельно?
— Пока еще нет, но, может быть, я все-таки мог бы что-то сделать?
— Ох, не думаю. Я не верю, что такую патологию можно «вылечить» снизу. Честно, Вебстер. Мне кажется, у тебя просто не было выхода.
— Наверное, ты права, — вздохнул он. — Наверное, выхода действительно не было.
— Может быть, это и есть урок, который ты вынес из этой ситуации.
С этими словами она ласково провела рукой по его волосам и вышла из кабинета. Мистер Томпкинс проводил ее взглядом и начал писать.
Из записной книжки мистера Томпкинса
О патологической политике (еще раз)
1. Эту патологию невозможно вылечить снизу.
2. Не стоит терять время или подвергать себя опасности, чтобы проверить предыдущий постулат на собственном опыте.
3. Иногда единственным выходом из ситуации становится выжидание. Попробуйте подождать, пока проблема не разрешится сама по себе или пока вы не найдете способ уйти от нее в сторону.
4. Чудеса, конечно, случаются, но лучше все же на них не рассчитывать.