Как воплотить идеи в жизнь, не нарушая график и бюджет

Как воплотить идеи в жизнь, не нарушая график и бюджет

Я работаю в аутсорсинговой компании техническим директором. К нам обращаются клиенты чтобы получить готовую систему по исходному описанию: от концепта на 1-2 страницах или одной схеме в Miro и до ТЗ на 100500 страницах с макетами в фигма. При этом клиенты ждут от нас КП с указанием цены и сроков реализации. Стоимость получается из трудочасов путем умножения на ставку задействованных специалистов. В этом месте возникает необходимость сделать оценку проекта по часам, разбить на роли и оценить срок реализации. В этом материале я хочу рассказать о том, как мы научились в 78% случаев укладывается в исходные оценки и в 100% случаев в моменте видеть, когда мы отклоняемся.

Многие технические специалисты считают, что:

  • нормально оценить проект на старте невозможно;
  • детально планировать больше чем на 2-3 недели бессмысленно;
  • если не перезакладываться (x2, x3, …), то превышение исходных оценок неизбежно.

Я тоже разделяю эти взгляды и поэтому не буду утверждать, что мы научились безошибочно оценивать. Но расскажу о том как мы управляем проектами в условиях строгих ограничений (по времени и трудоемкости) и высокой неопределенности (по конечному результату).

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

Отдельно отмечу, что при реализации проекта мы преследуем следующие цели:

1. клиент по завершению проекта получает именно то, что ему нужно;

2. не нагружаем клиента проблемами необходимости пересмотра бюджета или сроков реализации;

3. в любое время и нам, и клиенту понятна стадия готовности системы в целом и ее отдельных компонентов;

4. команда работает планово, без авралов.

Очень похоже на игру в шахматы: с одной стороны команда разработки, у которой есть исходная стратегия и несколько выученных комбинаций, а с другой всевозможные негативные обстоятельства: изменение требований, технические проблемы, сработавшие риски, отпуска, болезни, онбординг новых сотрудников и т.д и т.п. После каждого хода соперника мы должны переоценить ситуацию на доске, просчитать победный алгоритм под новый расклад, а может быть и перестроить стратегию. И делать это надо в рамках целей и максимально быстро т.к. время, отведенное на партию, ограничено.

Наша компания любит использовать GitHub как удобный и простой инструмент “все в одном” для управления задачами (issues), кодом, сборкой и развертывания решения. Когда мы были начинающими шахматистами, то следили только за временем: наладили интеграцию GitHub и Everhour. В результате каждый разработчик отмечал сколько часов он потратил на ту или иную Issue, а Project Manager (далее PM) следил за тем, чтоб все время было отмечено. По ходу реализации проекта мы видели как расходуется бюджет, но плохо понимали успеваем все доделать в соответствии с договоренностями или нет. Иногда выигрывали, иногда проигрывали. Не хватало управляемости ситуацией.

После нескольких посмертных ретроспектив на тему “что пошло не так и когда свернули не туда?” мы пришли к выводу, что контроль попадания в исходные оценки необходимо осуществлять постоянно по ходу проекта. Он должен быть максимально точным, наглядным и понятным для всей команды.

Оттолкнувшись от целей мы сформировали критерии успешности для команды. Команда молодец если:

  • реализует проект в исходные трудочасы и обозначенный срок;
  • регулярно в срок выкатывает ожидаемый инкремент на стенд;
  • сотрудники не простаивают и не овертаймят.

Для контроля хода проекта и принятия управленческих решений мы разработали регламент ведения проекта для PM, тимлидов и разработчиков, а также создали инструмент поверх Github и Everhour, который назвали “Отчет по эпикам”.

На первом этапе реализации проекта мы составляем исходную стратегию на шахматную партию: PM разбивает всю продолжительность проекта на итерации (в терминах githab - milestone) и для каждой итерации прописывает, какие результаты команда должна реализовать по ее окончанию. Каждый результат - это Issue с меткой epic. Тимлиды, участвующие в проекте, проверяют данный план на достижимость и непротиворечивость зависимостям (понимая зависимости одних работ от других). Тимлиды включают в план поставки технические результаты, которые явно не демонстрируются клиенту, но необходимы для дальнейшего движения команды. Тимлиды проставляют оценки на все заведенные эпики так, чтобы их сумма не превышала исходную оценку (обычно оставляем резерв на непредвиденные расходы в 10% от всего объема - “хороший PM всегда не доливает”).

После создания плана в Github PM проверяет его в инструменте “Отчет по эпикам” на соблюдение следующих правил:

  • весь функционал проекта должен быть отражен в эпиках;
  • суммарная оценка всех эпиков не должна превышать исходную оценку проекта;
  • поставки результатов эпиков должны быть равномерно распределены по ходу проекта;
  • функционал, реализация которого может повлиять на скоуп проекта, должен быть реализован как можно раньше.

Пример фрагмента отчета, прошедшего сверку:

По итогам создания эпиков получается примерно такой план:

Как воплотить идеи в жизнь, не нарушая график и бюджет

Далее тимлиды выполняют декомпозицию всех эпиков из ближайшего спринта: создают для разработчиков подзадачи, необходимые для достижения результата по эпику. В подзадачах тимлиды проставляют ожидаемое время на выполнение (так, чтобы сумма оценок подзадач не превышала оценку эпика) и связывают с родительским эпиком указывая ссылки на них в первом комментарии.

Пример эпика, который имеет четыре подзадачи:

<p>Договорились, что когда разработчик видит, что не успевает уложиться в оценку по задаче, то увеличивает ее так, чтобы разница между оценкой и уже потраченным временем давала актуальный остаток работ. Если в результате переоценки разработчиком сумма оценок из подзадач превышает оценку родительского эпика, то в отчете данный эпик подсвечивается:</p>

Договорились, что когда разработчик видит, что не успевает уложиться в оценку по задаче, то увеличивает ее так, чтобы разница между оценкой и уже потраченным временем давала актуальный остаток работ. Если в результате переоценки разработчиком сумма оценок из подзадач превышает оценку родительского эпика, то в отчете данный эпик подсвечивается:

Как воплотить идеи в жизнь, не нарушая график и бюджет

Имея актуальный остаток работ на конец каждого дня мы смогли наладить посуточное отслеживание изменения остатка как по ближайшей итерации, так и по всему проекту в целом. Это позволило нам детально рассчитывать процент отдельных частей системы.

В любой момент времени мы готовы ответить на вопрос, насколько проект реализован:

увидеть общую диаграмму сгорания задач:
увидеть общую диаграмму сгорания задач:
Помимо слежения за остатком работ мы наладили отслеживание отклонений от исходной оценки. На мой взгляд, это ключевая возможность нашего инструмента, которая позволяет нам оставаться в рамках исходных договоренностей. В отчете мы декомпозируем итоговое отклонение на причины. Позитивно, когда мы завершаем задачи быстрее планируемого. Негативно, когда мы завершаем задачи дольше или по ходу реализации появляются незапланированные (отсутствующие в исходном плане) эпики. В отчете декомпозиция отклонений выглядит следующим образом:
Помимо слежения за остатком работ мы наладили отслеживание отклонений от исходной оценки. На мой взгляд, это ключевая возможность нашего инструмента, которая позволяет нам оставаться в рамках исходных договоренностей. В отчете мы декомпозируем итоговое отклонение на причины. Позитивно, когда мы завершаем задачи быстрее планируемого. Негативно, когда мы завершаем задачи дольше или по ходу реализации появляются незапланированные (отсутствующие в исходном плане) эпики. В отчете декомпозиция отклонений выглядит следующим образом:
<p>Текущее значение отклонения от исходной оценки влияет на принятие управленческих решений PMом и тимлидами. Когда наш партнер по шахматной партии делает свой ход, добавляя нам, например, не запланированный объем работ, то PM, глядя в значение текущего отклонения от оценки, моментально оценивает возможность реализации в рамках действующих договоренностей. Если запаса недостаточно, то PM договаривается с клиентом о приоритете требований и совместно с командой меняет план поставки нереализованных фич так, чтобы учесть последние пожелания клиента и при этом остаться в бюджете.</p><p>Бывают ситуации, когда это невозможно: все фичи клиенту важны и нужны, а запаса не реализацию у нас нет. В таком случае отчет по эпикам позволяет нам увидеть это в начальной точке и аргументированно прийти с клиентом к компромиссу как можно быстрее от момента появления нового требования.</p><p>Прямо сейчас мы дорабатываем отчет для контроля равномерной загрузки специалистов разных ролей. Добавляем метку скила «skill: …» на задачи чтобы получить сводку по которой понятно кто на сколько загружен в распланированных итерациях:</p>

Текущее значение отклонения от исходной оценки влияет на принятие управленческих решений PMом и тимлидами. Когда наш партнер по шахматной партии делает свой ход, добавляя нам, например, не запланированный объем работ, то PM, глядя в значение текущего отклонения от оценки, моментально оценивает возможность реализации в рамках действующих договоренностей. Если запаса недостаточно, то PM договаривается с клиентом о приоритете требований и совместно с командой меняет план поставки нереализованных фич так, чтобы учесть последние пожелания клиента и при этом остаться в бюджете.

Бывают ситуации, когда это невозможно: все фичи клиенту важны и нужны, а запаса не реализацию у нас нет. В таком случае отчет по эпикам позволяет нам увидеть это в начальной точке и аргументированно прийти с клиентом к компромиссу как можно быстрее от момента появления нового требования.

Прямо сейчас мы дорабатываем отчет для контроля равномерной загрузки специалистов разных ролей. Добавляем метку скила «skill: …» на задачи чтобы получить сводку по которой понятно кто на сколько загружен в распланированных итерациях:

Как воплотить идеи в жизнь, не нарушая график и бюджет

В заключении тезисно обо всем вышесказанном:

  • чтобы укладываться в исходные оценки нужно уметь отвечать на вопросы:
  • сколько работы осталось?какое сейчас отклонение от исходной оценки?какой тренд отклонения от исходной оценки?если мы выходим за оценку, то как исправить ситуацию?
  • задавать эти вопросы и отвечать на них нужно ежедневно;
  • ответы на первые три вопроса для проектов, поддающихся декомпозиции, можно получить без накладных расходов;
  • необязательно использовать Jira, YouTrack или Azure DevOps. Хватит простого githubgithab.

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

Интересно было бы вам воспользоваться описанным подходом и инструментом для своих проектов?
Да, интересно
Нет
Не ведем проекты в гитхаб/гитлаб
99
4 комментария

Комментарий недоступен

1
Ответить

Мы бы с радостью запретили весь fixprice и работали только по t&m, но вот есть заказчики которые по другому просто не могут. И тут уже приходится решать работать с ними или нет. Но логика вопроса понятна, водопад и правда прошлый век. Но вот такая реальность.

1
Ответить

Красавчики!

1
Ответить

Вот это очень весело! )))
"После нескольких посмертных ретроспектив на тему “что пошло не так и когда свернули не туда?”

Ответить