December 5th, 2010

О главной проблеме управления софтостроением

Музыкой навеяло.

Возьмем к примеру отделочные работы. Один рабочий штукатурит 10 м2 за смену, другой 15 м2. Но такого, который сделает за ту же смену 100 м2, в природе не существует. Поэтому получая заказ на 1000 м2, любой менеджер сообразит, что понадобится около 60 человеко-смен, а с запасом так и все 100 (UPD: чтот-то у меня с устным счетом; первоначально написал 3000 м2, а делил ту же 1000). Есть в штате пять штукатуров - можно обещать сделать за месяц. Есть десять штукатуров - за две недели. Все считаемо, большинство отделочных сдаются в срок.

А вот с программированием беда. Здесь один кодер за сутки напишет 2000 строк, создав работающий прототип нужной программы, а другой будет месяц размышлять над архитектурой и изучать особенности фреймворка. Повезло с программистом - проект сделан за 2 недели; не повезло - через 3 месяца на выходе спагетти-код, который худо-бедно что-то делает, но для любых изменений требует доработки тем же программистом.

Разница в скорости - порядки, а не разы. И конечно же, все вокруг - заказчик, директор, прожект-менеджер - рассчитывают на лучшее. Сделаем проект за 1-2-3 месяца, тем более что неоднократно получалось (ведь быстрые кодеры существуют)? Да, сделаем! Контракт подписан, одни побежали искать деньги, другие - вагон холодильников... пардон, быстрого кодера.

А их, быстрых кодеров, в природе не так уж и много. Как следствие, проект, сделанный качественно и в срок - скорее исключение, чем правило. Софтостроение - не штукатурные работы, здесь расчет сроков идет по чемпионам. Ну и как следствие, постоянно оказывается ошибочным.

UPD. Почему столь полезен прототип проекта, написанный за сутки, читать здесь: Серебряная пуля есть.