очередь | Владимир Бычко об управлении проектами

Владимир Бычко об управлении проектами

пиэм разъясняет, предостерегает, рекомендует

Тег: очередь

Что менеджеру проектов надо знать о Kanban

Пример Kanban-доски
Изображение с unsplash.com, автор Jo Szczepanska

История и суть явления

Метод появился в компании «Toyota» в 1959 году. К айти имеет косвенное отношение, почитать про него можете в Википедии.

Канбан, как инструмент в IT-менеджменте был представлен Дэвидом Дж. Андерсоном в компаниях Microsoft (2005) и Corbis. А широкое распространение и название, как метод, получил в 2007 году.

В отличие от Скрама, Канбан не слишком строг. Скрам не может применяться частично, если вы используете не все практики, это уже не Скрам. В случае с Канбаном, нет правильного и неправильного Канбана, вы можете использовать те практики, которые вам лучше подходят.

Канбан может применяться не только в айти, но и везде, где есть регулярное производство с повторяемыми этапами, через которые должна проходить каждая задача.

Канбан-доска

Главный принцип Канбана — визуализация при помощи канбан-доски. Рассмотрим её подробно.

Левая колонка — очередь. По-хорошему, надо раз в пару недель проводить встречу по наполнению её задачами, но на практике обычно заинтересованные лица закидывают туда задачи по мере поступления. Можно установить ограничение на максимальный размер очереди.

Правее очереди следует расположить колонки допроизводственных этапов, на которых происходит сбор требований, оценка и утверждение задачи. Дальше идёт черта — точка принятия обязательств. Если задача пересекает эту черту, это означает, что она передана в производство и совершенно точно должна быть сделана и влита в продукт.

Перед последней колонкой вторая черта — точка отдачи обязательств, переход задачи через неё означает, что команда ручается, что с задачей всё в порядке.

Пример канбан-доски с scrumtrek.ru

Количество карточек в каждой колонке, кроме первой (это на ваше усмотрение) и последней, должно быть ограничено реальной максимальной пропускной способностью команды, она определяется экспериментально.

Канбан-доска — не только инструмент визуализации процесса, но и рефлексии. Внимательно рассмотрев доску, можно выявить производственные этапы, которые на самом деле не нужны, и наоборот недостающие этапы. По размеру очереди задач и накалу страстей на битве заказчиков за места в этой очереди, можно определить, насколько «жив» продукт.

Также при помощи этой доски вы можете выявить узкие места, «бутылочные горлышки», в которых скапливаются задачи и замедляют цикл производства.

WIP-лимиты

WIP (work in progress) — это количество элементов, находящихся в работе в настоящий момент. Его не надо путать с WIP-лимитом, ограничением на количество элементов в работе на настоящий момент времени, введённым для достижения некой цели.

Единой формулы для расчёта этого лимита не существует, он подбирается экспериментально. Одно можно сказать определённо — этот лимит вовсе не должен быть маленьким.

Использование WIP-лимита повышает определённость в работе. Потому что чем больше элементов в разных состояниях, тем тяжелее ими управлять и контролировать.

Для того, чтобы посмотреть максимальный WIP-лимит по команде, потребуется отчёт CFD (cumulative flow diagram) или накопительная диаграмма потока. 

Пример накопительной диаграммы потока с darvindigital.ru

Каденции

Каденциями называются регулярные встречи при помощи которых вы можете поддерживать и улучшать канбан-процесс в команде.

Канбан-митинг

Пятнадцатиминутная ежедневная встреча. Команда собирается и обсуждает:

  • Что нам мешает?
  • Как осуществляется поток работы?
  • Что мы можем улучшить?

Очень важно обсудить все заторы и затруднения в работе над задачами. Возможно, кому-то из участников нужно оказать помощь.

Встреча по пополнению

Получасовая встреча, проводится раз в неделю. Обсуждаем с заинтересованными лицами, какие новые задачи имеет смысл взять в работу и как переприоритизировать существующие, у них могла поменяться актуальность. Если получаса не хватает, можно общаться и дольше.

Обзор сервиса поставки

Получасовая встреча, раз в две недели. В этой встрече должны участвовать ключевые заказчики, менеджер и представители команды разработки. Обсуждаем удовлетворённость заказчика, показываем метрики, думаем, как же нам улучшить работу команды.

Встреча по планированию поставки

Эта встреча нужна, если у вас есть выделенные релизы. В современных айти-проектах всё чаще используется непрерывная интеграция, когда фичи вливаются в продукт по мере готовности, но всё становится сложно, если у вас есть несколько соседних продуктов и нужно обеспечить синхронность релизов.

Если это так, имеет смысл перед поставкой провести планирование списка фич, которые должны войти в поставку и обсудить, что для этого нужно сделать. Обязательно нужно спланировать мероприятия по обучению пользователей работе с вливаемой функциональностью.

Обзор рисков

Часовая ежемесячная встреча. Имеет смысл собраться со всей командой и обсудить, какие риски появились на горизонте, какие могут сработать, а какие уже сработали и влияют на поставку.

Обзор операций

Это кросспродуктовая встреча, на которой обсуждается межкомандное взаимодействие. Собраться с менеджерами соседних продуктов и обсудить, что мешает делать кросспродуктовые доработки. Раз в месяц достаточно.

Обзор стратегии

Самая редкая встреча, её достаточно проводить раз в квартал. Собираемся с руководством компании, обсуждаем рынок, среду, глобальные вопросы. Ставим цели для команды на квартал. Выявляем стратегические проблемы, корректируем тактику команды.

Метрики в Канбане

Важнейшая метрика в Канбане называется Lead Time — время прохождения задачи от точки принятия обязательств до точки отдачи обязательств. Чем быстрее задача проходит от одной точки до другой, тем команда эффективнее. Кроме того, есть ещё такие метрики:

  • Cycle Time – время, которое задача находилась в разработке от момента, когда ей начали заниматься, до момента, когда она прошла фазу конечной поставки.
  • WIP – количество задач одновременно находящихся в работе. Разделяется по разным стадиям работы над задачей.
  • Wasted Time – время, которое задача проводит в различных очередях, а не непосредственно в работе.
  • Effectiveness – процент времени, которое тратится непосредственно на работу с задачей, а не на ожидания в различных очередях.
  • Throughput – количество задач, которое может выполнять команда в единицу времени (день, неделя, месяц).

Делаем правила явными

Нужно проговорить с командой и зафиксировать в виде документа все канбан-правила, которые будут применяться в вашей команде. Особенно важно описать критерии, по которым карточка перемещается из одной колонки в другую и при каких условиях она может быть перенесена обратно.

Хорошо и правильно проговорить с заказчиками правила приоритизации задач. Надо также надо обсудить протоколы, по которым будет проводиться работа со более и менее срочными задачами. Когда людям понятны правила, они готовы и хотят играть работать самостоятельно.

Кейс внедрения канбана в реальной практике

Когда я только начинал практику руководителя разработки, столкнулся с проблемой. Есть внутренний заказчик в виде группы внедрения, есть исполнитель в виде SQL-отдела. От заказчика к исполнителю постоянно поступает поток запросов на SQL-доработки — всевозможные отчёты, скрипты, кастомные импорты. И существует постоянно высказываемая претензия — совершенно невозможно понять, когда та или иная доработка будет сдана.

Оказалось, что отдел использует TFS (сейчас Azure DevOps Server), однако совершенно бессистемно. Кто-нибудь из руководства заводит запрос на доработку, вешает его на рандомного разраба и заказчики ждут у моря погоды. Если какой-то запрос нужен срочно, ответственный внедренец прибегает к руководству департамента и начинает орать. CIO транслирует ор в программиста, он в приоритетном порядке запиливает доработку. Тестировать её некогда, поэтому она сразу накатывается на базу заказчика. Если возникают проблемы, они никак не регистрируются, внедренец просто приходит в отдел SQL, подсаживается к программисту и просит поправить.

Частично этот кейс был рассмотрен в статье «Единая точка входа», но там больше про унификацию входящих обращений, в этой же статье мы поговорим про визуализацию и контроль при помощи канбана.

В первую очередь было принято решение визуализировать очередь. Хотелось использовать веб-приложение, потому что внедренцы крайне не любят ставить сторонние приложения (лол) и вообще, большую часть времени проводят в аутлуке. Выбор пал на trello. Первоочередной задачей стало завести на трелло-доске все открытые запросы на доработку из TFS. Trello тогда умел создавать карточки на основании писем, отправленных на специальную почту, а TFS умел экспортировать воркайтемы в эксель. Мой разраб минут за сорок накидал VBA-скрипт, импортировали запросы.

А вот дальше мы пошли вразрез с классическим канбаном. Вместо столбцов, отражающих этапы работы, мы завели по столбцу на каждого разраба и добавили в эти столбцы карточки запросов, над которыми они работали в данный момент.

Ситуация улучшилась, вместо: «Я не знаю, когда мы сделаем эту задачу», появилась возможность говорить: «Перед этой задачей в очереди ещё шесть задач, сможем взять её в работу после них». Удалось достигнуть договорённости — мы объявляем срок по задаче только после того, как она поступает в работу разрабу, но за этот срок уже отвечаем по полной программе.

Мы стали встречаться со старшим внедренцем два раза в неделю и обсуждать сроки по задачам, взятым в работу, а также положение разных задач в очереди. Так как 80 % задач были от одного и того же заказчика, мы разрешили внедренцу менять очерёдность задач этого заказчика. Если было нужно подвинуть задачи другого заказчика, внедренцы договаривались между собой.

Порядка стало больше, но возникла проблема с приёмкой задач. Так как внедренцы не торопились принимать задачи, их карточки намертво повисали в колонках разрабов, стали копиться внушительные хвосты. Так как решить проблему на организационном уровне не удалось, мы сменили инструмент.

kanbanize.com, в отличие от trello на тот момент поддерживал свимлайны. То есть, можно было завести для каждого разраба дорожку, а колонками сделать уже актуальные статусы, что сильно ближе к нормальному канбану. Кроме того, этот сервис позволял добавить кастомные поля к каждой карточке, что было для нас очень важно, так как кроме TFS-идентифкатора, каждый запрос имел CRM-идентификатор, которыми оперировали внедренцы.

В целом, сочетание организационных мер с правильно подобранным инструментом и методологией, позволили преодолеть кризис и сделать разработку предсказуемой. Негатив от внедренцев закончился.

Автор изображения Steven Reddy

Приоритеты или ресурсы?

Вводная:

Есть приоритизированная очередь запросов на доработку двух продуктов. Приоритизацией занимается высшее руководство компании, исходя из собственного понимания важности доработок для клиентов.

Для того, чтобы запрос пошёл в работу к разработчикам, он должен пройти через аналитиков (сначала нужно дать заказчику первичную оценку стоимости, если он согласится, формализовать требования и отдать в работу).

Аналитики работают на два продукта, их ресурсов недостаточно.

Вопрос:

Как определить, какой запрос нужно взять в работу? Кажется, что решение лежит на поверхности — запрос с высшим приоритетом. Однако есть один подводный камень — высшее руководство назначает приоритеты, исходя из нужд клиента и совершенно не думает о наличии/отсутствии у разработки ресурсов, чтобы тот или иной запрос выполнить.

Первый вариант решения:

В работу пошёл запрос с высшим приоритетом, затрагивающий продукт № 1. Аналитик потратил некоторое время, получил и согласовал оценку, написал требования, пришёл к менеджеру продукта № 1 и получил неожиданный ответ — у них нет ресурсов, чтобы эту доработку реализовать. У всех разработчиков есть задачи на ближайшую итерацию. В лучшем случае, возьмут в следующую.

Результат: Месячный лаг, негатив от всех клиентов, не заработали ничего.

Второй вариант решения:

Смотрим на очередь, видим запрос на продукт № 1. Проверяем наличие ресурсов в команде продукта № 1 и осознаём, что их нет. В то же время, в продукте № 2 свободные разработчики имеются, мало того, ощущается недостаток задач. Берём запрос на продукт № 2, проводим через аналитиков, сразу же отдаём в работу, получаем деньги.

Результат: Заказчик высокоприоритетного запроса недоволен, высшее руководство тоже — запрос с высшим приоритетом не пошёл в работу. Сделали запрос с более низким приоритетом, заработали деньги.

Вывод:

В ситуации, когда приоритетами управляет высшее руководство, а аналитики работают на все продукты сразу, правильный алгоритм определения запроса для взятия в работу таков:

  1. Выяснить наличие ресурсов во всех продуктах.
  2. Взять в работу самый приоритетный запрос на этот продукт.

Единая точка входа

На рисунке изображён бардак, типичный для организаций, недавно выросших до среднего размера. Есть внутренние представители заказчиков, есть менеджер разработки, есть разработчики:

Бардак

Некоторые внутренние представители заказчиков (далее «внедренцы») общаются с разработчиками через менеджера, некоторые делают это напрямую. Зачастую не по злому умыслу — нужно лишь чуть-чуть (по их мнению) подпилить одну-две процедуры, проще договориться напрямую, чем идти по стандартной процедуре.

Результат:

  1. Менеджер не владеет точной информацией о текущей загрузке разработчиков и не может нормально планировать.
  2. Разработчиков часто дёргают, не дают уйти в поток.
  3. Внедренцы конфликтуют из-за разработчиков.
  4. В первую очередь делают запросы тех, кто «громче кричит», а не те, которые стратегически более важны.
  5. Сроки срываются, очередь копится, организация теряет деньги, клиенты нервничают.

 
 
Приведённый ниже подход снижает скорость, но повышает предсказуемость разработки:

Корректная организация работ

Между внедренцами и менеджером появляется очередь. Внедренцы добавляют свои запросы в очередь. Менеджер берёт запросы в работу в порядке очереди. В исключительном случае внедренцы обращаются к менеджеру для решения срочных вопросов. Напрямую к разработчикам никто не лезет. За очередью наблюдает директор по развитию или генеральный директор компании.

Подробнее о работе с очередями можно прочитать в посте «Об очередях».

Изображение с displate.com

Организация очередей

Это очередь. Здесь ожидают.

Заказчиков много, исполнителей мало. Каждый заказчик хочет, чтобы его заказ был исполнен как можно быстрее, исполнителям всё равно, какой заказ выполнять.

Люди готовы стоять в очереди, если соблюдается несколько условий:

  1. Конец очереди виден.
  2. Продвижение в очереди заметно.
  3. Никто не лезет без очереди.

В разработке добиться корректной работы очереди возможно.

Начнём с визуализации очереди. Простейшее решение — trello, но есть множество значительно более функциональных сервисов.

Заказчик видит очередь → понимает, почему его доработку нельзя выполнить прямо сейчас и морально готовится ожидать.

После визуализации необходимо сформулировать несколько правил и неукоснительно следить за их исполнением.

Все новые запросы на доработку добавляются в конец бэклога.

Позволяет обойтись без приоритизации. Большие, средние, маленькие, срочные, несрочные — всё в конец. Тем не менее, исключение возможно.

Если заказчик желает исполнения своего заказа раньше остальных, он должен лично договориться с каждым заказчиком, занимающим более высокое положение в очереди.

Прошу обратить внимание — заказчик не должен просить его «продвинуть» человека, контролирующего очередь. Он должен договариваться с другими заказчиками.

Ограничение на количество запросов, единовременно находящихся в работе у каждого исполнителя.

Исполнителю морально тяжело, когда на нём «висит» множество запросов. Кроме того, возникают потери на переключение между задачами («транспортные расходы»). Рационально ограничить количество задач в единовременном производстве одной-двумя и выдавать новые задания только после окончания работ по старым. Из этого правила вытекает следующее:

Ограничение на время приёмки запроса. Заказчик должен в ограниченный срок либо признать запрос исполненным, либо обозначить претензии. Держать запрос «висящим на сдаче» месяцами, недопустимо.

Причина проста — любой выполненный, но не принятый заказчиком запрос может быть неожиданно реактивирован, что снижает предсказуемость разработки. В случае автоматического закрытия ситуация упрощается — вместо реактивации нужно будет завести новый запрос по общим правилам.

Возможна «платная» очередь.

Если входящий поток неконтролируемо растёт, это означает нехватку исполнителей. Временное решение — выделить лучшего исполнителя и назначить за его услуги двойную или тройную ставку. Заказчикам, действительно нуждающимся в реализации их запроса, будет нетрудно найти дополнительные деньги за скорость.