А теперь подумайте: таким ли уж неожиданным станет разрастание рамок в контексте отраженного в этом списке реального сценария? Мне так не кажется, и вам тоже не должно так казаться. И тем не менее, если речь об этом зайдет, воя и зубовного скрежета программистов не избежать. Как заставить их поверить, что вы во всеоружии и ваша позиция правильна? Лучше всего поставить их перед фактом, что разрастание неизбежно, и научить их справляться с этой проблемой. Вы руководитель, и это – ваша обязанность. Не поддавайтесь соблазну разнести «крайних» в других отделах – этим вы не приблизите завершение работы и не исправите ситуацию.
В своей немного устаревшей, но, тем не менее, сохраняющей значимость книге под названием «Managing the Software Process» Уотс Хэмфри (Watts Humphrey) сформулировал принцип, актуальный по сей день:
«Когда программисты берутся за оценку объема кода реализации какой-либо функции, результаты неизменно оказываются заниженными. Этому есть множество возможных объяснений. В этом контексте следует понимать, что их оптимизм есть относительно прогнозируемая функция состояния проекта»[35].
На самом деле, разрастание рамок объясняется очень просто – сказать, сколько времени и сил уйдет на создание очередной сногсшибательной программы, вплоть до ее первого выпуска и критической оценки, не может никто. Многие программисты соглашаются с двумя соображениями относительно проводимых ими первоначальных оценок, согласующихся с принципом Хэмфри; я сформулирую их в виде аксиом:
• любой процесс продлится дольше, чем вы надеетесь;
• всегда появляется что-то, о чем вы не подумали.
Вооружившись этими аксиомами и введенным Хэмфри понятием «состояния проекта», старайтесь контролировать разрастание и обязательно убедите ваших подчиненных в том, что вы человек проницательный, поскольку предсказывали такую возможность и учли ее в процессе тщательного планирования. «Тщательное планирование»! Звучит замечательно, но что же это означает в контексте выпаса котов? А вот что. Вернитесь к главам 1 и 2, еще раз пробегитесь по изложенным в них принципам и попытайтесь сделать их неотъемлемыми элементами своего характера. Помните, что лидерство происходит от сердца, а не от ума[36].
Конечно, и для мозга найдется работа – в частности, ему предстоит разработать методы контроля над разрастанием рамок проекта. Давайте рассмотрим типичный план проекта. Предположим, что, исходя из заданного набора требований, вы должны разработать проектное решение с расчетом на его последующую реализацию программными средствами. Элементарный, но наивный план иллюстрирует табл. 3.3.
Задача……Время выполнения (произвольные интервалы)
Анализ требований……А
Создание проектного решения……В
Реализация проектного решения……С
Тестирование программного обеспечения……D
Исправление ошибок……Е
Развертывание программного обеспечения……F
Руководствуясь таким планом, вы рискуете нарваться на кучу неприятностей. Будучи глубоко убеждены, что конечная дата сдачи проекта будет равняться сумме временных интервалов A+B + C + D + E + F, вы немало удивитесь, обнаружив, что это совершенно не так.
Рассмотрим более реалистичный план, показанный в табл. 3.4.
Задача……Время выполнения (произвольные интервалы)
Анализ требований……А
Обсуждение результатов анализа с сотрудниками отдела……В
Создание проектного решения……С
Макетирование проектного решения……D
Оценка макетов……Е
Пересмотр проектного решения……F
Реализация высокоуровневых объектов проектного решения……G
Тестирование высокоуровневой интеграции……Н
Оценка системы на предмет соответствия требованиям……I
Создание компонентов системы……J
Интеграция и тестирование компонентов……К
Повторная оценка системы на предмет соответствия требованиям……L
Тестирование комплектной системы……М
Исправление неисправностей системы в преддверии альфа-тестирования……N
Начало альфа-тестирования……О
Исправление ошибок, выявленных на этапе альфа-тестирования……Р
Начало бета-тестирования……Q
Разработка стратегии развертывания……R
Исправление ошибок, выявленных на этапе бета-тестирования……S
Тестирование стратегии развертывания……Т
Тестирование конечного продукта……U
Развертывание программного обеспечения……V