<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом очереди</title>
<link>https://www.blogengine.ru/blogs/tags/ocheredi/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>The Principles of Product Development Flow, пост 4 — что такое «очереди»</title>
<guid isPermaLink="false">127937</guid>
<link>https://artemushanov.ru/?go=all/chto-takoe-ocheredi/</link>
<pubDate>Tue, 14 May 2024 18:22:21 +0500</pubDate>
<author>Артем Ушанов</author>
<comments>https://artemushanov.ru/?go=all/chto-takoe-ocheredi/</comments>
<description>
&lt;p&gt;&lt;a href="https://artemushanov.ru/"&gt;Артем Ушанов&lt;/a&gt;:&lt;/p&gt;
&lt;p class="foot"&gt;🔬 Это пост с разбором очередной части книги Дона Рейнертсена &lt;i&gt;The Principles of Product Development Flow&lt;/i&gt;. Книга рассказывает, как правильно принимать решения при разработке продуктов и не помереть раньше времени. Все посты — по тегу &lt;a href="https://artemushanov.ru/?go=tags/pd-flow/"&gt;pdflow&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://artemushanov.ru/pictures/reynertsen-post-3.png" width="338" height="500" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В предыдущей части про &lt;a href="https://artemushanov.ru/?go=all/reynertsen-post-3/"&gt;экономический фреймворк&lt;/a&gt; стало понятно, что время цикла — важная метрика с точки зрения экономики разработки продукта.&lt;/p&gt;
&lt;p class="loud"&gt;Дешевые способы уменьшить время цикла разработки увеличивают прибыль на жизненном цикле продукта.&lt;/p&gt;
&lt;p&gt;Один из таких способов — устранение периодов неактивности, когда над РП никто не работает и он висит в ожидании. Такие периоды называются очередями, и сегодня мы разберемся, что они такое.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://artemushanov.ru/pictures/chto-takoe-ocheredi-1.png" width=75% height=75%&gt;&lt;/p&gt;
&lt;p class="foot"&gt;© Страдающее Средневековье&lt;/p&gt;
&lt;h3&gt;Зачем рассматривать очереди&lt;/h3&gt;
&lt;p&gt;Рейнертсен считает, что очереди — одна из главных причин задержек в продуктовой разработке, а работать с ними мало кто умеет.&lt;/p&gt;
&lt;p&gt;Вот перечень проблем, которые вызывают очереди:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Увеличение цикла разработки: чем длиннее очередь — тем дольше рабочий продукт будет ждать, пока за него возьмутся. Если мы знаем про очереди, мы можем придумать, как спрогнозировать и посчитать потери от ожидания.&lt;/li&gt;
&lt;li&gt;Рост рисков: этапы обработки рабочих продуктов разделены длительным временем ожидания, поэтому растут риски. Чем дольше мы ждем — тем выше вероятность, что могут произойти нежелательные изменения на рынке, у конкурентов или в используемых технологиях.&lt;/li&gt;
&lt;li&gt;Увеличение вариабельности: когда мы сильно нагружаем наши мощности по разработке, сильно растет вариабельность. Подробнее — в следующих постах.&lt;/li&gt;
&lt;li&gt;Увеличение накладных расходов: чем больше РП сидит в очередях — тем длиннее очереди, больше встреч и отчетов.&lt;/li&gt;
&lt;li&gt;Снижение качества: из-за очередей мы получаем фидбек о сделанной работе позже. Если программист начал писать код исходя из неверных предпосылок и получил фидбек на следующий день — можно быстро откатиться и исправить. Если фидбек придет только через неделю, то придется выкинуть результаты работы за неделю.&lt;/li&gt;
&lt;li&gt;Снижение мотивации: нет необходимости торопиться и пилить дизайны для приложения за день или два, если продакт сможет посмотреть их только через неделю.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Просто понимание того, что очереди — есть, и их можно обнаружить, уже дает возможность находить и устранять очевидные заторы в работе какими-то интуитивно понятными методами.&lt;/p&gt;
&lt;p&gt;Коротко я вопроса очередей касался в &lt;a href="https://artemushanov.ru/?go=all/reynertsen-post-1/#queuesblindness"&gt;первом&lt;/a&gt; посте про книгу. Там была такая иллюстрация:&lt;/p&gt;
&lt;div style="border-radius: 25px; border:1px solid #DCDCDC;padding:20px;margin:20px;"&gt;&lt;p class="foot"&gt;🟢 — работа над РП&lt;/p&gt;
&lt;p class="foot"&gt;🔴 — ожидание в очереди&lt;/p&gt;
&lt;p&gt;Ситуация у нас такая:&lt;br /&gt;
🟢🟢🔴🔴🔴🔴🔴🔴🟢🟢🔴🔴🔴🔴🔴🔴🔴🟢🟢&lt;/p&gt;
&lt;p&gt;То есть над РП работают два дня, потом он шесть дней ждет, потом еще два дня в работе, еще семь дней ждет, и наконец финальные два дня в работе перед выпуском. Итого цикл 19 дней, чистое время работы над РП 6 дней.&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Для ускорения разработки нужно уменьшить время цикла, т. е. завершить работы над рабочим продуктом быстрее, чем за 19 дней. Как это сделать? Ответ: сокращать «красные» этапы ожидания, когда РП висит в очереди на обработку; сокращение «зеленых» этапов сложнее и даст меньший эффект.&lt;/p&gt;
&lt;p&gt;Чтобы сократить этапы ожидания, нужно их для начала обнаружить, а для этого нужна правильная «оптика» и понимание, куда смотреть. Подходящий инструментарий может предложить раздел тервера под названием «теория очередей».&lt;/p&gt;
&lt;h3&gt;Теория очередей&lt;/h3&gt;
&lt;p&gt;Теория появилась в начале 20 века как практический метод решить задачу Копенгагенской телефонной компании: требовалось понять, сколько телефонных линий требуется для обслуживания какого-то количества абонентов. Задача на тот момент была нетривиальной: звонки поступали в случайном порядке и спрогнозировать их было невозможно, как и длительность каждого конкретного разговора.&lt;/p&gt;
&lt;p&gt;Датский инженер по фамилии Эрланг разработал матмодели для формализации этих проблем, что помогло лучше прогнозировать трафик, оптимизировать количество операторов, снизить время ожидания на коммутацию — в общем, оптимизировать затраты, добившись при этом достаточного уровня сервиса.&lt;/p&gt;
&lt;h3&gt;Основные понятия&lt;/h3&gt;
&lt;p class="note"&gt;Термины и проч. по теории очередей — &lt;a href="https://staff.um.edu.mt/jskl1/simweb/intro.htm"&gt;https://staff.um.edu.mt/jskl1/simweb/intro.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Процесс прибытия&lt;/i&gt; (Arrival Process): паттерн, по которому в очередь попадают новые объекты. Он описывает, как объекты (например, телефонные звонки) поступают в систему. Может быть случайным или детерминированным.&lt;br /&gt;
&lt;i&gt;Механизм обслуживания&lt;/i&gt; (Service Mechanism): описывает, как обслуживаются объекты. Это может зависеть от таких факторов, как количество серверов (операторов), способ определения приоритетности задач и время, необходимое для обслуживания задачи (длительность звонка).&lt;br /&gt;
&lt;i&gt;Сервер&lt;/i&gt; (Server): ресурс, который осуществляет работу над объектами из очереди; в нашем случае — оператор, который коммутирует звонки&lt;br /&gt;
&lt;i&gt;Дисциплина очереди&lt;/i&gt; (Queue Discipline): означает порядок, в котором обслуживаются объекты. Распространены такие дисциплины, как «первым пришел — первым ушел» (FIFO), «последним пришел — первым ушел» (LIFO) и обслуживание на основе приоритетов.&lt;br /&gt;
&lt;i&gt;Емкость&lt;/i&gt; (Capacity): количество объектов (например, абонентов), которые система может обслуживать одновременно.&lt;br /&gt;
&lt;i&gt;Длина очереди&lt;/i&gt; (Queue Length): количество объектов, ожидающих в очереди.&lt;/p&gt;
&lt;p&gt;Два важнейших показателя для очередей — &lt;b&gt;заполняемость&lt;/b&gt; и &lt;b&gt;время цикла&lt;/b&gt;. Зная их, можно измерять:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;количество РП в очереди, количество РП в сервисе, общее количество в системе;&lt;/li&gt;
&lt;li&gt;время, проведенное РП в очереди, в сервисе, в системе в целом.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://artemushanov.ru/pictures/Mm1_queue.png" width="292" height="119" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Лямбда — это процесс прибытия, Мю — механизм обслуживания&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;На иллюстрации — тип очереди &lt;tt&gt;M/M/1/∞&lt;/tt&gt; в &lt;a href="https://en.wikipedia.org/wiki/Kendall%27s_notation"&gt;нотации Кендалла&lt;/a&gt;, именно с него Рейнертсен предлагает начать. В нотации элементы означают, в порядке очереди: «М» — тип процесса прибытия, «М» — тип механизма обслуживания, «1» — количество серверов, «∞» — максимальный размер очереди. «М» — значит «&lt;a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81"&gt;Марковский процесс&lt;/a&gt;», и он в нашем примере относится и к прибытию, и к сервису. Это означает, что в прибытии время между поступлениями распределено экспоненциально (меньший интервал между поступлениями более вероятен, чем больший), при этом следующий интервал прибытия не зависит от любых предыдущих. Для сервиса/обслуживания то же самое: длительность сервиса разная для каждого РП, на временном ряду длительности распределяются экспоненицально, длительность каждого следующего сервиса не зависит от предыдущих.&lt;br /&gt;
Если по простому описать этот тип очереди, получится примерно следующее: люди приходят на оформление визы независимо друг от друга и со случайными интервалами, встают в очередь в единственное окно, обслуживание каждого человека занимает примерно 15 минут, но иногда может и 30, а может и 5.&lt;/p&gt;
&lt;h3&gt;На практике&lt;/h3&gt;
&lt;p&gt;Если заземлять все вышеописанное на реалии продуктовой софтверной разработки, то элементами очереди могут быть любые промежуточные рабочие продукты: дизайн-макеты, требования, юзер-стори (или другие элементы бэклога), реализованные фичи, документация.&lt;/p&gt;
&lt;p&gt;Серверами могут быть: арт-директор, обозревающий дизайн-макеты; тимлид, анализирующий требования или юзер-стори; продакт, превращающий инсайты в спеки. Процесс прибытия у нас зависит от предыдущего звена: когда дизайнер нарисует макет, или инженер по требованиям разработает требования, или ПМ напишет юзер-стори.&lt;br /&gt;
Получается несколько последовательных очередей, выход из одной становится входом в другую — про это тоже будет в книге.&lt;/p&gt;
&lt;p&gt;Дисциплина очереди в разработке обычно задается приоритетом, а механизм обслуживания зависит от типа задачи и команды.&lt;/p&gt;
&lt;p&gt;Принципы начнем рассматривать в следующих постах.&lt;/p&gt;
</description>
</item>


</channel>
</rss>