Всем привет! Я Анастасия Жадринская, деливери-менеджер в Тинькофф Кассе. Да, эта статья опять про оценки и сроки выполнения задач. Сроки без вуду, астрологии, гаданий и привлечения экспертов. В статье рассмотрю метод Монте-Карло — элегантный и простой в применении математический подход для прогнозирования сроков завершения проектов или объема выпуска задач.
![](https://habrastorage.org/getpro/habr/upload_files/9e5/c7e/bee/9e5c7ebee4bdbab363e526b78bb322eb.png)
Подробнее про метод
Метод Монте-Карло — математический метод, который прогнозирует возможные исходы неопределенного события. Суть метода заключается в том, что процесс описывается математической моделью с использованием генератора случайных величин, модель многократно обсчитывается, на основе полученных данных вычисляются вероятностные характеристики рассматриваемого процесса
Модель Монте-Карло берет реальные показатели объема выпуска задач за некоторый промежуток времени. Обсчитывает эти данные с помощью модели, повторяя вычисления тысячи раз. В результате расчетов у нас получаются тысячи результатов прогноза. Модель берет их и рассчитывает, с какой вероятностью произойдет тот или иной исход. На выходе мы получаем диаграмму распределения вероятности прогноза. В статье мы рассмотрим инструмент Троя Маггениса, автора книги Forecasting and Simulating Software Development Projects: Effective Modeling of Kanban & Scrum Projects using Monte-carlo Simulation, который помогает использовать модель для расчета прогнозов в ИТ.
Монте-Карло на примере
Допустим, есть данные по объему завершенных Feature за последний год. Мы хотим спрогнозировать, к какой дате и с какой вероятностью мы завершим 80 Feature.
![Выпуск команды за год по месяцам Выпуск команды за год по месяцам](https://habrastorage.org/getpro/habr/upload_files/a1d/f65/616/a1df65616ff3f19ae6008387902233fa.png)
Берем данные о выпуске и загружаем их в симулятор, вписываем количество задач, по которым хотим получить прогноз. На основе этих данных симулятор формирует ряд случайных моделей и выдает итоговое распределение прогнозируемых дат выполнения 80 задач с разной степенью вероятности.
Пример прогноза:
со 100%-й вероятностью мы закроем 80 Feature за 18 месяцев, дата завершения — 16.02.2025;
с 85%-й вероятностью мы закроем 80 Feature за 14 месяцев, дата завершения — 27.10.2024.
Что повлияет на точность прогноза? Стабильность системы. Она определяется повторяемостью результатов вашей команды. Чем меньше разброс выпуска задач между месяцами, тем система предсказуемее. Как сделать систему более стабильной? Ограничивайте количество незавершенной работы.
Как построить такой прогноз для задач:
Скачать файл Throughput Forecaster.xlsx.
Заполнить исторические данные. Для этого переходим на вкладку Historical Samples и в графе заполняем Enter Samples Below исторические значения по выпуску вашей команды. Порядок внесения данных не имеет значения. Если вы пользуетесь Jira, данные по команде можно найти в отчете Throughput в плагине JFC. Можно взять период 1, 2, 3 или 4 недели. Минимальное количество периодов для расчета прогноза — 7. Максимальное количество периодов неограниченно, но лучше использовать периоды в рамках года: так на ваш прогноз не будут влиять данные, которые уже не актуальны, ведь скорость изменений в ИТ крайне высока.
Для корректности прогноза стоит учитывать консистентные данные. Например:
загружаем данные по закрытым Feature + Bug, прогноз строится для Feature + Bug;
загружаем данные по закрытым Feature, прогноз строится только для Feature.
Также мы рекомендуем рассчитывать прогноз по задачам, несущим дискретную ценность для клиента, например по Feature. Но и прогноз по более низкому уровню декомпозиции может быть полезен. Главное — не смешивать разные уровни декомпозиции, например Feature и Sub-task.
![В январе команда закрыла 4 Feature, в феврале — 7, в марте — 8 и так далее В январе команда закрыла 4 Feature, в феврале — 7, в марте — 8 и так далее](https://habrastorage.org/getpro/habr/upload_files/db2/154/7e9/db21547e93168a96fbee21127680e875.png)
Настроить прогноз. Для этого переходим на вкладку Forecast и начинаем заполнять поля по условиям нашего прогноза:
Start Date – дата с которой будет рассчитываться прогноз.
How many stories are remaining to be completed? Для какого количества задач мы хотим рассчитать результаты прогноза, интервал или точное количество. Scope complexity — коэффициент для оценки сложности объема работ. Чем точнее вы понимаете декомпозицию и требования к общему скоупу работ, тем ниже этот коэффициент. Если вы работаете с большой степенью неизвестности, коэффициент повышается. Значения корректирующего коэффициента можно настроить на вкладке Settings.
Stories are often split before and whilst being worked on. Estimate the split rate low and high bounds. Здесь мы указываем степень уверенности в декомпозиции текущего бэклога. 2 значения указаны для того, чтобы мы могли оценить разброс значений декомпозиции. 1 означает, что мы на 100% уверены в том, что прогнозируемые задачи не будут декомпозироваться на более мелкие элементы. Например, мы предполагаем, что каждая из задач в прогнозе декомпозируется еще на 2—5 подзадач, указываем low — 2, high — 5.
Throughput. How many completed stories per week or sprint do you estimate low and high bounds? Указывает заданный интервал по выпуску задач в Historical Samples. Например, в каждой ячейке указан выпуск за 4 недели, указывайте его тут.
Use historical throughput/velocity data OR enter a low and high estimate below. Выбираем Data, так ваш прогноз будет основываться на исторических данных.
Прочие поля остаются без изменений.
![Пример заданных значений для прогноза Пример заданных значений для прогноза](https://habrastorage.org/getpro/habr/upload_files/928/efe/f2a/928efef2ae52798bf6500ae8178043c6.png)
Получить результаты — это таблица с распределением вероятности длительности завершения наших задач.
Пример:
со 100%-й вероятностью мы закроем 80 задач за 18 месяцев, дата завершения — 19.05.2024;
с 85%-й вероятностью мы закроем 80 задач за 14 месяцев, дата завершения — 28.01.2024.
![Красные значения: не стоит рассчитывать на эти сроки ни при каких обстоятельствах. Желтое: тоже довольно безответственно, вероятность 50% равна броску моменты: может быть, успеете, а может быть, и нет. Зеленое: то, на что стоит опираться, понимая, что даже 85% означает, что есть один шанс из восьми (немало, да?) в этот срок не уложиться. Приемлемый это для вас риск? Если да, вперед, если нет, лучше брать более вероятный прогноз Красные значения: не стоит рассчитывать на эти сроки ни при каких обстоятельствах. Желтое: тоже довольно безответственно, вероятность 50% равна броску моменты: может быть, успеете, а может быть, и нет. Зеленое: то, на что стоит опираться, понимая, что даже 85% означает, что есть один шанс из восьми (немало, да?) в этот срок не уложиться. Приемлемый это для вас риск? Если да, вперед, если нет, лучше брать более вероятный прогноз](https://habrastorage.org/getpro/habr/upload_files/29d/224/b19/29d224b192ba192e0dd6b6216ddb0e25.png)
Красные значения: не стоит рассчитывать на эти сроки ни при каких обстоятельствах. Желтое: тоже довольно безответственно, вероятность 50% равна броску моменты: может быть, успеете, а может быть, и нет. Зеленое: то, на что стоит опираться, понимая, что даже 85% означает, что есть один шанс из восьми (немало, да?) в этот срок не уложиться. Приемлемый это для вас риск? Если да, вперед, если нет, лучше брать более вероятный прогноз
Продвинутая настройка учитывает возможное отвлечение команды на другие задачи по сравнению с нашими использованными историческими данными. Для этого нужно выбрать подходящий уровень фокусировки на запланированной работе.
![Коэффициент можно настроить на странице Settings Коэффициент можно настроить на странице Settings](https://habrastorage.org/getpro/habr/upload_files/35f/ed9/abe/35fed9abec77ff4e16b04a2e01217310.png)
Вопрос — ответ
Чем такие прогнозы отличаются от экспертных прогнозов аналитиков? Они учитывают всю неопределенность, с которой встречалась команда, — живой человек так не сможет.
Экспертные прогнозы учитывают только фактическое время работы над задачей, а это в нашей индустрии бесполезно, так как гораздо больше времени занимают разные ожидания, блокировки и тому подобное.
Прогнозы методом Монте-Карло практически не требуют затрат и считаются стандартом прогнозирования в смежных индустриях вроде промышленности, химии, экономики.
Как понять, можно ли доверять моему прогнозу? Убедитесь, что вы ввели верные исторические данные. Результаты расчета напрямую зависят от их точности.
Если с данными все в порядке, можно оценить степень достоверности по выбранной вероятности. Вероятность наступления прогноза от 85 до 100% считается высокой. 50% говорит о том, что прогноз может сбыться и не сбыться с одинаковой вероятностью — подбросьте монету. Наступление событий с прогнозом ниже 50% можно считать маловероятными, лучше не использовать такой прогноз.
Что делать, если нет исторических данных? Можно попробовать взять исторические данные с похожей команды или просто придумать их. Но правдоподобность прогноза в таком случае будет стремительно ухудшаться.
Лучше поработать до закрытия 7—11 задач новой командой и перестроить прогноз уже реальной командой.
Как сделать прогнозы точнее? Делайте процесс более предсказуемым. Вот простейшие шаги к улучшению качества прогнозов.
Что делать? | Зачем делать? |
Визуализируйте всю работу | Так у вас будут точные исторические данные и средство контроля незавершенки |
Ограничивайте количество незавершенной работы | Так вы нормализуете сроки и объем выпуска |
Завершайте начатую работу, не откладывайте ее в блок | Так вы решите проблему скачущих объемов выпуска |
Декомпозируйте работу | Так ваш ритм выпуска станет более управляемым и предсказуемым |
Можно ли попроще, без вот этих excel-файлов? Да, можно. Скачивайте Chrome-расширение Jira Flow Companion, нажимайте Analyze около названия вашей доски. На крайней правой вкладке расширения будет тот же самый Монте Карло, построенный на основании данных вашей доски.
Не забудьте отфильтровать данные быстрыми фильтрами Jira! Но excel-файл дает возможность сделать более тонкие настройки.
Как мне получить данные по выпуску команды? Данные о производительности команды можно посмотреть через расширение Chrome для Jira — Jira flow companion. После установки на доске команды появится кнопка Analyze Flow, нажмите на нее и перейдите в отчет Throughput. Если команда использует спринты, можно взять данные по спринтам из отчетов Jira.
В команде менялись типы задач в течение года. Какие указывать? Указывайте максимально схожие типы задач. Например, первые полгода команда работала с одним типом, затем вы разделили их на два. Для общего прогноза указывайте один тип в первые 6 месяцев и сумму по двум новым в следующие 6 месяцев. Так вы построите прогноз для двух типов задач.
Как построить прогноз по проекту, в котором участвует больше одной команды? Если команды выполняют работы в некоторой логической последовательности: рассчитываем прогноз по критической цепи. Для каждого из этапов проекта используем прогноз сроков работы только основной команды, работающей на этом этапе, остальные команды игнорируем. Потом выстраиваем полученные в разрезе этапов прогнозы в логическую последовательность — так получаем общий прогноз по проекту.
Такое прогнозирование используют регулярно — с каждой неделей появляются новые данные по производительности и изменению скоупа. Было бы расточительно не строить новые прогнозы на постоянной основе, ведь они с каждым разом будут все точнее.