WSJF, Weighted Shortest Job First
Что такое WSJF?
WSJF (Weighted Shortest Job First, Взвешенная Кратчайшая Работа Сначала) — это техника расстановки приоритетов, используемая для определения последовательности выполнения работ (например: Фич, Капабилити, Эпиков) с целью производства максимальной экономической выгоды. В SAFe WSJF рассчитывается как Стоимость Задержки (CoD), поделенная на продолжительность работы.
В системе, основанной на потоке, приоритеты должны постоянно обновляться для обеспечения наилучших экономических результатов. Другими словами, определение последовательности выполнения работ позволяет достичь наиболее эффективных результатов, по сравнению с расстановкой приоритетов, основанных на теоретическом прогнозе ROI (размера возврата инвестиций) для каждой отдельной работы.
С этой целью SAFe применяет WSJF для постоянной приоритизации беклогов. При расчете WSJF используются следующие данные: относительная ценность для пользователей и бизнеса, критичность по времени, снижение рисков и/или создание возможностей, а также размер работы. Для удобства WSJF автоматически не принимает в расчет уже сделанные инвестиции (невозвратные затраты, sunk costs), что является фундаментальным принципом бережливой экономики.
В книге «Принципы потока разработки продукта» [2] Райнертсен описывает модель (WSJF) для приоритизации работ на основе Стоимости Задержки (CoD). Проще говоря, CoD — это деньги, потерянные из-за задержки или невыполнения работы в течение определенного времени. Это оценка экономической ценности работы с течением времени. Например, если эксплуатируемая фича должна приносить 100 000 в месяц, а задержка её производства составит три месяца, общая стоимость задержки (CoD) составит 300 000. В SAFe WSJF используется для следующих элементов разработки: Фичи, Капабилити (возможности) и Эпики, содержащиеся в соответствующих беклогах.
Работы, которые могут доставить наибольшую ценность в кратчайшие сроки, дают наилучшую экономическую отдачу. Применительно к SAFe модель WSJF поддерживает экономические принципы бережливого потока разработки продуктов:
- Принять экономическую точку зрения
- Игнорировать невозвратные затраты (sunk costs)
- Принимать финансовые решения непрерывно
- Использовать правила принятия решений для децентрализации принятия решений и контроля
- Если вы используете только один показатель – используйте Стоимость Задержки (Cost of Delay)
На рисунке 1 показано применение разработанного Доном Рейнертсеном WSJF для приоритизации будущих работ. Области синего цвета иллюстрируют суммарную стоимость задержки (CoD) для каждого из двух рассматриваемых вариантов приоритизации. Как видно из рисунка, работы с более высоким результатом расчета WSJF обеспечивают наилучшие экономические результаты, а «выбор лучшей следующей работы» может иметь огромные финансовые последствия, что видно из разницы площадей закрашенной области (стоимость задержки, создающая различный фактический объем потерь) для каждого из вариантов в зависимости от последовательности их выполнения.
Рисунок 1. Применение WSJF для определения приоритетов обеспечивает лучшие экономические результаты
Оценка стоимости задержки
Для вычисления WSJF в идеале нужно определить CoD (числитель) в абсолютном финансовом выражении за единицу времени и время выполнения работы (знаменатель) с определенной степенью точности. Однако на практике обе цифры может быть чрезвычайно трудно рассчитать. В связи с этим, числитель (стоимость задержки, CoD) может быть лишь относительной оценкой, поскольку трудно узнать фактическую ценность новой работы (новой фичи), которая еще не выпущена на рынок. Agile учит нас, как быстро проводить относительные оценки: поскольку в беклоге находится много «работ, которые необходимо выполнить», используется специальный относительный набор значений для сравнения работ между собой.
Первый шаг такой относительной оценки состоит в том, чтобы собрать вместе всех необходимых заинтересованных лиц и коллективно оценить относительную стоимость задержки работ в беклоге. На рисунке 2 показаны три основные составляющие CoD для любой работы.
Рисунок 2. Компоненты Стоимости Задержки
На рисунке 3 приведена формула вычисления Стоимости Задержки (CoD). Чтобы произвести вычисление сначала для каждой составляющей CoD, элементы беклога сравниваются относительно друг друга, используя ту же модифицированную шкалу Фибоначчи, что и в известной технике «Покер оценки». Затем относительная CoD каждой работы вычисляется суммированием трех относительных оценок:
Рисунок 3. Расчет относительной стоимости задержки
Оценка продолжительности работы
Следующий шаг оценки требует вычисления знаменателя WSJF – продолжительности работы. Эту продолжительность в абсолютных единицах может быть также сложно определить, особенно на ранней стадии, когда доступная емкость и точное время, необходимые для каждой работы, неизвестны. Другими словами, до начала работы трудно понять, кто будет работать над ней, сколько людей может быть вовлечено и сколько времени это займет.
Однако, поскольку выполнение более крупных заданий занимает больше времени, чем более мелких, относительный размер (сложность) работы можно использовать в качестве хорошего заменителя для определения «бюджета» продолжительности выполнения работы. (В качестве аналогии: если только я стригу свой газон вокруг дома, и у меня двор перед домом в три раза больше, чем задний двор, то стрижка двора перед домом займет в три раза больше времени, чем стрижка заднего двора.)
Определение и использование относительного размера/сложности работы в качестве заменителя (прокси) для абсолютного значения продолжительности выполнения работы приводит к существенному упрощению расчета и быстрому сравнению работ между собой с помощью WSJF, как показано на рисунке 4.
Рисунок 4. Формула для относительного вычисления WSJF
Примечание: использование относительного размера работы в качестве заменителя абсолютной продолжительности выполнения работы
Важно отметить, что относительный размер работы не является идеальным заменителем для продолжительности работы. Рассмотрим два сценария:
- Предположим, что необходимые для выполнения работы специалисты готовы приступить к работе немедленно, что позволяет доставить большую работу с высокой ценностью быстрее, чем ожидалось. В этой ситуации выполненная работа позволит обеспечить большую ценность за более короткий период. (Если три человека будут косить мой большой газон перед домом, в то время как я займусь небольшим задним двором, все эти работы будут иметь примерно одинаковую продолжительность, но не одинаковую ценность.)
- С другой стороны, небольшая работа может сопровождаться дефицитом ресурсов или сложными зависимостями, в результате чего маленькая работа может занять больше времени, чем большая работа.
Если вы сталкиваетесь с одним из этих двух сценариев, вам необходимо будет вносить соответствующие корректировки после расчета относительной оценки продолжительности. Часто ли такие сценарии происходят в реальной жизни? Как правило, не очень часто, и в большинстве случаев достаточно провести быструю относительную оценку WSJF без корректировок оценки относительного размера/сложности. Поскольку SAFe – это система, основанная на потоке, незначительные ошибки в расчете продолжительности не так критичны, так как следующая важная работа достаточно быстро поднимается выше в беклоге при очередном уточнении.
Вычисление WSJF
На практике расчет и расстановка приоритетов с помощью WSJF существенно проще приводимого здесь описания. Сначала проводим сравнение работ (возьмем для примера три фичи) для каждого компонента CoD по отдельности и оценим относительный размер работ, для чего обсудим каждый из столбцов в таблице (рисунок 5). Как и в случае с оценкой историй, модифицированные числа Фибоначчи работают следующим образом: чем больше неопределенность – тем больше числа. Шаги будут выглядеть следующим образом:
- Начните с оценки компонентов CoD (пользовательская и бизнес-ценность, критичность по времени, снижение риска и/или создание возможностей) в столбцах 1, 2 и 3. Работайте одновременно только с одним столбцом! Сначала выберите наименьший элемент и присвойте ему «1». Затем перейдите к оценке других работ относительно этой работы. Примечание: очень важно убедиться, что в каждом столбце всегда есть элемент, обозначенный как «1». Только наличие наименьшего элемента нормализует параметры других работ относительно друг друга!
- Сложите все компоненты, чтобы вычислить CoD в столбце 4.
- Оцените относительный размер/сложность работы в столбце 5; опять же, сначала выберите наименьший элемент и присвойте ему «1».
- Вычислите WSJF в столбце 6, поделив CoD на размер работы.
Самый высокий показатель WSJF будет обозначать следующую по важности работу и так далее по уменьшению.
Рисунок 5. Таблица для расчета WSJF
Модель WSJF стимулирует деление большой работы на более мелкие части. В противном случае большие важные работы могут навсегда остаться не выполненными. Это – Agile в действии. Поскольку реализация работ идет инкрементально, то всякий раз, как продолжение работы над большим элементом будет иметь низкую оценку по сравнению с другими работами, в работу будут браться элементы с более высокой оценкой.
Еще одним преимуществом модели SAFe WSJF является то, что в расчете не требуются абсолютные значения CoD в денежном выражении, что значительно снижает сложность и время, затрачиваемое на расстановку приоритетов. Вместо этого каждый элемент работы сравнивается относительно других элементов из единого беклога. Поскольку обновленные оценки в беклоге отражают только размер оставшихся работ, пересмотр приоритетов на постоянной основе означает, что система будет автоматически игнорировать невозвратные затраты (sunk costs). Таким образом, WSJF всегда будет выбирать следующую лучшую работу на основе текущих экономических факторов.
Применимость WSJF
WSJF – это общий алгоритм, который особенно полезен в системах, основанных на потоке, где постоянный пересмотр приоритетов является движущей силой экономической ценности. Но не стоит рассматривать результаты WSJF как принятие финального решения. WSJF – это просто инструмент, который дает заинтересованным лицам почву для размышлений, и именно они в конечном итоге должны принять окончательное решение.
Как описано в этой статье, WSJF особенно полезен для приоритизации фич и капабилити (возможностей) в беклогах Релизного Поезда (Agile Release Train, ART) и Поезда Решений (Solution Train), так как:
- Фичи являются основным экономическим драйвером для поездов; в связи с этим некоторые инвестиции в процесс расстановки приоритетов оправданы.
- В беклоге не так много фич одновременно; беклог Agile Release Train обычно содержит около 100 фич, ожидающих внимания. Как правило, на практике не сложно поддерживать скользящие оценки WSJF с течением времени.
- Поскольку фичи имеют решающее значение для производительности ART, становится очень важным вклад со стороны Менеджмента Продукта, Архитекторов, Владельцев Бизнеса, вовлеченных в разработку команд и других заинтересованных лиц. Стоит приложить усилия, чтобы всем вместе расставить приоритеты фичам Поезда.
Стоит обратиться внимание, что в некоторых случаях WSJF не так хорошо подходит для применения, например:
- При расстановке приоритетов в беклоге команды – Беклог команды включает много небольших элементов — Историй. Здесь приоритеты определяются приоритетами фич в беклоге Поезда, из которых и появляются Истории и локальные задачи. Поэтому не стоит тратить время на многопараметрический анализ и вычисление WSJF. Поскольку Истории имеют небольшой размер и реализуются в рамках Итерации, знаменатель WSJF (продолжительность) не является важным показателем в принципе.
- В качестве единственного определяющего фактора при расстановке приоритетов Эпиков Портфеля – область, в которой WSJF полезен, но не полностью объективен сам по себе, — это приоритизация Портфеля на более поздних этапах жизненного цикла Эпиков. При этом на ранних этапах Канбана Портфеля WSJF весьма полезен. Но поскольку на этом уровне мы имеем дело с большими инвестициями, простое сравнение «2» с «5» может иметь последствия, выраженные в миллионах или десятках миллионов инвестиций. В этом случае необходимо больше времени инвестировать в проведение оценок, предусмотренные в Бережливом Бизнес Кейсе (Lean Business Case), включая оценку ценности или потенциальную денежную доходность, а также более глубокие размышления о вероятной продолжительности доставки.
Узнать больше:
- [1] Knaster, Richard, and Dean Leffingwell. SAFe 5.0 Distilled, Achieving Business Agility with the Scaled Agile Framework. Addison-Wesley, 2020
- [2] Leffingwell, Dean. Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise. Addison-Wesley, 2011.
- [3] Reinertsen, Don. Principles of Product Development Flow: Second Generation Lean Product Development. Celeritas Publishing, 2009.
Статья подготовлена по материалам Scaled Agile, Inc. и не является официальным переводом статьи «Weighted Shortest Job First»