Фундаментальной проблемой fixed-price проектов является то, что они побуждают вас выполнять очень сомнительные вещи, которые неизменно приводят к убыткам. Чтобы разработать точную смету, вам надо понимать требования, которые вам следует учитывать, и архитектуру, которую вы собираетесь строить. Чем больше потребность в точности в вашей смете, тем больше потребность в максимально подробной информации. Как результат давления разработать точную изначальную смету, типично вы вынуждены принимать следующее:
- Подход предварительных больших требований (Big Requirements Up From - "BRUF"), где вы создаете подробную спецификацию требований в самом начале жизненного цикла.
- Процесс управления изменениями, который старается избежать «ползанья границ» ("scope creep") по всему проекту.
- Подход предварительного большого дизайна (Big Design Up Front - "BDUF"), где вы пытаетесь детализировано указать свою архитектуру до того, как начнется кодирование.
- Жизненный цикл разработки ПО, который обычно последователен по своей природе.
Давайте проэкзаменируем проблемы, присущие каждой из этих практик. Во-первых, сложная задача с BRUF в том, что вы не можете точно определить наперед, чего хотят люди, потому что по существу они сами этого не знают. Людям хорошо удается указать свое намерение и потом, когда им показывают что-то вроде прототипа UI или реального работающего кода, они могут указать, что им не нравится, и что могло бы им подойти вместо этого. Повторяя этот процесс, мы можем придти к тому, что им действительно нужно, но это означает, что мы будем развиваться, удаляясь от начального требования, на котором базировалась смета. Такие «смены требований» (на самом деле меняется наше понимание требований), в свою очередь, приводят проектную команду к риску выйти за рамки бюджета. В результате, вы можете иметь точную смету чего-то, чего люди не хотят, или неточную смету чего-то, что они действительно хотят.
Во-вторых, много процессов «управления изменениями» сделаны для того, чтобы организаторам дела было тяжело передумать, что уменьшило бы вероятность изменения требований, которые могли бы вынудить вас выйти за рамки бюджета. Изменениями не управляют, их предотвращают. Эти процессы предотвращения изменений увеличивают вероятность того, что система будет построена в соответствии со спецификацией, но уменьшают вероятность того, что система действительно будет отображать настоящие потребности организаторов дела. В результате, большое количество денег оказывается потраченным на то, чтобы построить функциональность, которую организаторы на самом деле не хотят, и не на то, на что они действительно хотят.
В-третьих, BDUF также оказывается сомнительным на практике. При детальной разработке дизайна на ранней стадии проекта вам приходиться принимать серьезные решения, тогда как владеете наименьшим количеством информации. К примеру, в течение первого месяца проекта вы знаете намного меньше, чем на 10-й месяц проекта. И как только эти решения приняты, вы вынуждены придерживаться их из-за всей той тяжелой работы, которая уже проделана. Еще хуже то, что если вы неправильно поняли требования, с которых надо начать (а это часто случается), то не имеет значения, насколько хорошо разрабатывается дизайн, так как он по-прежнему неправильный, потому что основан на неправильных требованиях.
В-четвертых, BRUF и BDUF – это два аспекта последовательного жизненного цикла; последовательные жизненные циклы, на поверку, предлагают мало контрольных точек организаторам и таким образом увеличивают общий риск проекта. Не смотря на то, что организаторы обычно активно участвуют в начале при BRUF, их роль часто очень уменьшается к моменту тестирования для одобрения пользователем в конце проекта (допуская, что время позволяет). Время от времени, может производиться обзор, где они просматривают отчеты о состоянии проекта и техническую документацию, которые предоставляются, являя собой выполненную стоимость, но по большому счету основная часть процесса разработки ПО для организаторов похожа на черный ящик. Они не знают почти до самого конца проекта, получат ли они что-либо ценное в обмен на свое инвестирование в IT.
К сожалению, многие из так называемых точных смет на практике в любом случае оказываются не такими уж точными. Вне зависимости от того, насколько подробны требования и спецификации дизайна, всегда существуют некоторая неопределенность. Команды разработчиков, чтобы уменьшить риск, раздувают свою смету до той точки, когда она все еще приемлема для организаторов и вместе с тем предоставляет некоторый резервный запас для любого неправильного подсчета. В сущности, так или иначе, команда разработчиков подвергает организатора такому же объему финансового риска проекта, эффективно ликвидируя исходную цель наличия fixed-price проекта.
В действительности, проекты часто выходят за рамки бюджета. И это случается гораздо чаще, чем то, что не организаторы дела платят часть или всю сумму излишка, чтобы получить желаемую систему у провайдера IT. К сожалению, подобные ошибки заставляют людей еще жестче настаивать на точной предварительной смете в следующий раз. И таким образом мы, кажется, никогда не сможем уйти с бегущей дорожки fixed-price.
Альтернативой fixed-price проектам, конечно же, являются variable-priced проекты. На практике гораздо легче уменьшить финансовый риск на variable-priced проектах со стробированным инвестированием, основанном на промежуточных поставках (идеально работающее ПО). Этот подход предусматривает хорошее взаимоотношение между организаторами дела и IT так же, как и активное участие организатора в проекте. Если вы хотите гарантировать ценность вашей инвестиции в IT, то вам следует управлять вашей инвестицией в IT вплотную.
Fixed-price проекты IT не подходят разработчикам, работающим на проекте, потому как это побуждает к неясному поведению, которое ставит вашу работу под риск при длительном сроке. Так же fixed-price проекты не подходят организаторам дела, так как они, кажется, увеличивают риск вместо уменьшения его, как это было обещано. Пришло время переосмыслить наш подход к финансированию проектов в сфере IT.
Из Dr Dobb's, автор Скотт Амблер.
Перевел Павел Юров для scrum.com.ua под редакцией Алексея Кривицкого.