Один конкретный клиент имеет очень традиционный, консервативный подход к UAT и развертыванию. Когда команда разработчиков выполняет элементы спринта, все это упаковывается в релиз, который должен пройти через среду UAT/Staging, где он полностью протестирован на наличие новых функций, затем полностью регрессионно протестирован, а затем, наконец, развернут в производственной среде. . Причина такого подхода в том, что среда Staging содержит копию производственных данных, что слишком важно для разработчиков, а компания привыкла к каскадному подходу. Обратите внимание, что это нельзя изменить, поэтому, пожалуйста, не предлагайте каких-либо организационных изменений. Тестировщики UAT также не являются частью команды Scrum. Это тоже не изменится.
Несмотря на то, что модульное тестирование, регрессионное тестирование и другие формы тестирования включены в спринт, а владелец продукта принимает активное участие, нет никакого способа обойти этот длительный процесс UAT в конце. Естественно, это приводит ко многим сбоям, о которых сообщает UAT, и элементы отклоняются и отправляются обратно в разработку. Типичный цикл UAT составляет около 1 недели.
Я ищу хорошие идеи о том, как структурировать спринты Scrum в таком климате / среде. Опять же, пожалуйста, не предлагайте изменить компанию, потому что это выходит за рамки данного обсуждения. Это скорее вопрос «работы в реальном мире с клиентами». Им нравятся agile-практики, управление невыполненными работами, усовершенствование, планирование спринтов, планирование релизов и все остальные прелести Scrum. Нам просто нужно добавить эту 1 неделю UAT и отказа в конец, и я ищу способы приспособиться к этому.
Переход на другую методологию также возможен, если у вас есть предложения.
Вы не можете накрасить губы свиньи и ожидать, что она станет красавицей бала. Когда вы сталкиваетесь с препятствием процесса, которое нельзя изменить, например, с тем, которое вы описываете, вы должны сделать процесс видимым для проекта. Поскольку у вас почти нет контроля над препятствием и мало что можно сделать для его устранения, вашей ключевой целью должна быть прозрачность .
Сделайте свой процесс видимым и прозрачным для команды, заинтересованных сторон, руководства и клиента. Затем они должны определить ценность (или ее отсутствие) во внешних процессах. Ваш внутренний процесс будет четко определять ценность, которую добавляет команда, а также время выполнения и накладные расходы, добавляемые любыми внешними факторами.
Работа высшего руководства заключается в том, чтобы контролировать (или принимать) внешние факторы процесса. Пока все будут помнить об этом, дела пойдут намного ровнее.
Естественно, это приводит ко многим сбоям, о которых сообщает UAT, и элементы отклоняются и отправляются обратно в разработку.
Это проблема, но это экстерналия . У вас есть внешний процесс, который увеличивает накладные расходы процесса (и, следовательно, затраты) на вашу прибыль. Правильный способ справиться с этим — сделать эти затраты видимыми для заинтересованных сторон.
В вашем конкретном случае я бы удалил UAT из определения готовности. Работа для спринта завершена, когда она проходит модульное тестирование, непрерывную интеграцию, рецензирование или что-то еще в вашем определении готовности. Затем проделанная работа представляется заказчику в виде законченного шага в конце спринта.
Затем клиент может провести ваш следующий спринт, выполняя столько UAT, сколько ему нравится, пока вы работаете над следующим инкрементом, и любые проблемы, которые они могут обнаружить, вносятся Владельцем продукта в бэклог продукта как новая работа для будущего спринта. Это дополнительное время станет видимым артефактом выбранного ими процесса, а видимость имеет большое значение. Это действительно правильный способ справиться с этой ситуацией, и он соответствует основным принципам модели итеративной разработки.
В качестве альтернативы вы можете просто увеличить текущую продолжительность спринта на две или более недель, чтобы приспособиться к их циклу UAT. Частью вашего определения готовности будет передача продукта в середине спринта в UAT, а затем ожидание результатов.
Стоимость простоя разработчика определяется внешним процессом. Ваша задача не в том, чтобы создавать загруженную работу или увековечивать «ошибку 100%-го использования». Команда может использовать эту неделю для обновления сервера CI, исправления рабочих станций, обучения без отрыва от производства или просто чтения хорошей книги. Дело в том , что этот цикл UAT имеет стоимость разработки (будь то работа, не связанная с продуктом, или итеративная работа), которая является частью организационной структуры. Просто сделайте эту стоимость полностью видимой.
Основной риск этого подхода заключается в том, что после завершения UAT любые изменения или новая работа могут быть не учтены в оценках группы. В результате у вас может быть или не быть достаточно времени для внесения изменений или доработки в рамках Спринта. В результате видимой стоимостью проекта будет большее количество неудачных спринтов (например, спринтов, которые не соответствуют цели спринта), незавершенная работа, которая затем должна быть возвращена в бэклог продукта, или досрочное завершение с возвратом к планированию спринта.
Это приемлемые результаты в том смысле, что они обеспечивают прозрачность процесса и то, что стоимость проекта для этих процессов видна команде, заинтересованным сторонам и клиенту. Просто помните, что прозрачность является основной целью, и никогда не должно быть невидимой работы.
Для протокола: когда Команда Разработки не может предоставить потенциально выпускаемый инкремент в конце Спринта, это серьезное отклонение от Scrum. Давайте отложим этот вопрос в сторону.
Что вы можете сделать:
вовлекайте в спринт как можно больше конечных пользователей . Не ограничивайте себя физическим присутствием. Мыслить оригинально. Пример: вы можете записывать видеоклипы, представляющие новые функции, делиться ими как можно скорее и спрашивать пользователей, ожидают ли они этого.
если для завершения UAT требуется 1 неделя, подумайте об увеличении продолжительности спринта на 1 неделю и включите их в спринт. НО не ждите с UAT, сделайте последнюю неделю спринта. Не рассматривайте это как возможность для команды разработчиков сделать еще больше новых функций, потому что это нанесет ответный удар с двойной силой. Прибыль? Меньше незавершенной работы и переключения задач. (Я предполагаю, что в настоящее время Sprint часто прерывается запросами этих конечных пользователей)
Реальность вашей ситуации довольно распространена, и вам нужно сделать как сейчас, так и, возможно, в далеком будущем.
Делай сейчас
Сосредоточьтесь на выводе Команды Разработки, который потенциально может быть отправлен. Это новая часть программного обеспечения, которую они производят каждый спринт, направляется в UAT и всегда должна проходить. (Если он всегда будет успешным, то бизнес увидит меньшую ценность в UAT.)
1) Создайте определение «Готово», которое представляет уровень качества, при котором вы потенциально готовы к выпуску.
2) Предоставьте вашей команде разработчиков возможность отказываться принимать элементы невыполненной работы, для которых нет адекватных критериев приемлемости.
Это приблизит вас к ценностям и принципам Scrum, не мешая более широкой организации.
Среднесрочная перспектива
Как только у вас будет качество и последовательность, вы можете начать фокусировать UAT senario на большем количестве сеансов обратной связи. Возможно, вам нужно обойти остальную часть цепочки и привлечь реальных пользователей к обзору спринта, но именно здесь вы начнете ускоряться. Если вы не можете создавать вещи, которые неправильны, и создавать больше того, что нужно пользователям, вы завоюете больше доверия.
3) Привлеките конечных пользователей и заинтересованных лиц к обзору спринта и соответствующим образом адаптируйте невыполненную работу.
4) Пригласите UAT на обзор спринта.
5) Вставьте в свой код инструменты для сбора данных телеметрии, например Application Insights, чтобы действительно понять поведение ваших пользователей.
Долгая цель
Когда вы продемонстрируете способность команды разработчиков поставлять работающее программное обеспечение, отвечающее потребностям бизнеса, UAT и промежуточные процессы будут все больше восприниматься как пустая трата времени. Вы будете. Пусть оба ваших Заказчика/стейкхолдеры будут бороться за то, чтобы дать Команде Разработки больше контроля и ответственности.
Вот что я бы предложил. Когда цикл UAT завершается, его результат добавляется в журнал невыполненных работ по продукту. Перед следующей весенней сессией планирования владелец продукта приводит в порядок и (пере)приоритизирует журнал невыполненных работ по продукту. Во время следующей весенней сессии планирования команда разработчиков вместе с владельцем продукта выбирают, какие элементы невыполненной работы по продукту будут перенесены на следующую весну. Исправление некоторых проблем может быть критически важным для заказа на покупку, некоторые могут дольше оставаться в бэклоге продукта.
Если производительность команды сильно снижается из-за отклонения работы через неделю из-за неудачного UAT, это может помочь учесть это при планировании истории. Попробуйте реструктурировать свои истории, включив в них эту проблему из реального мира, чтобы даже в случае провала UAT вы все равно могли продемонстрировать ценный прогресс клиенту. Предполагая, что вы время от времени добиваетесь успеха в UAT, можете ли вы показать своему клиенту, что работа выполняется, просто может потребоваться дополнительная поездка туда и обратно?
Если эти задержки затрагивают клиента, вам необходимо решить проблему, связанную с тем, что ваша команда не может создать продукт, отвечающий потребностям клиента. Следующим моим шагом будет обращение с тестировщиками UAT как с клиентами. Вы сказали, что они не являются частью SCRUM-команды, но они могут быть клиентами. Ни одна группа тестирования не любит сбои в программном обеспечении, возможно, вы можете работать с ними, чтобы найти способы выявить то, что им важно, на более ранних этапах процесса. Если они заказчики, участвующие в процессе, они могут почерпнуть из этого идеи. Они могут сказать: «Вы знаете, этот инструмент, который вы использовали для проверки работоспособности вашего программного обеспечения до того, как мы его протестировали… думаете, мы могли бы его использовать?» Тогда вы обеспечили ценность, которую они никогда не ожидали получить.
Все зависит от того, чего на самом деле хочет клиент. Возможно, проблема может быть решена с помощью контроля версий. Возможно, у вас есть два направления: одно направление добавляет новые функции, а другое обеспечивает возможность создания чего-то, что проходит UAT, используя предыдущий набор функций.
Бартек Кобылецкий
Питтсбург, администратор баз данных
Бартек Кобылецкий