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, остальные разбираются в тренажёре.
- Что показывает время прохождения (lead time)?A)Чистое время работы над задачейB)Срок от появления запроса до поставкиC)Время ожидания в очереди на разработкуD)Длительность одной итерации команды
показать ответ и разбор
+B)Срок от появления запроса до поставки// разбор: Lead time измеряется с точки зрения заказчика: сколько прошло от момента, когда он попросил, до момента, когда получил. Оно включает всё ожидание в очередях. Отдельно считают cycle time — время от старта работы до её завершения. Разрыв между ними и показывает, сколько задача просто ждала.
- На доске скопились задачи в колонке «Тестирование». О чём это говорит?A)На этой стадии узкое место потокаB)Задачи неверно оценены по объёмуC)Разработка выпускает слишком мало задачD)Тестировщики работают медленно
показать ответ и разбор
+A)На этой стадии узкое место потока// разбор: Скопление перед стадией означает, что она пропускает меньше, чем поступает. Причины бывают разные: не хватает людей, задачи приходят непроверяемыми, окружение нестабильно. Обвинять исполнителей бессмысленно — сначала выясняют причину ограничения, затем разгружают его, а не наращивают вход.
- Зачем ограничивать работу в процессе, если люди при этом иногда простаивают?A)Чтобы упростить учёт рабочего времениB)Чтобы сократить срок доведения до концаC)Чтобы уменьшить число людей в командеD)Чтобы упростить расчёт стоимости задач
показать ответ и разбор
+B)Чтобы сократить срок доведения до конца// разбор: Загрузка людей и скорость потока — разные вещи. При стопроцентной загрузке очереди растут, задачи ждут, а срок поставки увеличивается. Небольшой резерв позволяет быстро подхватывать застрявшее и разгружать узкое место. Простой отдельного человека дешевле, чем простой десятка незавершённых задач.
- Какой процесс лучше ложится на Kanban, чем на Scrum?A)Разработка новой версии продукта к датеB)Исследование продуктовой гипотезыC)Поддержка и поток входящих обращенийD)Миграция данных из старой системы
показать ответ и разбор
+C)Поддержка и поток входящих обращений// разбор: Поддержка живёт непредсказуемым входящим потоком: планировать её на две недели вперёд бессмысленно, потому что приоритеты меняются в течение дня. Kanban с лимитами и метрикой времени прохождения тут естественен. Проекты с фиксированной целью и датой, наоборот, удобнее укладываются в итерации.
- Команда ввела лимиты, но люди всё равно берут новые задачи при блокировке текущих. Что это ломает?A)Точность оценки трудоёмкостиB)Стимул устранять причину блокировкиC)Возможность вести доску в электронном видеD)Право владельца продукта менять приоритет
показать ответ и разбор
+B)Стимул устранять причину блокировки// разбор: Смысл лимита в том, что при упоре в потолок команда обязана разобраться с застрявшим, а не обходить проблему. Если правило нарушается, блокировки перестают быть видимой болью: они копятся тихо, время прохождения растёт, а причины никто не устраняет, потому что работа формально идёт.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.