Закон Литтла и стабильность системы — интервью с Даниэлем Ваканти
Предисловие переводчика: эта статья — диалог Клауса Леопольда и Даниэля Ваканти. Они обсуждают Закон Литтла. Сам закон был сформулирован профессором Джоном Литтлом в рамках теории массового обслуживания. Закон гласит, что среднее долгосрочное количество работы в стабильной системе (L) равно средней долгосрочной интенсивности входящего потока работы (λ), умноженной на среднее время пребывания работы в системе (W). Алгебраически, формула выглядит так: L = λW. Пример — если в очереди в поликлинике в среднем 10 человек, то они их среднее ожидание приёма у врача составит больше времени, чем если бы средняя очередь была 5 человек и люди не приходили слишком рано. О ценности закона и способах его использования — читайте ниже.
Даниэль Ваканти — ветеран разработки ПО. Он начинал как Java разработчик/архитектор, проработал с Lean и Agile методами более 15 лет. Дэн принимал участие в разработке Канбана и был участником первого Канбан-проекта в 2007 году. Вместе со своей компанией “Actionable Agile”, он специализируется на инструментах прогнозирования и слывёт неоспоримым мастером потоковых метрик.
Клаус: Вы — один из экспертов потоковых метрик и активно работали с законом Литтла. Почему закон Литтла так важен?
Дэн: Если ответить кратко — он не важен. Вернее он важен не в том ключе, в котором люди привыкли о нем думать. Забудьте математику. Большую часть времени закон Литтла используют с позиции детерминизма. В формулу вставляются значения, и закон Литтла выдает ответ. С таким подходом есть две проблемы:
- Закон Литтла смотрит в прошлое, а не в будущее — подробнее рассмотрим это дальше.
- Закон Литтла полезен в тех ситуациях, когда вы можете измерить только две метрики, потому что третью мерить слишком тяжело, слишком дорого или и то и другое сразу. Сейчас все три метрики очень легко измерить, поэтому закон Литтла не следует использовать для расчетов. Точное измерение отсутствующей метрики будет в этом случае правильным подходом.
Несмотря ни на что, очень важно понимать допущения, которые мы принимаем чтобы закон Литтла работал. Это не просто уравнение, это уравнение с рядом допущений. Моя рекомендация — игнорировать уравнение и сфокусироваться на допущениях. Эти допущения — руководство к установлению политик, необходимых, чтобы процесс стал предсказуемым. Это, в том случае, если вы цените предсказуемость.
Клаус: Когда заходит разговор про метрики, большинство людей сразу хотят прыгнуть к сочным темам вроде вероятностного прогнозирования. Хорошо ли с этого начинать ?
Дэн: Чаще всего проблема в том, что для таких вещей как симуляции Монте Карло, нужно обладать знаниями о стабильности системы. Вот здесь закон Литтла проявляется. Если процесс следует допущениям закона Литтла, значит процесс показывают определенную степень стабильности и вы можете постепенно начинать использовать сложные техники вроде симуляций Монте Карло. Если процесс последовательно нарушает допущения закона Литтла, тогда этот процесс, по определению, нестабилен и любой тип прогнозирования — вероятностного или иного — имеет сомнительную ценность. Вот почему мне очень нравится ваш подход в этой книге (речь о книге Клауса Леопольда “Practical Kanban”, для которой было взято интервью — прим. пер.). Сначала вы фиксируете очень простую метрику, чтобы получать обратную связь о стабильности системы.
Клаус: Изначальная формула закона Литтла — L = λ × W (подробнее про формулу см. предисловие — прим. пер.), но мы используем CT = WIP/TH (CT: время цикла/cycle time, TH: пропускная способность/throughput). В чем различие и на что оно влияет?
Дэн: На самом деле, обе формулы точно передают закон Литтла, если допустить, что мы наблюдаем соотношение средних значений. Различие здесь — точка зрения: L = λ × W рассматривает процесс с точки зрения работы, поступающей в систему. Наоборот, CT = WIP/TH изучает процесс с точки зрения работы, выходящей из системы. Хотя обе формулы передают закон Литтла, разные точки зрения многое меняют. Как я уже сказал, есть две важные детали: уравнение и допущения, стоящие за уравнением. Допущения за CT = WIP/TH отличаются от допущений, стоящих за L = λ × W. Это важно осознать, ведь как я сказал, закон Литтла можно понять только вместе с допущениями, которые за ним стоят. Сначала нужно разобраться, что для вас важнее, работа поступающая в систему, или выходящая из нее. То, с какой стороны вы смотрите на систему, повлияет на все действия по прогнозированию.
Клаус: Как читатели этой книги могли бы использовать закон Литтла в своей ежедневной работе с Канбан-системами?
Дэн: Использовать его можно, если понять допущения, стоящие за ним. Далее нужно настроить процесс таким образом, чтобы допущения нарушались только в крайнем случае. Как я и сказал, это важно только если вы цените предсказуемость.
Клаус: Как выглядят эти допущения?
Дэн: Если вы используете версию закона Литтла с пропускной способностью, то вы принимаете эти пять допущений:
- Средний объем входного потока работ должен быть равен среднему объему выходного потока.
- Какждый начатый рабочий элемент будет когда-нибудь закончен и покинет систему.
- Объем незавешенной работы (WIP) должен быть одинаковый в начале и конце изучаемого отрезка времени.
- Средний возраст незавершенной работы не увеличивается и не уменьшается.
- Время цикла, объем незавершенной работы и пропускная способность должны измеряться сопоставляемыми единицами. Например, нельзя использовать дни для измеренция времени цикла и недели для пропускной способности.
Потратьте минуту и подумайте о вашем процессе. Следите ли вы за работой, поступающей и выходящей из системы, или работа заходит в систему быстрее, чем ее могут выполнить? Чтобы определить это, можно использовать метрику стабильности, представленную в этой книге (речь про CFD, накопительную диаграмму потока — прим. пер.). Наблюдаете ли вы за возрастом рабочих элементов, или работа может пролежать произвольный срок просто ожидая выполнения? Если вы не следите за этими вещами, то вы нарушете принципы закона Литтла. Каждый раз, когда вы действуете наперекор фундаментальным допущениям, процесс становится менее стабильным. Чем более нестабилен процесс, тем сложнее вам будет создать точный прогноз. В моей книге “Actionable Agile Metrics for Predictability”, я в основном рассуждаю о создании стабильных процессов, базируясь на законе Литтла, чтобы получить возможность делать точные прогнозы.
Клаус: Почему нельзя просто использовать формулу закона Литтла, чтобы делать прогнозы?
Дэн: На то есть две причины. Первая — вы не можете прогнозировать с помощью закона Литтла, потому что так говорит сам доктор Литтл: “Тем не менее, следует отметить, что детерминизм и точность возникают только по факту свершения события. Это не плохо. Это лишь указывает, что мы находимся в индустрии измерений, а не прогнозирования.” Любой, кто использует закон Литтла для прогнозирования, идёт по ложному следу. Закон был специально разработан чтобы использовать уже собранные данные чтобы изучить прошлое, а не прогнозировать будущее, где может быть много разных исходов.
Даже если бы вы и могли использовать закон Литтла для прогнозирования, вы бы навряд ли захотели это делать. Он основан на отношении средних величин. Есть отличная книга, которая подробно рассматривает эту проблему: “The Flaw of Averages” (Savage, 2012) (“Изъян средних значений” — прим. пер.). Коварное свойство средних значений заключается в том, что планы на них построенные, в среднем не очень успешны. Даже если бы вы и могли просто поставить две цифры в формулу и получить третью в качестве прогноза, не забывайте, что третье значение тоже среднее. Средние значения ценности для прогноза не несут.
Клаус: В вашей книге описан “потоковый долг”. Можете пояснить, что это значит?
Дэн: Потоковый долг создается, когда вы занимаете время цикла от одного рабочего элемента, чтобы передать его другому рабочему элементу того же процесса. В краткосрочной перспективе, процесс выглядит лучше, потому что некоторые работы можно протолкнуть быстрее. В долгосрочной перспективе, такая стратегия лишь делает процесс менее предсказуемым. Срочные работы — идеальный пример: как только в команду поступает срочная задача, обычно люди прекращают всю остальную работу. Безусловно, у такого формата есть преимущество — срочная работа быстрее проходит через систему и время цикла такой работы выглядит очень хорошо. Однако, у хорошего времени цикла есть своя цена: вся остальная работа, остановленная на время прохождения срочной задачи, получает увеличенное время цикла. В какой-то момент этот долг нужно выплатить, что выльется в ухудшение времени цикла для отложенной работы, когда ее наконец завершат. Ситуацию улучшения времени цикла одних элементов за счет ухудшения времени цикла других элементов я и называю “потоковым долгом”. Каждый раз, когда вы даете приоритет определенным рабочим элементам в уже запущенном процессе, создается потоковый долг. Цена, которую вы платите за это — увеличение непредсказуемости системы.
Оригинальная статья опубликована Клаусом Леопольдом 6 августа 2017
Перевод: Максим Фролов
Редактура: Артур Нек