В прошлой статье я рассказывал об одной технике, которая применяется при планировании итерации. Судя по комментариям, которые на мой взгляд отходят от темы, я понял, что в прошлой статье не раскрыл главный вопрос – зачем и когда применять эту технику 🙂
Действительно, любой здравомыслящий человек, прежде чем применять новый подход, должен задаваться вопросом: “Какую проблему я решаю?”.
Итак, какую проблему мы решаем с помощью буфера времени? Моя статья была навеяна проблемой планирования итерации, которую я обсуждал со своими клиентами. Вы наверное видели ниспадающие (burndown) графики в Cпринте, вроде этого:
или этого:
Они говорят о том, что команда планирует больше, чем реально может сделать. Это может происходить из-за того, что при планировании итерации считается максимальный запас рабочего времени в команде (capacity) и потом берутся на себя обязательства по максимуму. Как результат, что-то в Спринте идет не так, как хотелось бы, и в итоге команда делает не все из запланированного или прилагает к этому излишние усилия.
Чем это плохо? Прежде всего, команда не выполняет взятые на себя обязательства – это ведет к подрыву доверия к команде со стороны Владельца Продукта и заказчиков. Опять же, сама команда де-мотивируется из-за того, что не все сделано, и со временем может прийти к состоянию, когда все будут мыслить: “чего напрягаться, все равно все не сделаем”. А даже если и сделаем, то ценой дополнительных усилий и переработок. Ну и другие подобные негативные последствия – список можно еще продолжать и продолжать.
Выход из описанной ситуации с избыточным планированием многие команды находят эмпирически. Я уже неоднократно слышал, как Скрам Мастера говорят, что они вычитают из суммарной “мощности” (capacity) команды какой-то процент времени, как буфер времени, мол, “на риски”. В прошлой статье, я рассказал, для чего именно и как выбирать размер этого буфера. Уверен, эта техника поможет объяснить, зачем вы делаете буфер и лично Скрам Мастеру и команде и заинтересованным лицам.
Следует четко понимать, две вещи:
Первое, у такой комплексной проблемы есть много факторов и решать ее нужно с разных сторон. Т.е. не следует надеяться, что вы примените одну технику и все само собой решится. Действительно, есть риск “замаскировать” проблему, если бездумно применять техники. Я учу команды, с которыми работаю, копать до причин и устранять проблемы “на корню”.
Например, одновременно с применением этой техники, стоит работать над повышением точности оценок, тогда можно снизить первый тип буфера “времени на погрешность оценок”. Также стоит работать над повышением качества и устранением дефектов, которые находятся поздно, во время верификации, тогда можно снизить второй тип буфера “времени на баги”. Ну и технический долг лучше не накапливать, тогда и платить его почти не придется 🙂
Второе, на что стоит обратить внимание – это то, что никогда не стоит делать буфер на конкретную задачу или даже конкретный элемент Бэклога! Об этом я достаточно подробно рассказывал в своем докладе “Почему совместные оценки все-таки помогают Agile командам” – полистайте, там есть жизненные примеры ;-).
Когда вы делаете “запас” на отдельной задаче, то тут-то вас и настигает “закон Паркинсона” во всей его красе. В итоге, время тратится, а риски все равно “выстреливают” и сдвигают планы – погрешность накапливается и приводит к опозданию всей Истории или срыву планов всего Спринта. Как я говорил в докладе: “Ставить буфер в конце цикла, а не локально в каждую задачу/требование“.
В принципе, об этом же и говорила картинка, которую я вставил в прошлую статью:
И если вам понадобится кратко пересказать суть подхода коллегам, то я рекомендую запомнить следующее:
- Ставить буфер в конце цикла, а не локально в каждую задачу/требование
- Буфер делается отнимая часть “мощности” (capacity) команды и на него просто не планируются конкретные работы в Спринте
- Нужно постоянно работать над контролем использования и уменьшением размера буфера – тогда вы оптимизируете весь процесс
Надеюсь теперь стало понятнее.
Оставайтесь с нами, мы еще не раз вернемся к теме управления проектами.
Так мы потихоньку придем к еще одной “стародавней” традиции менеджеров: “Ну команда же еще неопытная и несмышленая. Откуда им знать как оценить задачи. А я уже таких проектов делал-переделал. Я лучше за них оценю и буфер оставлю, чтобы уж точно успеть…”. 😉
Коля, что же тебе за менеджеры попались, которые тебя так загнобили? 🙂
Мы же вроде говорим про Scrum команды. Пусть ScrumMaster в какой-то мере и представитель менеджмента, но он все-таки “свой” 😉 И ведет себя обычно более адекватно, чем ты описываешь
Меня как раз так загнобить у них не получалось. А в целом, обернись и посмотри по сторонам – в Украине так большая половина работает. 🙂 И ScrumMaster-ом часто становится бывший менеджер с таким же старым мышлением.
Коля, думаю, что не открою тебе секрет – проблема описанная тобой ВЕЗДЕ 🙂
Я работаю много вне Украины и проблема “хорошего ScrumMaster’а” стоит почти всегда.
Поэтому высоки шансы неправильного использования _любого_ инструмента 😉
На самом деле, все можно делать намного проще. Считайте не только оценку Product Backlog Item-а в “попугаях”, но и ту оценку в часах, которую команда ставит задаче тоже примите “попугаями”. И сразу все становится просто. На спринт, мы должны взять не более N “побугаев бэклога”, но при расшивровке в задачи, мы должны получить не более M “попугаев задач”.
Тогда, как только получили число часов, которые себе напланировали программисты, сравнили их с M, и сразу становится понятно, что около дела или будем халявить, или будем трудиться в поте лица и все равно не успеем.
Очень непонятно объяснил? Или терпимо?
Алексей, все точно подмечено.
Опытные команды приходят к неким “идеальным часам” – ваши “М-попугаи”.
А при планировании Спринта можно и нужно использовать свою среднюю скорость в N и M. Соответственно брать нужно столько, сколько сможете сделать 🙂