Автор: Marcin Niebudek
Перевод: agileguru.ru
Контракт с фиксированной ценой (fixed price contract) является злом - это то, что часто можно услышать от программистов. Но нужно согласиться, что эти контракты являются реальностью, с которой встречаются все команды. А давайте вместо того, чтобы бороться с таким контрактом, будем его использовать (прим. перев.: глупо отрицать такие проекты, ведь клиент хочет получить результат и готов щедро платить за такие условия – а долг аджайлиста подстроить свой процесс, чтобы достигнуть результат). Как компания может выполнить такой договор? Можем ли мы использовать гибкий подход разработки для достижения лучших результатов с меньшими рисками? В этой статье мы постараемся ответить на эти вопросы.
Итак, давайте начнем с самого договора.
Фиксированная цена (fixed price), время (fixed time) и объём (fixed scope)
Фиксированная цена контракта означает заморозить все три магических фактора: деньги, время и объём работы. Являются ли цены и время сложностью для Agile команды? Не должны. В самом деле, ограничить объем – действующая практика Agile (time boxing, прим.перев.: в Agile ограничение объёма происходит после подсчёта суммарного времени выполнения всех задач, которые запланированы в итерацию и отсекания всех, на которые у нас нет ресурса; а это означает мы ограничили объём, но ограничения происходят исходя из доступного времени/ресурса команды).
Реальная проблема контракта с фиксированной ценой является объем, который закреплен в плане того, что должно быть сделано, вместо того, сколько мы должны выполнить.
Почему клиенты настолько уверены в фиксировании объема (fixing the scope)? Мы понимаем, что они хотят знать, сколько они будут платить (кто не хочет знать этого) и когда они получат результат. Исходя из этого они могут строить свои планы, например планы продаж и получать прибыль. Единственное, чего они не знают, что именно они хотят получить (даже если они настаивают, что они знают).
Проблема фиксирования объема работы (scope) уходит корнями в следующее:
* Отсутствие доверия между сторонами
* Отсутствие понимания принципов разработки ПО
* Слабое понимание понятия «объём работы» (scope)
С любым контрактом с фиксированной ценой подписывается документ "Техническое задание" (requirement specification) или нечто подобное. Этот документ пытается уменьшить риск забывания чего-нибудь важного, и пытается установить общее понимание того, что нужно сделать, чтобы обеспечить иллюзию предсказуемости.
Ключевыми неверными предположениями относительно фиксирования объема (fix scope) являются:
* Подробные требования определяются позднее
* Хорошо определенный документ мешает внесению изменений в требования
* Фиксированный объем (fixing scope) требует лучших оценок трудозатрат
Переход от фиксированного объёма к фиксированному бюджету
Теперь, когда мы понимаем, что основной конфликт между применением гибкого подхода и фиксированной ценой (fix price) контракта заключается в фиксированном объёме (fixed scope), мы можем сосредоточиться на преобразовании фиксированной объёма (fixed scope) в фиксированный бюджет (fixed budget).
Это означает, что вместо предоставления детальной спецификации требований, нам надо сосредоточиться на поиске максимального количество пользовательских историй (User Stories). Нам необходимо построить первоначальный список требований (backlog), который мы попытаемся оценить с помощью методики Story Points.
Прим.перев.: Story Points или просто оценка с помощью баллов (points) - метод приблизительных оценок «размера рубашки», где вместо размеров Small, Middle, Large используется более детализированный ряд: 0, ½ , 1, 2, 3, 5, 8, 13, 20, 40, 100; которому так же можно сделать соответствия с размерами рубах:
- Small: 0, ½ , 1, 2, 3
- Middle - 5, 8, 13
- Large – 20 (желательно задуматься над декомпозицией)
- Extra Large – 100 (в природе не бывает и требует декомпозиции).
Мы должны понимать, что более высокий уровень детализации требований означает две совершенно разные вещи для обеих сторон договора. Софтверная компания сосредотачивается на технических деталях, а клиент более ориентирован на бизнес в данных оценках. В этом месте стоит обратить внимание на три ключевые практики Agile.
Пользовательская история (user story) - это способ документирования требований, понятныых для клиента и программиста. Понимание укрепляет доверие и чувство общности видения. Пользовательская история (user story) создаётся и уничтожается очень быстро, особенно если вы пишете на маленьких бумажках. Они также отражают функционал будущей системы, поэтому они гарантируют хорошее видение реальных масштабов проекта. Мы можем сравнить требования в виде пользовательских историй друг с другом с точки зрения размеров без лишних усилий.
Оценка истории в баллах (story points) - труднее объяснить клиенту в начале проекта, так как не является распространенным способом выражения трудозатрат и усилий. Но зато снижает опасность недооценки масштаба. Как это происходит? Баллы (story points) по своей природе являются относительными к другим историям, в то время как традиционные оценки (как правило, делается в человеко-часах) анализируют каждую функцию в отдельности.
Критерий DONE (done = сделано) - это еще один способ укрепления доверия и общего понимания процесса. Когда клиент видит впервые истории пользователей (user story) он легко понимает их; но не всегда очевидно, сколько потребуется усилий для их реализации. Команды, которые обсуждают критерий DONE для историй с клиентом, лучше знают, что является ожиданиями клиента. А так же смогут сделать лучшую оценку проекта. Кроме того, на стороне клиента, практика "критерий DONE" создает некие критерии приемки продукта.
Например, определение DONE для истории (user story) может выглядить так:
* Протестирован под IE 7 / 8, Firefox 3.x и Chrome
* Добавлен соответствующий раздел в "Руководстве пользователя"
Позднее команда добавит больше требований в терминах DONE. Но на этапе планирования эти три практики помогают создать договор и хорошо понять объем продукта (defining scope).
Определяя критерий DONE, мы постепенно разрабатываем контакт с использованием оценки в бюджетных баллах (budget points – прим. перев: объем в функционале конвертируются в объём в баллах). А это как раз то, что мы можем зафиксировать в контракте. Не фиксировать требования, а определить объём работы в баллах. И это открывает новые возможности для перемен!
Хотя у нас есть возможности фиксировать бюджет (в терминах оценки - points), но мы по-прежнему готовы менять требования во время разработки. У нас есть инструменты (user story и story points), которые используем для сравнения одних требований с другими и можем изменять первоначальные требования. Главное не выйти за границы бюджета в баллах (budget points). Это позволяет нам изменять требования не изменяя объем. Получается, мы зафиксировали объем (scope) в баллах (budget points), а не зафиксировали объём в функционале. Если мы можем оставаться в рамках этих ограничений (scope в терминах story points), мы также можем оставаться в пределах фиксированной цены (fixed price) и времени (fixed time).
Первоначальная оценка
Самое сложное в подготовке контракта с фиксированной стоимостью состоит в определении цены и плана, которые будут устанавливаться на основе четко определенного объёма (scope). Давайте посмотрим, как команды способствуют разработке такого контракта с использованием Agile.
1. Обучить. Нужно встретиться с клиентом и описать, как вы будете работать. Надо сказать, что такое истории пользователей, как работает оценка в баллах и что такое критерий DONE. Лучше это сделать при подготовке первоначального предложения (request for proposal, RFP).
2. Сбор требований. Следующим шагом будет сбор историй пользователей. Это делается в течение ограниченных во времени сессий, растянутых не более чем в 1-2 дня. Этого достаточно, чтобы найти большинство из ключевых требований для формирования видения продукта (product vision) без мелких деталей реализации. Затем следует обсудить критерий DONE для каждой истории, раскидать по релизам и итерациям.
Нам необходимо знать:
* Условия, в которых требования должны быть проверены (таких как количество браузеров, мобильных платформ или операционных систем)
* Какие документы необходимы клиенту
* Как реализованные истории будут устанавливается
* Что делать клиенту во время разработки (рассказать про демо-сессии)
* Как часто мы встречаемся и кто участвует во встречах (планирование, демо, согласование деталей)
* И т. д.
Эти и многие другие факторы, характерные для вашего проекта, могут повлиять на оценки и будут способствовать лучшему общему пониманию и выстраиванию ожиданий о качестве с обеих сторон. В результате получатся менее оптимистические оценки, которые получаются, если в оценке участвует только команда разработки.
Обсудив с клиентом все собранные истории и критерии ‘done’, теперь мы можем начать оценку. Это хорошо известная практика в Agile. Наиболее важным является привлечение как можно большего количества будущих членов команды. Эта оценка делается коллективно. Методы командного планирования, такие как покер (planning poker), как известно, снижают риск недооценки требования (user story) за счёт объединения усилий как опытных разработчиков, так и менее опытных. И самое важное – оценка производится людьми, которые будут реализовывать систему.
Шкала Фибоначчи (1, 2, 3, 5, 8, 13, 20, 40, 100) очень удобна для оценки истории (user story) в баллах (points). Относительная оценка начинается с поиска наименьшей истории и принятия коллективного решения, что она будет 1 или 2 балла в качестве базового уровня для дальнейшей оценки.
На самом деле во время первоначальной оценки часто бывает трудно оценить историй с использованием наименьших значений, например 1 или 2. Чем больше оценка – тем меньше мы понимаем историю. Именно поэтому оценки в баллах легче на ранней стадии, потому что гораздо проще сказать, что история А в пунктах (story points) является в 2 раза сложнее, чем история Б, нежели сказать, что история требует 25 человеко-часов, а история B потребует 54 часа.
Это хорошо работает, даже если мы выбираем 3 или 5 бальные истории в качестве базового уровня, и если мы это сделаем, то будет легче разбить их на более мелкие истории позднее, во время фазы разработки. Остерегайтесь же истории 20, 40 или 100 баллов. Такая оценка предполагает, что мы ничего не знаем о том, что должно быть реализовано. Сразу же обсудите их с клиентом и разбейте, а не радостно включайте в договор.
Результатом оценки будет суммарное количество баллов (story points), описывающие начальные возможности продукта. Это число, которое должно быть установлено с точки зрения объема (scope и fixed budget) по контракту, а не список конкретных требований в виде историй (user story).
Как заработать доверие
Все эти методы требуют одной вещи, чтобы они заработали даже в контрактах с фиксированной ценой (fixe price) - это доверия. Но, как мы знаем, мы не можем получить его просто описывая то, что наша супер команда собирается сделать.
Agile принципы подсказывают одну хорошая идею по решению этой задачи. С каждой итерации мы хотим добавить ценность для клиента. Но что более важно, мы ориентированы на достижение наиболее ценных качеств приложения в первую очередь. Таким образом, лучший способ построить доверие с клиентом - разделить контракт!
Начните с малого, сделайте пилот из двух или трёх итераций (который также будет по фиксированной цене, но короче). Программное обеспечение должно принести ожидаемый результат клиенту. Приложение должно содержать некоторые рабочие части ключевого функционала. Работоспособное программное обеспечение доказывает, что можно сделать и все остальное. Оно также дает вам возможность проверить первые предположения о скорости разработки, и, в конечном итоге, пересмотреть следующее планы.
Время, затраченное на первые версии, крайне небольшое по сравнению с тем объемом, который еще предстоит сделать. Таким образом, если наши клиенты не удовлетворены результатами, они могут уйти, как можно скорее от нас, и им больше не нужно продлевать контракт, и, в итоге, проваливать проект.
Резюме
Контракт с фиксированной ценой (fix price contract) часто считается очень вредными, и многие аджайлисты говорят, что мы должны просто избегать их. Но нельзя избегать таких контрактов всё время, и нужно найти способы заставить их работать .
На самом деле, некоторые аспекты таких контрактов подходят для Agile-команды, поскольку мы привыкли работать в ограниченных временных промежутках (time-frame), а это именно то, что называется фиксированные сроки в договоре (а также фиксированной ценой). Единственное, что действительно беспокоит нас - это то, как устанавливается эта цена.
Agile – это не серебреная пуля для решения задач контрактов с фиксированной ценой, но мы показали путь как можно проявлять гибкость в таком вопросе.
(продолжение перевода в течение недели)