Перестаньте оценивать задачи

Всем привет! Меня зовут Алексей, я руковожу командой разработки в Xello. Немного о себе и нашей компании я рассказал в предыдущей статье. Продолжая тему процессов и инструментов, сегодня хочу затронуть еще один аспект — оценку задач в командах разработки.

Перестаньте оценивать задачи

Я более десяти лет активно участвую в разработке большого количества продуктов в самых разных компаниях. И ни разу не встречал команды, которая бы сделала свою фичу в срок (за исключением текущего места работы:)). Также я не видел диаграмм сгорания задач (Burndown Chart), которые бы вышли в ноль. И в этой связи возникает вопрос: насколько эффективно оценивать задачи в разных величинах?

На мой взгляд, оценка может решить две ключевые задачи:

  1. Приоритизация задач
  2. Планирование работ во времени

Приоритизация задач

Как правило, задачи приоритизируют через скоринговую таблицу (часто даже бессознательно). В самом простом варианте это выглядит следующим образом: есть сложность (effort) и значимость (impact). Чем меньше сложность и больше значимость, тем выше приоритет задачи. Effort и Impact оценивается от 1 до 5 абстрактными величинами. Это хороший способ формализовать приоритизацию, если она зависит от большого количества факторов, в том числе, например, от степени неопределённости и рисков. Абстрактная сложность в такой матрице – один из элементов, влияющих на итоговый приоритет.

Мы строим такие модели в Product Discovery от Atlassian. По матрице Effort-Impact можно измерять эффективность приоритизации.

Пример распределения задач по матрице Effort-Impact:

Перестаньте оценивать задачи

Матрица готовых задач:

Перестаньте оценивать задачи

Матрица задач, которые мы взяли в работе:

Матрица задач, которые мы не брали в работу (в статусах Open):
Матрица задач, которые мы не брали в работу (в статусах Open):
Перестаньте оценивать задачи

Из примеров видно, что в первую очередь мы делаем задачи, которые приносят больше пользы, но проще в реализации.

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

Но если вы разрабатываете минимальный жизнеспособный продукт (MVP), или в продукте каждая функциональность зависит от предыдущей (либо ничего не параллелится), то приоритизация для вас – нецелесообразный этап.

Планирование работ во времени

Оценка по времени нам необходима, чтобы понять, к какому сроку и какую задачу мы реализуем (построить диаграмму Ганта, разбить на квартальные цели, построить дорожную карту (Roadmap) со сроками реализации, запланировать другие смежные активности компании).

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

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

В таком же формате это работает при недельном/двухнедельном планирований на уровне каждого отдельного разработчика.

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

Важно только количество задач, которые мы сделаем за неделю/квартал.

Теперь перейдём к абстрактным величинам (а-ля Story Points).

Story Points — это условная единица измерения, помогающая оценить необходимые общие усилия команды для полной реализации того или иного элемента бэклога продукта (Product Backlog Item).

По заверению популяризаторов Story Point-ов в рамках Agile, на длительной дистанции сложность задач начнёт соотноситься со временем. В идеальном же мире, если задачи декомпозировать атомарно, то каждая из них должна быть размером в 1 Story Point. Команда, которая научилась так декомпозировать задачи, будет брать стабильно определенное число задач в спринт, не задумываясь про их оценку.

Чтобы дойти до этого этапа, необходимо определить количество story point-ов, которое будет закрываться командой за спринт для вычисления среднего значения на длинных дистанциях. Почему это не работает на практике:

  • Команда – динамическое множество. Не бывает команды, которая была бы стабильна 3-4 спринта подряд (увольнения, ротации, отпуска, болезни, найм, командировки). Среднее количество story point-ов всегда прыгает. Особенно это заметно в кросс-функциональных командах.
  • Команда не живет в вакууме. Любая команда какую-то часть времени живет в режиме огня. Каждый спринт – это разный огонь (когда-то больше, когда-то меньше).
  • Команда учится декомпозировать задачи (как минимум должна) и делает это по-разному (из-за чего скачет зависимость story point-а от времени).

Мифы про Story Point в моей редакции

SP можно переводить в часы.

Задача SP в рамках процесса планирования на длинной дистанции — научиться планировать реализацию задач с учётом неопределенности. Планирование — функция от времени.

SP нужны не только для планирования, но и для оценки сложности в рамках задачи приоритизации.

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

В попытке перейти на очень нестабильную абстрактную величину команда перестаёт понимать основную задачу планирования – понять, сколько задач команда сделает за спринт. Вместо этого мы играем в покер планирования, высчитываем количество story point-ов, забираем нужные в спринт и, сняв с себя ответственность за срок выполнения этих задач, расходимся, так и не решив задачу планирования.

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

Как это работает у нас сейчас:

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

  2. Пропускаем этап с калибровкой Story Point-ов при планировании задач.
  3. Пропускаем этап с оценкой задач в днях при планировании задач.
  4. Обсуждаем, сколько и какие задачи каждый участник команды сделает за спринт:
  • берём в спринт самую сложную или важную
  • решаем, будет ли время на менее сложную
  • повторяем предыдущий шаг, пока разработчик не скажет, что этого достаточно

5. Обсуждаем, что помешало выполнить задачи и учитываем это при следующем планировании по итогам спринта.

Одна из основных задач Product Manager — чувствовать адекватность оценки задач командой/разработчиками и загружать их (либо не давать лишних вопреки завышенным ожиданиям). Изобретая абстрактные величины, мы снимаем с себя контроль за оценкой задач (полагаясь на абстрактную величину и ожидая её стабильности на длинной дистанции), ответственность за сроки с разработчика и только усложняем себе работу.

99
4 комментария

Не люблю оценивать задачи. И никогда не любил 😬. Самая жесть когда ты оценил вроде задачу крупную (на глаз), а продукт менеджер спрашивает: "А что если мы уберем вот эту функциональность. Просто "вставим картинками типа", мы успеем в срок? А если вот эту вместо той сделаем?"

1

Спасибо за статью.

Интересно. А лиды обучались методам и подходам к оценке трудозатрат и каким? Или был просто использован один подход к оценке по сторипоинтам?

Во время оценки учитывались ли риски и как подходили к их идентификации?

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

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