Подход № 2: «Начинать реализовывать новые истории, но наивысшим приоритетом ставить доведение старых до ума»
Мы предпочитаем этот подход. По крайней мере, до сих пор так и было.
По сути, он состоит в следующем: когда мы заканчиваем спринт, мы переходим к следующему, но учитываем, что в следующем спринте нам потребуется время на исправление багов прошлого спринта. Если следующий спринт оказывается перегружен работой над исправлением дефектов прошлого, то мы пытаемся понять причину такого количества дефектов и выработать способ поднять качество. И мы выбираем длину спринта достаточной, чтобы успеть справиться с приличным объёмом работы по исправлению багов прошлого спринта.
Постепенно, за несколько месяцев, количество работы по устранению дефектов прошлых спринтов уменьшилось. Кроме того, мы смогли добиться, чтобы на устранение дефекта требовалось отвлекать меньше людей, то есть, нет нужды беспокоить всю команду по поводу каждого бага. Теперь хаос в наших спринтах снизился до приемлемого уровня.
При планировании спринта, чтобы учесть то время, которое мы планируем потратить на устранение дефектов, мы устанавливаем уменьшенное значение фокус-фактора. Со временем команды начинают очень хорошо определять нужное значение фокус-фактора. В этом также очень помогает статистика реальной производительности (см. стр. 23 «Как команда принимает решение о том, какие истории включать в спринт?»)
Неправильный подход: «Клепать новые истории»
Если перефразировать, то это значит: «реализовывать новые истории, вместо того, чтобы довести старые до ума». Казалось бы — да кому такое может прийти в голову? А, тем не менее, мы частенько допускали эту ошибку в начале и, я уверен, что и многие другие компании тоже. Эта неадекватность связана со стрессом. На самом деле многие менеджеры не понимают, что когда кодирование закончено, то, мы, как правило, всё ещё далеки от релиза, готового к использованию. Поэтому менеджер (или product owner) просит команду наращивать функционал продукта, в то время как груз почти-готового-к-выпуску кода становится всё тяжелее и тяжелее, замедляя весь процесс.
Не забывайте об ограничении системы
Допустим приемочное тестирование — это ваше самое узкое место. Например, у вас слишком мало тестировщиков или фаза приемочного тестирования забирает много времени из-за ужасного качества кода.
Допустим, команда, которая выполняет приемочное тестирование, успевает проверить 3 фичи в неделю (не подумайте, мы не используем «фичи в неделю» как метрику; я взял это для примера). Также допустим, что ваши разработчики могут сделать 6 новых фич в неделю.
Для менеджера или Product owner’а (даже для самой команды) будет искушением запланировать разработку 6-ти новых фич в неделю.
Только не это! Витать в облаках долго не получится, а когда упадёте — будет больно.
Лучше при планировании рассчитывать на 3 фичи в неделю, а оставшееся время направить на устранение узкого места. Например:
• Заставить разработчиков потестировать (приготовьтесь к «благодарности» за это…).
• Внедрить новые инструменты и скрипты, которые упростят тестирование.
• Добавить больше автоматизации.
• Сделать длиннее спринт и включить приемочное тестирование в спринт.
• Выделить несколько «тестовых спринтов», где вся команда будет работать над приемочным тестированием.
• Нанять больше тестировщиков (даже если это означает уволить некоторых разработчиков).
Мы пробовали все эти решения (кроме последнего). С точки зрения долгосрочной перспективы лучшими являются пункты 2 и 3, а именно: более эффективные инструменты, скрипты и автоматизация тестирования.
А для выявления узких мест лучше всего подходят ретроспективы.
Возвращаясь к реальности
У вас, наверное, сложилось впечатление, что у нас есть тестеры во всех Scrum-командах, и что мы обзавелись ещё одной огромной командой тестеров, которые после каждого спринта проводят приёмочное тестирование всех готовых продуктов.
Ну … это не так совсем.
У нас всего несколько раз получилось выделить время на все эти процедуры, но тогда мы на собственном опыте убедились насколько это полезно. Могу сказать, что на данный момент мы всё ещё далеки от желаемого процесса обеспечения качества, и нам по-прежнему есть чему учиться.
Как мы управляем несколькими Scrum-командами