В agile-командах часто возникает спор, насколько детально должна быть проработана User Story, прежде чем ее следует передавать разработчикам.
Некоторым разработчикам хотелось бы видеть максимально подробное описание, прочитав которое, они могли бы сразу всё понять и быстро сделать, ни к кому не обращаясь с вопросами. Руководству также зачастую импонирует такой подход, ведь программисты стоят дорого, нужно сделать так, чтобы они не отвлекались ни на что постороннее.
Рассмотрим Agile-подход к решению этой проблемы.
Для начала разберемся с концепцией CCC, которая расшифровывается как Card, Conversation, Confirmation.
Card (Карточка)
Идея состоит в том, что вся User Story должна поместиться на небольшую бумажную карточку или стикер. Много на ней не напишешь, да это и не нужно.
Главное предназначение карточки – служить напоминанием, приглашением к обсуждению (placeholder for conversation).
Цель – сместить фокус с написания требований на их обсуждение. Ибо живое обсуждение более важно, чем написанный текст.
Карточка должна коротко, но емко отражать суть задачи. Предлагаемый формат:
Мне как {роль} нужна {функциональность}, чтобы достичь {цели}.
Про функциональность в описании User Story забывают редко, а вот о том, кому она нужна и зачем, порой умалчивают. Явное указание бизнес-контекста весьма полезно для предстоящего обсуждения.
При написании User Story рекомендуется сосредоточиться на пользователе нашего приложения (focus on user needs and benefits).
Функциональность лучше описывать не абстрактно, а с использованием живых примеров (by example).
Первоначальная формулировка User Story делается умышленно нечеткой. Добавление подробностей откладывается до последнего момента, когда продолжать без них уже нельзя.
User Story может ссылаться на развернутые требования, например, протокол взаимодействия или формулу расчета.
Карточка User Story служит также для отслеживания статуса задачи, например, на канбан-доске.
Conversation (Обсуждение)
Обсуждение – наиболее важная часть.
Между разработчиками и Product Owner действует соглашение: разработчики обязуются задавать вопросы, а PO обещает, что будет для них доступен.
Общение, в идеале, происходит лицом к лицу (face to face), так как это наиболее эффективный (high bandwidth) способ передачи информации. Важные аспекты живого общения – это его интерактивность (возможность уточнить и удостовериться), а также обратная связь (один из фундаментальных принципов Agile).
Живое обсуждение позволяет преодолеть или свести к минимуму недостатки, присущие документации:
- к моменту использования она уже устарела
- написанный текст часто неоднозначен,
- неполон,
- не проверяем,
- скучен (кто-то его вообще читает?),
- статичен (нет возможности задать вопрос, нет уточнений и новых требований возникающих в ходе обсуждения),
- может, даже ошибочен (сообщите ли вы кому-либо о своих сомнениях?)
- документация создает ложное чувство достоверности и полноты
- документация часто навязывает конкретное, быть может, не самое эффективное решение
Confirmation (Подтверждение)
Третий важный аспект User Story – это подтверждение того, что задача выполнена.
Условия приемки (acceptance criteria), а также Definition of Done, оговоренные заранее, позволят вовремя прекратить работу, оценить, достигнута ли преследуемая бизнес-цель.
Для подтверждения задачи agile-команда проводит демонстрацию новой функциональности заказчику, собирает замечания, получая оперативную обратную связь.
Насколько же детальной должна быть User Story?
Вернемся к исходному вопросу и рассмотрим две крайности:
- User Story непроработаны совсем. В этом случае в начале спринта могут возникнуть такие вопросы, получение ответов на которые сильно задержит начало разработки. Задержит ее настолько, что задача не будет выполнена в рамках запланированного спринта. Простой и ожидание снизят нашу эффективность.
- User Story проработаны максимально, т.е. Product Owner заранее подготовил ответы на все возможные вопросы. В этом случае мы не сможем взять в спринт задачи до тех пор, пока PO их не проработает. Это увеличит нагрузку на PO (стремление предвидеть все возможные вопросы, повторная проработка меняющихся требований, проработка требований по задачам, которые будут отложены или отменены), замедлит его работу, отодвинет разработку важных и срочных требований заказчика, например, полученных в рамках обратной связи.
Очевидно, что мы не хотим впадать ни в одну из этих крайностей. Значит оптимум где-то посередине. Чтобы нащупать его, будем использовать концепции “точно вовремя” (just in time) и “ровно столько, сколько нужно” (just enough).
User Story должна содержать ровно столько подробностей, так что недостача хотя бы одной привела бы к тому, что мы не успели бы выполнить задачу в спринте. Добавление подробностей должно происходить точно вовремя, не позже, и не раньше. Смещение в любую сторону снижает нашу эффективность.
Можно ли достичь такого баланса для каждой User Story? Разумеется нет, но надо постоянно подстраиваться.
Поделитесь, пожалуйста, в комментариях, как вы работаете с User Stories. Актуальна ли для вас описанная проблема? Какие другие проблемы, связанные с User Stories, возникают в вашей команде?
Об авторе: более 15 лет занимаюсь разработкой ПО, работаю в крупном банке в качестве тимлида. Более пяти лет практикую Agile в роли скрам-мастера.
Идеи данной статьи почерпнуты из следующих источников:
- https://www.mountaingoatsoftware.com/agile/user-stories (англ.) – введение от Mike Cohn.
- https://www.betteruserstories.com/courses/better-user-stories/videos (англ.) – три весьма полезных бесплатных видео-урока от Mike Cohn.
Lofer
Обновить перед обсуждением или сразу записывать новое что запрещает? Кроме лени и раздолбайства?
А дать
^$@#!понять всю глубину его заблуждений, тому кто такую фигню утворил и заставить переделать?Ну да, а обсуждение «словами» просто образец однозначности?
С каких пор User Story определяет «как сделать»?
Какие-то странные притяные за уши проблемы: если делать не правильно, то будет плохо. Вроде очевидно.
yaroslav2 Автор
Я понял, что Вы против лени и раздолбайства. Согласен с тем, что если делать неправильно, то будет плохо.
Поделитесь, как делать правильно?
Lofer
Куда ни посмотри везде написано: должны быть четкие объективные\измеримые результаты\метрики. Вы берет четкий результат «деньги» он объективен и измерим, а что взамен?
На уровне контракта (на юридическом уровне) будут оговорены механизмы «согласия» — критерии приемки, стандарты и т.д. Если у вас на нижележащих уровнях теряются эта информация — это печально. И это не зависит от User Story.
Если вы хотите что-то получить, сначала договоритесь как будете «измерять результат».
На уровне законодательства будет написано что-то вроде: если критерии приемки не согласованы сторонами в контракте, применяются отраслевые стандарты для экспертизы оспариваемых результатов и это будет что-то вроде «ISO/IEC 25010:2011 Systems and software engineering — Systems and software Quality Requirements and Evaluation (SQuaRE) — System and software quality models»
Для Scrum «The Scrum Guide» написано "Definition of Done — When a Product Backlog item or an Increment is described as “Done”, everyone must understand what “Done ” means. Although this varies significantly per Scrum Team, members must have a shared understanding of what it means for work to be complete, to ensure transparency.… Any one product or system should have a definition of “Done” that is a standard for any work done on it. "
Если не измеримые и не согласованные ожидания\результат — на выходе может быть что угодно.
Вопросы коммуникаций — на то тоже есть рекомендаци вроде Communication Plan (кому и как предоставлятся информация и т.д.)
Кто за что ответственный — тоже есть рекомендации.
Из ничего и будет ничего…
yaroslav2 Автор
Спасибо за подробный ответ. Мне кажется, теперь я Вас лучше понимаю.
Видимо Ваша работа связана с заказной разработкой. ТЗ прописано в договоре, отступать от которого нельзя.
Для Вас документация – первоисточник правды. Вы не можете позволить, чтобы она оказалась неточной, неполной или неоднозначной. Это логично.
Строго говоря, в этом случае Agile пользы не дает. Может даже навредить. Waterfall поневоле со всеми вытекающими последствиями. Но Вы чувствуете себя в нём уверенно, и, похоже, фундаментально он Вам нравится.
Любопытно, зачем Вы читаете статьи про Agile? Видите в нём какие-то преимущества? Идеи, которыми можно было бы обогатить Waterfall (например, Definition of Done)?
Lofer
Нет. Мне все равно какой заказ\проект делать.
Нет. Заключается договор на оказание услуг. Есть заинтересованность что бы после каждой итерации «тебя не послали» и\или «не сработал репутационный риск» или «заинтересован сделать продукт».
Вы не верно расставили причину и следствие :). Сначала идет юридическое «согласен» оформленное в виде акта приемки, Acceptance Certificate или как-то еще. В контракте будет написано что-то вроде: качество представленного решения должно быть подтверждено UAC\ логом прохождение тестов предварительно согласованных сторонами, код должен быть депонирован, и т.д.
А после контракта проектный менеджер должен выполнить шаг «организация и/или
команда управления проектом самостоятельно определяет применимость знаний к тому или иному проекту.»
Scrum\Kanban\Rup и т.д. фактически такой же «шаблон проектирования» только применяемый не к програмному коду, а к проекту\команде\людям.
Ответственность за корретное применение и адаптацию процессов этих «шаблонов» лежит на PM\заинтересованных людях. Пихать везде одно и тоже — глупо, иначе получается «человеку с молоткм везде мерещатся гвозди».