velocity команды что такое
Планирование спринта — Capacity vs Velocity
Хороший план сегодня лучше безупречного плана завтра. (Джордж Паттон)
На протяжении многих лет я экспериментировал с двумя различными подходами планирования спринта и объема работ. Вот мои мысли об этом:
Давайте рассмотрим оба подхода.
Планирование на основе Capacity (вместимости) спринта
Преимущества:
Команда может совместно проектировать и разбирать задачи. Декомпозиция Историй на небольшие задачи вовлекает всю команду в принятие решений и, как результат, команда владеет собственным кодом.
Недостатки:
В результате команды вынуждены выяснять «почему они постоянно не выполняют свои планы» и искать решения на ретроспективе спринта. Но команда не в состоянии изменить процесс целиком. Поэтому, команда обычно придумывает обширный список задач, которые нужно сделать, чтобы решить проблемы. Большинство из таких задач являются бесполезными или неважными и приводят к сокращению объёма спринта.
Планирование основанное на Velocity (Скорости) команды
Выполнение спринта на основе скорости команды устраняет вышеуказанные проблемы и имеет некоторые дополнительные преимущества:
Планирование спринта самый нижний уровень планирование и без понимания того, КУДА и КАК вы идёте любая работа становиться бесполезной. На эти вопросы помогает ответить Roadmap. О подходах к составлению Roadmap продукта поговорим в следующей статье.
Помните, Scrum не решает ваши проблемы. Scrum показывает вам ваши проблемы. Вы должны решить проблемы самостоятельно. (Рон Джеффрис)
Производительность команды [Скорость](Velocity)
Производительность Скрам-команды часто называют скоростью, поскольку это буквальный перевод Velocity —англоязычного термина из Scrum. Это величина, отражающая количество работы, которое Скрам-команда может выполнить за один Спринт. Производительность является важной метрикой в Скраме и должна визуализироваться таким образом, чтобы все члены Команды могли ее видеть.
Производительность вычисляется в конце Спринта как сумма Стори Поинтов по всем полностью завершенным Элементам Бэклога Спринта. Стори Поинты по частично завершенным или незавершенным историям не должны участвовать в расчете производительности Команды.
Прогноз производительности должен отслеживаться в течение Спринта на основании Диаграммы Сгорания Работ Спринта. Конечно, в идеале итоговая производительность спринта должна совпасть с числом Стори Поинтов по всем задачам, запланированным на Спринт, но по факту она может отличаться как в меньшую, так и в большую сторону.
Производительность — это ключевой механизм получения обратной связи для Команды. Она позволяет оценить, как внедрённые процессные изменения повлияли на эффективность ее работы. И хотя производительность Команды от Спринта к Спринту может меняться, в среднем у хорошо функционирующих Скрам-Команд она стабильно возрастает примерно на 10% за Спринт.
Этот показатель помогает достаточно точно прогнозировать, сколько историй Команда может делать за один Спринт (в Скраме это называется Вчерашняя погода). Для расчета прогноза необходимо взять среднее значение Производительности за последние три Спринта. Это означает, что для корректного расчета производительности Команде необходимо работать в том же составе, как минимум, три Спринта, что бывает очень сложно объяснить нетерпеливым стейкхолдерам.
Без понимания Производительности невозможно планировать выпуск (релиз) продукта. Зная же Производительность, Владелец Продукта понимает, сколько Спринтов потребуется Команде, чтобы собрать функционал, готовый к поставке. В зависимости от длины Спринта, Владелец Продукта может запланировать дату релиза или понять, укладывается ли Команда в заданный свыше дедлайн.
Диаграмма Сгорания Работ Спринта визуально показывает прогресс Команды в Стори Поинтах по дням спринта. Это графическое представление того, сколько работы уже сделано и сколько еще остается сделать. Диаграмма позволяет Команде прогнозировать успех Спринта и предпринимать меры, чтобы к моменту окончанию Спринта все запланированные задачи были были завершены.
Информация, которая требуется команде для понимания и выполнения работы над Элементом Бэклога Продукта. Описание критериев готовности Элементов к разработке должно быть таким, чтобы для выполнения работы команде не требовалось дополнительных обсуждений и исследований. Такие Элементы можно принять в работу немедленно (они Immediately Actionable). Например, Элементы можно проверять на соответствие критериям I.N.V.E.S.T.
Критерии Приемки (Acceptance Criteria)
Специфические требования и приемочные тесты, которым должны соответствовать Элементы Бэклога Продукта, чтобы работа по ним считалась завершенной с точки зрения клиента / Владельца Продукта. Определение Критериев Приемки звучит очень похоже на Критерии Готовности, но в действительности эти понятия отличаются: Критерии Приемки касаются требований клиента к конкретному Элементу Бэклога, а Критерии Готовности формируются командой и касаются многих Элементов.
Оценка (Estimation)
Оценка – это прогнозирование усилий, которые потребуются для завершения работы над Элементом Бэклога Продукта. Она обеспечивает Владельцу Продукта и Скрам-мастеру уверенность в дате релиза и является базой для расчета производительности Команды. Существует множество способов оценки усилий Скрам-командой, но при этом всегда используются относительные единицы: например, Стори Поинты. Обычно оценка проводится в рамках Уточнения (Груминга) Бэклога Продукта.
Чтобы оценить объем работы над Элементом Бэклога Продукта, Скрам-команды обычно используют Стори Поинты. Это условная величина, позволяющая давать Элементам Бэклога относительные веса. Чаще всего для оценки в Стори Поинтах используются числа Фибоначчи (1, 2, 3, 5, 8, 13, …), что позволяет провести оценку достаточно быстро.
Мы хотим, чтобы компании были крутыми, а люди в них — счастливыми
Миф: Velocity – это производительность
День ото дня мы приближаемся к Agile-трансформации. Одна из самых важных целей для нас – увеличить velocity команд на X %. Слышали об этом? Слова Марка Андрессена о том, что «программное обеспечение пожирает мир», становятся отличительной чертой отраслей, которые раньше были менее автоматизированными.
Компания, занимающаяся разработкой Agile-продуктов, опросила более 18 000 клиентов и специалистов по разработке программного обеспечения.
Известный вклад в эту игру вносит Scrum – фреймворк, с помощью которого люди могут решать сложные адаптационные проблемы, эффективно и творчески обеспечивать продукты максимально возможной ценностью.
Velocity – это дополнительная и необязательная часть практики Scrum.
Когда вы начинаете применять Scrum, вся работа, которую нужно выполнить для достижения цели, может быть подытожена в любой момент. Для прогнозирования прогресса используются разные проективные практики, например диаграммы сгорания задач или накопительные диаграммы потока. Они оказываются весьма полезными. Однако они не оспаривают важность эмпирической оценки. В частности, Agile-фреймворки, такие как Scrum, не требуют использования каких-то практик. Однако эти дополнительные практики зачастую полезны. Все эти методы используются для построения дашбордов, которые помогают принимать решения.
Но Agile-разработка не обязательно должна отвечать таким дашбордам и отчетам, которые так любят менеджеры. Те немногие показатели, которые она выдает, имеют мало смысла вне контекста планирования работы команды. Если учесть получившуюся нехватку информации, может возникнуть соблазн переиспользовать velocity для измерения производительности. В конце концов, это же показатель потенциала команды, из чего следует, что его изменение с течением времени можно использовать для определения изменения производительности, не так ли?
Velocity – это способ измерения прогресса, а не конкретная величина!
Наряду с взаимодополняющими практиками, самый большой риск в таком подходе заключается в том, что velocity – это инструмент планирования, а не конкретная величина. Это оценка относительной эффективности, которая имеет тенденцию меняться с течением времени, но эти изменения не обязательно указывают на изменение производительности. В целом это условная величина, которая сильно варьируется между организациями, командами и продуктами. Нет надежного способа представить этот показатель в виде нормализованного числа, которое можно было бы использовать в конструктивном сравнении.
Тогда что же такое velocity?
Velocity — это показатель способности превратить бэклог продукта в работоспособный функционал за отрезок времени или определенную стоимость.
Моя цель — увеличить velocity команды.
Если учитывать, что velocity — это условный показатель, с ним легко играть, раздувать и сдувать его. Приравнивая velocity к производительности, вы создаете «искаженный стимул» для оптимизации velocity за счет разработки качественного программного обеспечения. Сознательно или нет, но команды будут пытаться продемонстрировать увеличение производительности, поднимая velocity. Если будет поставлена такая цель, то velocity станет пропорционально производительности. Но команды начнут «срезать углы», чтобы быстрее доставить функционал. В свою очередь это приведет к увеличению технического долга, а продукт, который команды развивают, будет становиться все более и более хрупким.
Волшебный момент: откройте диаграмму сгорания задач команды
Допустим, ваша задача показывать диаграммы сгорания задач руководству. В течение каждого спринта линия прогресса начнет магическим образом пересекаться с целью по доставке продукта. Форма линии может сильно варьироваться, но каким-то образом будет происходить ускорение или замедление во второй половине спринта, чтобы соответствовать ожиданиям.
Velocity – это мера объема работы, которую может выполнить команда. Это не то же самое, что мера ценности или влияние этой работы. Velocity действительно может быть относительно стабильной в успешной слаженной команде, поскольку количество усилий, требуемых в каждом спринте, остается неизменным. В таком случае искусственное давление на velocity приведет лишь к искажению картины.
Как же тогда измерить производительность?
Производительность определяется путем анализа входов и выходов из деятельности. Достаточно легко измерить входные данные для процесса разработки ПО, но сложнее измерить выходные данные каким-либо логичным способом.
Итоговый результат важнее выходных показателей.
Грубая количественная мера, такая как количество строк кода, не даст никакой рациональной информации. Она слишком сильно зависит от изменчивых факторов, таких как стиль написания кода, язык разработки и подход к реализации. Этот показатель может оказаться контринтуитивным, поскольку хорошо написанный код, который долго разрабатывался, часто занимает меньше строк.
Как измерить ценность?
Если вы будете выводить производительность из velocity, то увидите статистическое улучшение. Но оно не будет означать успешное развитие.
В конечном итоге, такие Agile-фреймворки как Scrum, опираются на эмпирический подход. Эмпирический подход в свою очередь опирается на проверку, адаптацию и прозрачность, обеспечивая непрерывный цикл обратной связи между командами разработчиков и бизнесом. Более значимая мера успеха должна фокусироваться на реальной выгоде, а не на абстрактных нормализованных показателях.
Помните, что релиз нужен для понимания ценности.
Говорю ли я, что метрики — это плохо? Ни в коем случае. Я не говорю, что метрики бесполезны. Они помогут вам собрать информацию, принять решение о корректирующих действиях, и самое главное, понять, в какую сторону развиваться. Если вы склонны удовлетворять постоянный голод руководства отчетами, этим вы в итоге просто создаете бессмысленные накладные расходы. В конце концов, программное обеспечение — это сложно, его развитие нельзя предсказать, но можно спрогнозировать!
Тогда что же измерять?
Одна из идей Кена Швабера называется «Evidence-Based Management» или «Доказательное управление». Он говорит, что управление на основе фактических данных организации, занимающейся разработкой ПО, является самым полезным способом преобразования ПО из издержек в прибыльные активы.
Рассказ о EBM выходит за рамки этой статьи, поэтому я порекомендую вам перейти по этой ссылке, если вы хотите получить дополнительную информацию по этой теме.
Участники вместе с преподавателем-экспертом разберут виды оценок проектов и задач в зависимости от срочности, размера и сложности объёма работ.
Метрики в Scrum и Kanban
По разным причинам Scrum получил очень широкое распространение среди IT компаний. Многие компании и отдельные команды начали внедрять Scrum в своих проектах. У одних это получается, у других не очень. Грамотный и опытный специалист перед внедрением чего-то нового всегда задумывается о метриках. Как убедиться, что внедрение Scrum идет по плану? Улучшается ли производительность команды? Нет ли каких-то проблем? Если вы тоже задавались этими вопросами, добро пожаловать под кат.
И тут в Scrum очень мало ответов. Кроме сугубо бизнес-метрик, которые можно применять практически в любом процессе (ROI, Earned Business Value, Running Tested Features и т.д.), в Scrum предлагается метрика Velocity. Но уже писано переписано, что использовать Velocity в качестве метрики не стоит. Это может привести к неожиданным неприятным последствиям.
Получается, что хороших метрик на первый взгляд нет. В конце статьи я упомяну некоторые неявные метрики в Scrum, но пока давайте поговорим о причине проблем. Самая главная причина – это время. Бизнес практически все измеряет временем (даже деньги – это время). А в Scrum это самое время фиксируется (быстренько все вспоминаем «железный треугольник») и разработка ведется итерациями. Но внутри итерации происходит много всего интересного: мы делаем задачи, пользовательские истории, тестрируем, собираем продукт, устанавливаем и т.д. И вся эта информация теряется на фоне итерации. Происходит так называемое «сглаживание шумов». Если мы затянули с одной активностью, то можем нагнать в другой. Ведь итерация целиком принадлежит команде и команда может «придумывать» внутри итерации что угодно, лишь бы в конце все было готово. Этот подход очень хорош для планирования, но отвратителен для метрик.
Во-первых, мы очень редко можем снимать показатели метрик – в конце итерации. А это в лучшем случае раз в неделю. В основном, все таки раз в две недели. Во-вторых, мы уже упоминали «сглаживание» и оно тоже вносит свои коррективы. Всю итерацию ситуация была из рук вон плохая, а в конце все сделали нечеловеческое усилие и вуаля – все готово и метрики в порядке. Хорошо это или нет? Нет! Мы теряем полезную информацию и не учимся на своих ошибках.
Совсем по-другому дела обстоят в Kanban. Тут внимание уделяется каждой задаче. Метрики снимаются со всего потока задач, который проходит через команду разработки. Вот краткий список метрик:
Этот простой список метрик позволяет полностью понимать и контролировать процесс разработки, постоянно анализируя и улучшая его. В идеале данные метрики считаются в разрезе категорий задач (по размеру, по типу, по срочности), чтобы еще улучшить понимание происходящего и позволить точнее прогнозировать результаты работы команды.
Я обещал упомянуть о неявных метриках в Scrum. Эти метрики можно собирать, используя Burndown Chart. Вы можете анализировать его с целью определения шаблонов работы команды, рассматривая ежедневный прогресс и гладкость графика. Вы можете усилить анализ. Для этого нужно ввести категоризацию задач и строить Burndown Chart по каждой категории. Некоторые команды ведут отслеживание метрик задач внутри итерации, но на мой взгляд это несколько противоречит принципам Scrum – внутри итерации команда может работать над задачами в произвольном порядке.
Подведу итог. В Kanban метрики гораздо сильнее, чем в Scrum, но это не делает Kanban более простым в реализации подходом. Наоборот, Kanban требует от команды гораздо больше ответственности, контроля и анализа с постоянным усовершенствованием. Зато с точки зрения бизнеса Kanban гораздо более прозрачный и контролируемый.
А какие метрики применяете вы? Какие метрики хорошо работали для вас в Scrum?
Velocity Scrum
Если представить себе движение автомобиля, то скорость в нём оценивается по спидометру. Глядя на него всё предельно ясно. Однако в жизни в целом и в каком-то конкретном деле нет спидометра, и как оценить скорость объективно – уже вопрос. Если представить, что в автомобиле сломался спидометр, то скорость может быть оценена постфактум, то есть когда человек будет ехать 60 минут и проедет, например, 100 км, затем за 60 минут – 120 км, то он будет видеть, с какой скоростью двигался – около 110 км/ч. При этом, если во время следующих 60 минут он остановится и потратит на заправку 12 минут, на обед 15 минут и проедет 55 км, то средняя скорость за весь путь составит – 98 км/ч.
Как и при движении на автомобиле, скорость можно измерять и в Scrum, и называется это Velocity (скорость). Расчет Scrum Velocity очень простой и также состоит из поставленных отметок, как, например, определённое количество километров через каждые 60 минут.
Для примера предоставим график Velocity, отображающий по горизонтальной оси количество Sprints, а по вертикальной – Story Points.
В таком графике, по сути, изображено Story Points, и на основе этих показателей выстраивается среднее значение скорости. Однако график Velocity может быть и иной, с простым отображением Story Points, на основе которых визуально видна тенденция.
Если сравнивать с движением по дороге, то список ассоциаций, влияющих на скорость, может быть такой:
Хочется, однако, отметить, что по поводу метрики Velocity в Scrum ходят споры, и кто-то считает данные графики не очень полезными и сложными в определении возможных проблем, да и самого разгона. В целом все сходятся во мнении, что Velocity должен использоваться специалистом как дополнительное наглядное отображение эффективности, которое, как калька, накладывается на другие данные, помогая скорректировать аналитическую работу Scrum Master.
Story Points
Чтобы отчетливо понимать как формируется Velocity в Scrum, нужно понимать как грамотно оценивать Story Points. Данное понимание приводит к развитию максимально продуктивной команды.