Кабинет мистера Томпкинса выглядел так, как будто по нему прошелся хороший торнадо: везде валялись открытые книги, отчеты и листки бумаги, исписанные вдоль и поперек всевозможными вычислениями. Доска для записей тоже была заполнена до краев. Мистер Томпкинс, как в тумане, пытался собрать все важные записи и сделать на них необходимые пометки, но, похоже, эта работа была невыполнима. Да, такое утро запомнится надолго. В углу, на раскладном кресле, растянулся экс-генерал Марков. Он был ошарашен настолько, что даже не делал попыток помочь мистеру Томпкинсу разобраться с бумагами.

Впрочем, состояние мистера Томпкинса можно было описать тем же словом. Сделать столько всего в одно утро! Он едва ли сам мог в это поверить. М-да, повторить сей подвиг он решился бы только при условии, что ему предоставят долгий отпуск для того, чтобы прийти в себя. Тем не менее, каким бы суетливым и суматошным ни было это утро, у них на руках теперь был листок бумаги, исписанный торопливыми каракулями Т. Джонса Капоруса. Табличка из двух столбцов, где в первом стояло название продукта, а во втором — его размер в функциональных единицах. Это и были размеры каждого из разрабатываемых программных продуктов.

Продукт — Размер

Notate — 3000 функц.ед.

PMill — 2200 функц.ед.

Paint-It — 3800 функц.ед.

PShop — 6500 функц.ед.

Quirk — 3200 функц.ед.

QuickcrStill — 1500 функц.ед.

— Привет, мальчики, — в комнату вошла Белинда Бинда, которая не присутствовала на утренней встрече с консультантом, — Ух ты, похоже, вы неплохо пропели утро. У тебя в кабинете бомба взорвалась, а, Вебстер?

— Да. Некто Т. Джонс Капорус.

— Вот это да! Я слыхала о нем. Говорят, прервать его так же трудно, как остановить лавину.

Мистер Томпкинс и бывший генерал только устало кивнули.

— А что такое «функциональная единица»? — Белинда взяла в руки табличку с измерениями. — Погодите, не отвечайте. — Еще через минугу она повернулась к ним, глаза сияли. — Превосходно! Гэбриел, Вебстер, вы хоть понимаете, что здесь написано? Это же замечательно!

Генерал Марков покачал головой:

— Кажется, это довольно полезная штука. Наверное, ее где-то можно использовать… Но вот где и как…

Белинда просто прыгала от восторга.

— Нет, это же чудесно, замечательно, восхитительно! Только подумайте, как эти данные накладываются на модели, которые мы с вами рисовали! Вот тут мы с вами изображали поток работы, — она подошла к стене, на которой висела диаграмма, — но что конкретно перетекает из одного резервуара в другой? И что в них находится?

— Не знаю, — пожал плечами мистер Томпкинс, — что-то вроде «сделанности» или «готовности».

— Ну да, — подхватил экс-генерал, — какая-то абстрактная величина, которой мы измеряем работу.

— Да нет же, ничего вы не понимаете! Там находятся эти самые функциональные единицы. Смотрите сюда.

Белинда перевернула листок с таблицей и стала быстро чертить на обратной стороне.

— Любой проект можно paccматривать вот таким образом. По сути, проект — это клапан, — Белинда указала кончиком ручки на клапан посередине диаграммы, которую только что нарисовала. — Слева у нас резервуар, где находится продукт, который мы начинем разрабатывать. Справа — резервуар с готовым продуктом. В самом начале правый резервуар пуст, потому что мы еще ничего не сделали. А левый поначалу полон до отказа этими самыми функциональными единицами. Сколько их там? Давайте посмотрим — она снова перевернула листок, чтобы посмотреть на цифры, которые оставил после себя Капорус. — Вот, пожалуйста, к примеру пусть это будут три тысячи функциональных единиц проекта Notes — И Белинда написала эту цифру у левого резервуара.

— Далее давайте разобьем на составляющие суть работы нашего клапана — проекта. Нужно смоделировать процесс, учитывая деление программистов на команды, давление со стороны, сжатые сроки, уровень профессиональной подготовки, возможные отклонения от графика… в общем, кучу вещей. Все это мы моделируем в виде работы нижних труб, клапанов и резервуаров. И когда все это будет сделано, и мы запустим готовую модель, то функциональные единицы из левого резервуара начнут постепенно перетекать в правый через вот эту систему труб и клапанов. Проект можно считать завершенным, когда все функциональные единицы из левого резервуара окажутся в правом.

Всю оставшуюся часть дня они провели в кабинете, восстанавливая по обрывочным записям алгоритмы для вычисления размеров проекта, которые объяснял им Капорус. Одновременно они старались осмыслить ту лавину всевозможной информации, которую обрушил на них сегодня утром необыкновенный консультант. Дело в том, что, совершая свои сложные вычисления, этот достойный человек имел привычку бормотать себе под нос интереснейшие сведения, например: «Среднее приложение, разработанное в США в 1994 году, стоило около тысячи пятидесяти долларов за функциональную единицу», или «Поддержка готового программного продукта требует в среднем одного сотрудника на пятьсот функциональных единиц продукта», или «В программном продукте, который выпустили без отладки, будет содержаться около пяти и шести десятых дефектов на функциональную единицу» и т. п. Мистер Томпкинс честно старался записать все эти бесценные сведения, но писал он гораздо медленнее, чем говорил Капорус, поэтому многое так и осталось незаписанным. Сейчас они втроем просматривали каждый клочок бумаги, выискивая полезные сведения.

— А вот чего мы не знаем, — вдруг мрачно сказал экс-генерал, — так это производительности, с которой работают наши команды. Посмотрите, вот вилка производительности, которую озвучил Капорус: от двух до девяноста функциональных единиц в месяц. Интересно, к чему мы ближе — к двум или к девяноста?

— Понятия не имею, — честно признался мистер Томпкинс.

— Так можно посчитать, — ответила Белинда.

— Разумеется, можно, — не стал перечить Томпкинс. — Через некоторое время. Когда завершится первый проект, у нас появятся данные для того, чтобы как-то рассчитать производительность. Еще один проект — еще больше данных. А еще через несколько лет мы сможем ответить на вопрос Гэбриела совершенно точно. У нас будут данные по средней производительности труда в этой организации и всевозможные вариации вокруг этой цифры. Тогда можно будет производить любые статистические сопоставления производительности и размеров команды, размеров проекта, да чего угодно. Вот если бы такие данные были у нас сейчас… — он не закончил фразу и замолчал, размечтавшись о таком богатстве, как готовые метрики по различным проектам.

— Да ладно вам, ребята. Не нужно ждать несколько лет, — Белинда улыбалась им, как учительница улыбается неразумным первоклашкам. — Мы добудем все это уже на следующей неделе.

— И откуда же ты собираешься вытащить все эти данные? — взметнулся мистер Томпкинс.

— Да, Белинда, ты уж объясни нам, пожалуйста, — поддержал его генерал.

— Проще простого. Здесь ведь уже разрабатывали программные продукты и до нас, не так ли? Значит, должна была остаться какая-то отчетность.

Бывший генерал грустно покачал головой:

— Но мы не собирали никаких специальных данных, Белинда. Ничего такого, что могло бы сейчас пригодиться.

— Ну, по крайней мере, данные по зарплате-то у вас здесь есть!

— Конечно, есть, мы же платим людям деньги, значит, где-то в бухгалтерии должны быть и ведомости.

— Итак, мы знаем, сколько месяцев разрабатывался продукт. И мы знаем, над каким именно продуктом работали программисты. А если не помним сами, то можем найти, у кого спросить.

— Да, это можно было бы сделать. Узнать, сколько человеко-месяцев было затрачено на каждый проект. Правда, мы не узнаем, какую именно работу выполняли разработчики… только общие цифры по проектам, — уступил генерал Марков.