сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Agile и Scrum

Kanban и поток

Kanban и поток

На доске 20 задач в работе, команда завершает 4 в неделю. Значит новая задача, попавшая в конец, выйдет через пять недель - независимо от того, насколько она простая. Уберите половину задач с доски, оставьте 8, и та же команда с тем же темпом отдаст результат через две недели. Никто не стал работать быстрее.

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

// Формулировки: «зачем WIP-лимит?», «что такое lead time?», «как дать прогноз без спринтов?»

Закон Литтла: срок считается делением

Формула из трёх букв, которая объясняет доску лучше любых слов: среднее время прохождения равно числу задач в работе, делённому на темп завершения. 20 задач при темпе 4 в неделю - пять недель. 8 задач при том же темпе - две недели.

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

// Проверить это на своей команде можно за десять минут: посчитай задачи в работе и посмотри в трекере, сколько закрывалось за неделю в среднем. Деление обычно совпадает с фактическим сроком с точностью до дня-двух и очень отрезвляет.

закон Литтла
среднее время прохождения = число задач в работе / темп завершения; работает для любой устойчивой очереди

WIP-лимит: заканчивать важнее, чем начинать

WIP-лимит (work in progress) - максимум элементов, одновременно находящихся на стадии. Число пишут прямо в заголовке колонки, и взять новую задачу при исчерпанном лимите нельзя: сначала помоги закрыть то, что уже начато.

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

// Отсюда контринтуитивный вывод: простой одного человека дешевле, чем десять зависших задач. Каждая из них уже съела время и внимание, а ценность даст только в момент завершения. Поэтому на исчерпанном лимите правильное действие - идти помогать, а не начинать новое.

Два срока: заказчика и команды

Lead time считают с точки зрения заказчика: от момента, когда он попросил, до момента, когда получил. Всё ожидание в очередях сюда входит. Cycle time - от старта работы до её завершения, только сама работа.

Самое полезное число - разрыв между ними. Заявка прошла за 14 дней, а в работе была полтора - значит 12,5 дня она просто лежала, и все разговоры об ускорении программистов бессмысленны. Чинить надо очередь, приоритизацию и размер партии, а не скорость набора кода.

// Скопление задач перед одной стадией означает узкое место: она пропускает меньше, чем в неё поступает. Причина бывает в людях, в качестве входящих задач или в нестабильном стенде - сначала выясняют какая, потом лечат.

lead time
срок от запроса заказчика до поставки, включая всё ожидание
cycle time
время от начала работы над задачей до её завершения

Прогноз без спринтов

Спринтов нет, а сроки спрашивают. Ответ строят на своей же истории: берут последние сто задач, смотрят распределение времени прохождения и отвечают перцентилем. «85 процентов похожих задач проходили за 9 дней или быстрее» - это содержательный ответ, потому что несёт и оценку, и разброс.

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

// Отдельная дисциплина - не брать новую задачу при блокировке текущей. Иначе блокировки перестают быть видимой болью: они копятся тихо, срок растёт, а причины никто не устраняет, потому что все заняты.

Как отвечать: «Задачи копятся в колонке Тестирование. Что делаешь?»

Это узкое место: стадия пропускает меньше, чем в неё поступает, и весь поток идёт с её скоростью. Сначала выясняю причину, а не добавляю людей вслепую - не хватает рук, приходят непроверяемые задачи без критериев приёмки, нестабильный стенд, и лечение в каждом случае разное. Если причина в качестве входа, работать надо раньше по потоку, а не на самой стадии. Дальше поставил бы лимит на предыдущую колонку, чтобы очередь перестала расти: по закону Литтла срок равен числу задач в работе, делённому на темп завершения, и пока задачи копятся, срок растёт линейно, а темп не меняется. И заранее закладываю, что после расшивки ограничение переедет на следующую по слабости стадию - это не провал, а нормальный ход работы с потоком. Останавливаемся, когда время прохождения устраивает бизнес.

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

На чём валятся

  • − Берут новые задачи при блокировке текущих, и лимит перестаёт работать.
  • − Пытаются ускориться, начиная больше работы одновременно.
  • − Гонятся за полной загрузкой людей вместо сокращения времени прохождения.
  • − Обвиняют исполнителей узкой стадии вместо разбора причины ограничения.
  • − Дают точечную оценку срока вместо перцентиля по своей истории.
  • − Смешивают в статистике инциденты и плановые доработки.

Проверьте себя

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

  1. #ana_met_kanban1 / 5
    Что показывает время прохождения (lead time)?
    A)Чистое время работы над задачей
    B)Срок от появления запроса до поставки
    C)Время ожидания в очереди на разработку
    D)Длительность одной итерации команды
    показать ответ и разбор
    +B)Срок от появления запроса до поставки

    // разбор: Lead time измеряется с точки зрения заказчика: сколько прошло от момента, когда он попросил, до момента, когда получил. Оно включает всё ожидание в очередях. Отдельно считают cycle time — время от старта работы до её завершения. Разрыв между ними и показывает, сколько задача просто ждала.

  2. #ana_met_kanban2 / 5
    На доске скопились задачи в колонке «Тестирование». О чём это говорит?
    A)На этой стадии узкое место потока
    B)Задачи неверно оценены по объёму
    C)Разработка выпускает слишком мало задач
    D)Тестировщики работают медленно
    показать ответ и разбор
    +A)На этой стадии узкое место потока

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

  3. #ana_met_kanban3 / 5
    Зачем ограничивать работу в процессе, если люди при этом иногда простаивают?
    A)Чтобы упростить учёт рабочего времени
    B)Чтобы сократить срок доведения до конца
    C)Чтобы уменьшить число людей в команде
    D)Чтобы упростить расчёт стоимости задач
    показать ответ и разбор
    +B)Чтобы сократить срок доведения до конца

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

  4. #ana_met_kanban4 / 5
    Какой процесс лучше ложится на Kanban, чем на Scrum?
    A)Разработка новой версии продукта к дате
    B)Исследование продуктовой гипотезы
    C)Поддержка и поток входящих обращений
    D)Миграция данных из старой системы
    показать ответ и разбор
    +C)Поддержка и поток входящих обращений

    // разбор: Поддержка живёт непредсказуемым входящим потоком: планировать её на две недели вперёд бессмысленно, потому что приоритеты меняются в течение дня. Kanban с лимитами и метрикой времени прохождения тут естественен. Проекты с фиксированной целью и датой, наоборот, удобнее укладываются в итерации.

  5. #ana_met_kanban5 / 5
    Команда ввела лимиты, но люди всё равно берут новые задачи при блокировке текущих. Что это ломает?
    A)Точность оценки трудоёмкости
    B)Стимул устранять причину блокировки
    C)Возможность вести доску в электронном виде
    D)Право владельца продукта менять приоритет
    показать ответ и разбор
    +B)Стимул устранять причину блокировки

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

дальше

Теорию прочитали. Навык ставится повторением

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