Процесс производства фильма обходится столь же непомерно дорого, как и разработка программного обеспечения. Киноиндустрия в Голливуде существует намного дольше, чем индустрия разработки ПО в Кремниевой долине, так что нам есть чему поучиться у создателей кинолент. По-настоящему затратная часть – это непосредственно съемка фильма. Камеры, сцены, технические специалисты, актеры – все это требует многих тысяч долларов за каждый съемочный день. Опытные создатели фильмов держат эту фазу производства под строгим контролем, заранее составляя четкие подробные планы. Закладывая денежные средства и время на подготовку детальных раскадровок и графиков съемок, они экономят гораздо больше времени и денег во время самого съемочного процесса.
Создание фильма обычно включает в себя три основные фазы: предпроизводство (препродакшн), производство и постпроизводство (постпродакшн). В фазе предпроизводства продюсеры фильма отвечают за подготовку и доработку сценария, разработку сцен и костюмов, кастинг актеров и съемочного персонала, привлечение денежных средств. Фаза производства – это блеск софитов, гул кинокамер, крики режиссеров, раздающих указания, и накал страстей, которые разыгрывают актеры. В фазе постпроизводства происходит монтаж киноленты, запись саундтрека и подготовка маркетинговой кампании. Эти три фазы достаточно близко соотносятся со стадиями разработки программного обеспечения.
Руководители, отвечающие за разработку программ, на стадии предпроизводства осуществляют проектирование продукта, нанимают на проект программистов и привлекают инвестиции. Стадия производства здесь – это «блеск» мониторов, «гул» компиляторов, крики руководителей, раздающих указания, и накал страстей программистов, генерирующих код. На стадии постпроизводства выполняется отладка кода, подготовка документации и разработка маркетинговой кампании.
Примечательной особенностью такого тройственного процесса является тот факт, что задача фазы предпроизводства – свести продолжительность фазы производства к минимуму. Непосредственная съемка фильма обходится чрезвычайно дорого, а потому урезание съемочного процесса даже на два дня с лихвой компенсирует лишние недели пред- или постпроизводственного процесса. На сегодняшний момент предварительная подготовка к съемкам фильма на стадии предпроизводства может длиться год и более, на процесс производства отводится два-три месяца интенсивных съемок, а фаза постпроизводства занимает еще много долгих месяцев.
С усложнением фильмов в техническом плане (а что будет, если скрестить компьютер и фильм?) все больше и больше операций из фазы производства не могут осуществляться без полного детального планирования. Если по ходу съемок актер в главной роли должен сразиться на лазерных мечах с пришельцем, который будет создан с помощью компьютерной программы, такая драка должна быть воображаемой и сниматься на фоне синего экрана, а потому каждое действие актера – от мельчайших движений до направления взгляда – нужно тщательно продумать.
Создателям фильмов прекрасно известно, что другого шанса сделать все как нужно у них не будет, а потому они относятся к фазе предпроизводства со всей серьезностью. Если же говорить об индустрии разработки программного обеспечения, то здесь дело обстоит иначе: многие руководители уверены, что они смогут запросто все исправить при выпуске следующей версии программы, вследствие чего важность тщательного планирования несколько принижается. В результате расплачиваться за подобное допущение приходится слишком дорого.
Современное программное обеспечение не менее сложно в разработке, чем фильмы, однако в большинстве процессов проектирования этот факт попросту игнорируют. Большинство из тех команд разработчиков, что мне довелось встретить, тратило на планирование и проектирование от силы несколько дней или недель (и это максимум), затем приблизительно от 6 до 18 месяцев отводилось на программирование и далее всего около двух-трех месяцев на отладку, тестирование и подготовку документации программы. Подозреваю, что нам нужно многому учиться у производителей кинофильмов. Затрачивай мы больше времени на фазу «предпроизводство – проектирование», мы сэкономили бы огромное количество времени программистов, которое стоит весьма дорого.
В киноиндустрии фаза предпроизводства является самой малозатратной стадией. Для создания подробной раскадровки дорогостоящей сцены погони со взрывами и спецэффектами требуется не так много денежных вложений. Если понадобится внести радикальные изменения, все что нужно – это стирательная резинка, карандаш и немного времени. Детальная прорисовка всех элементов на бумаге позволяет сэкономить миллионы на той стадии, когда включаются кинокамеры, а автомобили для съемки заполняются каскадерами и взрывчатыми веществами. Проходя этап подобной подготовки, вы инвестируете в свое время, которое позволит сэкономить бюджет и повышает возможные шансы на успех всего предприятия.
Если режиссеру вдруг вздумается показать взрыв вертолета вместо железной дороги, сделать это на этапе предпроизводства очень легко и незатратно. Внесение же таких изменений на этапе съемочного процесса смерти подобно. Создателям фильмов это известно слишком хорошо, поэтому они не спешат в период предпроизводства, пока все не продумают, а на этапе непосредственно съемки фильма строго следуют своему плану.
Почему же к разработке программных продуктов мы подходим совершенно иным образом? Мы посвящаем так мало времени и сил тщательному планированию, а вместо этого исписываем маркерные доски и создаем длинные электронные перечни с краткими названиями опций, а затем отправляем невероятно дорогостоящих программистов писать код для неведомого продукта. Равно как и представители сферы киноиндустрии, мы знаем, как дорого обходятся изменения на этапе создания кода, тем не менее это все еще не побуждает нас тратить больше времени и сил на планирование. Вместо этого мы нанимаем программистов, позволяем им приступить к написанию кода, а потом ссылаемся на то, что уже не можем вносить изменения, потому что затратный процесс создания кода теперь нельзя остановить.
Цикл доработки уже существующих продуктов претерпевает еще большие искажения. Если продукт уже вышел на рынок, для проектирования его ежегодной обновленной версии может в принципе не быть времени в графике. Вместо этого руководитель, ответственный за разработку продукта, просто составляет список опций на основе запросов потребителей и беззастенчиво передает его напрямую программистам для реализации, и так происходит каждый год.
Добавление в процесс разработки программного продукта этапа проектирования может так же, как и фаза предпроизводства в киноиндустрии, обеспечить невероятные преимущества. Детализированный план разработки программного продукта на бумаге позволяет избежать неопределенностей на этапе программирования, а также существенно снизить риски, традиционно связанные с процессом выпуска подобных продуктов.