• решение, что делать в течение следующего спринта, и подготовка к нему;
• решение остановить работу.
В этом случае риск ограничен инвестициями в проведение одного спринта. Ценность достигается в конце каждого спринта, и формулируется новый спринт. Если вы собираетесь продолжить спринт для создания большего количества инкрементов программного обеспечения, проводится ретроспектива спринта.
Каждый участник Scrum-команды старается совершенствоваться спринт за спринтом. Ретроспектива спринта – мероприятие, где формулируются улучшения. Эта встреча ни в коем случае не должна длиться более четырех часов.
Ретроспектива спринта – естественный разрыв между спринтами, когда команда садится и обсуждает события предыдущего спринта, а также ищет пути улучшения своей работы и способов, которыми эта работа ведется.
Обсуждение может включать следующие вопросы:
• хорошо или плохо работают члены команды вместе и почему;
• больше или меньше работы, чем предполагалось, делает команда и почему;
• обладает ли команда всеми необходимыми навыками и обеспечением, требующимся для выполнения работы;
• понимают ли разработчики требования и почему;
• способна ли команда закончить спринт в соответствии с требованиями, и если нет, то почему;
• что можно добавить или выбросить из следующего инкремента функционала;
• что команда думает об использовании подхода Scrum.
Затем команда определяет несколько вещей, которые можно сделать по-другому в предстоящем спринте и которые могут повысить креативность, эффективность и продуктивность. В общем, Scrum-команда должна постоянно улучшаться. Это шанс для нее сделать свою работу и жизнь лучше.
Scrum-команда продолжает повторять шаги, описанные ранее, пока цели не будут достигнуты, возможности максимально использованы, возврат инвестиций достигнут или пока не столкнутся с непреодолимым препятствием (рис. 5.1).
Рис. 5.1. Scrum в действии
Scrum прост. Мы рассмотрели его и знаем его составные части. Мы знаем, как двигаться от планов к реализации. Теперь мы посмотрим, как заставить Scrum работать в вашей организации.
6. Scrum на уровне проекта
Использовать Scrum можно, когда это необходимо, например когда у вас есть безотлагательная возможность или очень важный проект. Эта глава поможет понять, как начать это делать немедленно, без суеты и затрат. Вы научитесь получать ценность каждые 30 дней.
Организационные воздействия не должны рассматриваться. В данном случае первостепенное значение имеют краткосрочные выгоды, а не долгосрочное улучшение организации. Преимущества будут получены быстро. Scrum-проект проводится в отрыве от традиционных методов и процессов, используется только то, что позволяет получить ценность для выполнения работы.
В течение предыдущих 20 лет многие Scrum-проекты проходили внизу организации, скрытые от взгляда. Команда, работающая над проектом, пробовала применить Scrum и создавала впечатляющие результаты. Затем другая команда пробовала его, и скоро команды внутри организации начинали разрабатывать программное обеспечение быстрее и чаще. Довольно скоро Scrum-проекты стали проявляться повсюду в организации. Мы называем такой Scrum PRN.
Как и в медицинском случае, PRN, когда применение лекарства оставлено на усмотрение медсестры или пациента сообразно возникающим обстоятельствам, Scrum-PRN необходим, когда возникает важная возможность или критическая трудность и программное обеспечение требуется быстро. Он может быть использован незамедлительно. Исключения в обычном подходе допускаются для разрешения кризиса или для того, чтобы не упустить возможность. Использование Scrum-PRN не требует разрешения. Разрешение для его применения – безотлагательная потребность в программном обеспечении.
Затраты на 30-дневный спринт могут варьироваться от 50 до 150 тысяч долларов в зависимости от размера Scrum-команды, заработной платы ее членов и других факторов. Каковы же преимущества метода?
Scrum-проект открывает всё: и то, на что мы надеялись, и то, что произошло вопреки нашим ожиданиям. Scrum готовит это блюдо так, что мы всегда знаем, что происходит, и можем принимать разумные решения относительно того, что делать дальше. Преимущество в данном случае – возможность контролировать, что произойдет в будущем, чтобы эффективно управлять инвестициями.
Одно из главных преимуществ Scrum – информация, которой он обеспечивает и которую можно использовать для максимизации ценности и контроля за риском.
В конце каждого спринта отслеживается, сколько задач было решено и какой функционал готов к использованию. Исходя из этого, прогресс может быть измерен и использован (очень осторожно) для прогнозов на будущее.
Работа может управляться с использованием трех переменных. Первое – это требования, функциональные возможности, которые составляют видение. Часть из них небольшие, часть средние и некоторые большие в плане требуемых усилий. Второе – это время, измеряемое в спринтах. Третье – законченная работа, которая измеряется в готовых к использованию фрагментах предоставляемых функциональных возможностей.
Когда требования трансформируются в инкременты функционала. проявляется тенденция. Например, в начале первого спринта команда разработки оценила размер требований в 140 единиц работы. Она представила 20 единиц работы в спринте № 1, 40 единиц – в спринте № 2 и 40 единиц – в спринте № 3. Это может быть прослежено при помощи диаграмм сгорания задач, измеряющих требования в единицах работы, которую еще предстоит сделать. Оставшаяся работа вычисляется в конце каждого спринта. Она равна единицам работы, прогнозируемой в начале спринта, за вычетом единиц законченной работы, которая была переведена в инкремент к концу спринта. Как выглядит диаграмма сгорания задач для примерного проекта, показано на рис. 6.1.
Рис. 6.1. Пример диаграммы сгорания задач
Это дает представление о прогрессе, достигнутом в направлении, когда вся работа будет закончена.
Чтобы прогнозировать будущее, можно использовать средние значения прошедших спринтов. В первых трех средняя единица законченных требований была 33,3 со стандартным отклонением 11,5. Прогнозная линия строится, как показано на рис. 6.2.
Рис. 6.2. Пример прогноза
Прогнозная линия на диаграмме сгорания задач показывает, что проект будет закончен к концу четвертого (следующего) спринта. Конечно, разработка программного обеспечения редко бывает настолько простой. Это сложный процесс, и в его ходе встречается больше неизвестного, чем известного. Прогнозирование разработки софта – дело рискованное, каждый день подверженное влиянию используемой технологии, способности людей, делающих разработку, состоянию рынка, причем новые требования могут появиться внезапно. Прогнозная линия теряет надежность, чем дальше она спроектирована в будущее.
Новые требования появляются, когда проект продвигается вперед. В ходе тестов выясняются новые потребности клиентов. Когда инкременты изучаются, появляются новые возможности. К примеру, со 140 единиц требований в начале первого спринта, если 20, 40 и еще 40 единиц новых требований возникнут и будут добавлены в бэклог продукта в начале каждого из трех спринтов, диаграмма выгорания задач будет плоской, давая неправильное впечатление, что никакой работы не сделано (рис. 6.3).
Рис. 6.3. Реальная и предполагаемая диграммы сгорания задач
Так получилось, потому что было найдено и добавлено в бэклог столько же новой работы, сколько команда разработки закончила.
Чтобы сохранить тренд снижения диаграммы сгорания, вычисляется новая конечная базовая линия: [(начальная базовая линия + дополнительные единицы работы над новыми требованиями) – (законченные единицы работы над требованиями) = новая конечная базовая линия]. Эта новая конечная базовая линия показана на рис. 6.4. Она помогает нам спрогнозировать, что проект, скорее всего, будет закончен гораздо позднее, чем ранее предположенный конец четвертого спринта.
Рис. 6.4. Конечная базовая линия отражает бэклог продукта
С помощью Scrum мы можем остановить финансирование дальнейших спринтов, как только оставшиеся требования будут признаны не очень ценными. В этой точке программное обеспечение выпускается, и мы начинаем получать обратную связь от пользователей. Дополнительный функционал, запрошенный пользователями, очень часто не совпадает с начальным видением, предполагаемым Scrum-командой. С этой обратной связью подготовка следующего релиза переформулируется, чтобы включить запрошенные пользователями требования и исключить те, которые остаются в списке, но не включены в первый релиз и не запрошены пользователями.
The Standish Group оценила, что 50 % всех функций программного обеспечения очень редко или никогда не используются пользователями[4]. К примеру, 80 % пользователей применяют только 14 % функционала массивного сайта hp.com[5].
Таким образом, чтобы оптимизировать ценность, владелец продукта должен решить, когда остановить спринты, чтобы остановить дальнейшую разработку и не заполнять продукт функционалом с низкой ценностью. При использовании только этой тактики проекты могут занять лишь 40 % времени от того, что обычно затрачивается. Эта продуктивность остается за вами, просто нужно обращать внимание на ценность того, что вы разрабатываете.
Мы знаем, что можем использовать Scrum для преодоления вызовов или для того, чтобы воспользоваться преимуществом появившейся возможности. Перед тем как начать первый спринт, мы часто хотим знать, как много времени займет проект и сколько он будет стоить. Мы можем получить начальную оценку, экстраполируя результаты первых нескольких спринтов. Например, мы разработали по 20 единиц функционала за два спринта и предполагаем, что система, как мы ее себе представляем, состоит из 220 единиц функционала. Нам остается создать еще 180 единиц. Со скоростью 20 единиц за спринт нам понадобится еще девять итераций. Если мы добавим или вычтем часть функционала во время разработки программного обеспечения, то разделим оставшуюся работу с учетом необходимого времени выпуска.
Конечно, нужно соблюдать крайнюю осторожность при экстраполяции фактов из прошлого для создания прогноза будущего. Экстраполяция – это процесс построения новых точек данных. Он похож на процесс интерполяции, при котором строятся новые точки между известными точками, но результаты экстраполяции менее значимы и подвержены большей неопределенности. Мы знаем, что разработка программного обеспечения – сложная задача. Мы можем экстраполировать, но должны постоянно проверять. В конце каждой итерации мы проверяем, где мы действительно находимся, а не где должны быть в соответствии с экстраполированными данными. Реальность – это более твердая основа, чем ожидания.
Проблема новых возможностей в том, что они новые. Пути их достижения, как правило, – либо создание чего-то нового, либо новое использование старого подхода. В любом случае всегда есть много новых вещей, которые нужно продумать, найти красивое решение, написать новое программное обеспечение либо перепрофилировать старое. Традиционно нас просят сначала обдумать, а потом уже начинать разработку. Это называется планирование требований, и результатом планирования становится документация продукта или документация маркетинговых требований. Проблема в том, что мы точно не знаем, чего хотим. Даже когда у нас есть четкие идеи, лучший подход обычно появляется во время разработки, потому что определение сложных проблем при планировании – задача трудная, чреватая ошибками и упущениями. С помощью Scrum мы планируем по мере продвижения, находя то, что нам нужно, в процессе работы над проектом. Предсказуемость появляется из своевременного принятия решений, основанных на реальных результатах. Хотя мы и планируем время и стоимость в начале проекта, но постоянно оцениваем его по мере продвижения вперед. В случае с традиционными проектами время и стоимость также прогнозируются в самом начале, но они не предоставляют эффективных данных для внесения изменений в планы до тех пор, пока как минимум 90 % работы не будет закончено.
Организации, которые применяют Scrum, имеют тенденцию к использованию 30-дневных спринтов, но Scrum также позволяет более короткие спринты наравне со спринтом в один месяц. Более длинные спринты хороши для более стабильных ситуаций, а более короткие – для более сложных и требовательных.
Рис. 6.5. Переменные, влияющие на длину спринта
Лучшая длина спринта для вашего проекта определяется после оценки следующего (рис. 6.5):
• перерасходы на короткие спринты;
• увеличение гибкости и контроля;
• длина спринта.
Спринт никогда не должен превышать один месяц.
Четыре недельных спринта дают б
В целом более длинные спринты используются там, где меньше риска, нестабильности или неопределенности. К примеру, продукт или система предназначены только для внутреннего пользования. В таких или подобных случаях тридцатидневный спринт будет более чем адекватным.
Два двухнедельных спринта стоят больше, чем один 30-дневный. Будет в два раза больше мероприятий по планированию спринта, обзору спринта и ретроспективе спринта. Scrum-команда должна будет формулировать новый дизайн в два раза чаще. Естественные процессы разгона и спада скорости во время спринта будут и происходить в два раза чаще.
Цена, которую приходится платить за более короткие спринты, – увеличение времени, необходимого для планирования и разбора. Вы можете сами выбирать, хотите ли вы платить за дополнительную страховку. Таблица 6.1 показывает, какое примерно время необходимо на спринты разной длины. В примере время на проведение мероприятий спринтов разной длины приведено к эквиваленту 30-дневного спринта. Стоимость мероприятий спринта, таких как планирование спринта, обзор спринта и ретроспектива спринта, принята одинаковой. Стоимость Scrum-команды, о которой идет речь в примере, составляет 200 тысяч долларов за тридцатидневный спринт.