Если после декомпозиции команда готова чётко оценить задачу и взять её в работу — это отличный результат. Но бывает и так, что команда всё равно не может подступиться к получившейся после декомпозиции истории. Причин может быть множество: в истории есть неизвестные переменные или скрытые подпроцессы, компания базирует свой продукт на нескольких платформах или команда оценивает реализацию функциональности в неприемлемые для заказчика сроки.
В таких случаях нужно проанализировать полученную историю и определить возможности для ещё более детальной декомпозиции. В этом системному аналитику поможет группа техник под названием «спайдер» — SPIDR.
SPIDR
SPIDR — группа техник вертикальной декомпозиции. Название образовано из первых букв входящих в неё техник:
- Spikes — спайки.
- Paths — пути.
- Interfaces — интерфейсы.
- Data — данные.
- Rules — правила.
Акроним SPIDR придумал Майк Кон (Mike Cohn), который является одним из основателей Scrum Alliance.
Представьте, что команда разработки реализует приложение, которое сравнивает цены на авиабилеты от компаний по всему миру и предоставляет пользователям возможность их бронировать. Системный аналитик написал историю:
«Как пассажир, я хочу изменить условия бронирования, чтобы не потерять деньги за билеты».
Рассмотрим каждую SPIDR-технику на примере этой истории.
Спайки
Команда разработки пока не знает, позволяют ли правила авиакомпаний и технические возможности их систем изменять условия бронирования. Она может получить необходимые знания, выполнив исследование в спайке.
Спайк — это элемент бэклога продукта, предназначенный для получения знаний о том, как реализовать функцию.
Чтобы провести исследование, команда разделяет основную историю на два элемента бэклога продукта:
- Спайк.
- Формулировка истории по результатам спайка.
При добавлении спайка в бэклог продукта следует придерживаться следующих правил:
- Записывать ожидаемые от спайка результаты.
- Ограничивать выделяемое на него время.
- Выполнять спайк как минимум на одну итерацию раньше реализации истории.
Правило 1: записывать ожидаемые результаты
Выполняя исследование в спайке, команда разработки выдвигает несколько гипотез и критериев проверки — ещё их называют метриками. Результаты исследования помогут команде выбрать подходящее техническое решение для реализации истории.
Как формулировать гипотезу
Хорошая гипотеза изначально содержит в себе ожидаемый результат исследования, который нужно проверить и доказать. Чтобы грамотно сформулировать гипотезу, следует придерживаться нескольких рекомендаций:
- Гипотеза не должна быть общеизвестным фактом. Иначе такую гипотезу нет необходимости доказывать.
- В гипотезе не должно быть неопределённостей, которые придётся дополнительно исследовать, прежде чем приступить к проверке самой гипотезы.
- В гипотезе должен быть заложен только один вопрос. Если команда разработки исследует несколько вопросов, она формулирует для каждого вопроса отдельную гипотезу.
- Гипотеза должна быть проверяемой. Команда знает, как именно проверить гипотезу, и может это сделать. Например, у команды есть для этого все технические возможности.
- Гипотеза должна быть связана с историей, в рамках которой эта гипотеза выдвигается. Она позволяет команде определить, как реализовать историю и помочь пользователю решить его задачи.
После выдвижения гипотезы нужно обозначить критерии, по которым можно будет понять, подтвердилась гипотеза или нет.
Как формулировать критерии проверки
Критерии проверки должны быть:
- Реалистичными — то есть достижимыми с учётом возможностей команды и системы.
Изменить бронирование силой мысли — это, конечно, невероятно круто, но пока что из области фантастики. А вот найти перечень авиакомпаний, где есть минимум один способ изменения брони, вполне реально.
- Конкретными — без туманных и двусмысленных фраз, которые можно понять по-разному.
«Хорошая продажа» — расплывчатое понятие, которое каждый может трактовать по-своему. Для одного это семь проданных билетов в день, для другого — отсутствие возвратов за покупки. Участники исследования должны одинаково понимать термины, которые содержатся в описании метрики.
- Измеримыми — то есть поддающимися количественной оценке.
Увеличить количество покупок можно на одну единицу продажи (один билет), но удовлетворит ли заказчиков такой результат, учитывая, что проектирование функциональности вышло значительно дороже? Чтобы подтвердить или опровергнуть гипотезу, нужно обозначить, к какому конкретно результату стремится компания.
Правило 2: ограничивать время
Исследовать информацию можно бесконечно, поэтому важно чётко обозначить временные границы. Команде стоит выделить для спайка столько времени, сколько предположительно потребуется для выполнения исследования при умеренном темпе работы.
И здесь может быть два сценария развития событий:
- У истории уже есть один или несколько вариантов решения и без исследования.
В этом случае команде следует оценить время, необходимое для:
- проведения исследования,
- реализации истории без исследования в рамках имеющихся решений.
Если исследование займёт больше времени, чем реализация истории без него, то стоит либо уменьшить объём исследования, либо отказаться от него.
- Команда разработки не знает, как реализовать историю.
В этом случае исследования не избежать, но оно может затянуться и тем самым отодвинуть реализацию истории ещё дальше. Поэтому основная задача — провести его в максимально короткий срок. Команда может дать приблизительную оценку времени на исследование и постараться уложиться в эти даты.
Правило 3: выполнять спайк на одну итерацию раньше реализации истории
Нельзя просто так взять и запланировать историю в работу, пока команда не поймёт, как именно эту историю реализовывать. Когда у команды недостаточно информации, есть риск не успеть к дедлайну и не выполнить обещания.
Невыполнение обещаний не только влияет на лояльность пользователей, но и блокирует работу других структурных подразделений. Например, заказчиков, которые планируют кампании на основе обещанной функциональности, или сотрудников службы поддержки, которые готовят новые скрипты для взаимодействия с пользователями приложения.
Избежать этого можно, заранее спланировав спайк. Но почему спайк лучше ставить как минимум на одну итерацию раньше реализации истории?
Если поместить спайк в одну итерацию с реализацией, то можно существенно снизить качество полученных результатов, если один из этапов затянется:
- Потратить слишком много времени на исследование, но не оставить времени на реализацию, то есть сделать на скорую руку функцию, которая не работает.
- Провести слабое исследование и ошибиться с выбором решения, но долго реализовывать функцию, которая не решает задачу пользователя или делает это частично.
Оба результата, скорее всего, разочаруют и заказчика, и пользователей, а также демотивируют команду разработки. Чтобы избежать подобных ситуаций и грамотно спланировать работу, команде следует придерживаться следующего алгоритма: