Назначение
User Story описывает требование глазами пользователя через ценность, а не через техническое задание. Цель — не «зафиксировать ТЗ», а начать разговор о ценности и договориться о критериях приёмки. Хорошая история проходит INVEST и снабжена критериями в Given/When/Then.
Подробный шаблон
# История: <короткое имя>
> Как <роль/тип пользователя>,
> я хочу <действие/возможность>,
> чтобы <ценность/зачем>.
## Критерии приёмки (Given/When/Then)
Scenario: <happy path>
Given <предусловие>
When <действие>
Then <наблюдаемый результат>
Scenario: <край / ошибка>
Given <предусловие>
When <действие>
Then <как система реагирует>
## Заметки
Зависимости, дизайн-макет, открытые вопросы, не-цели.
## Оценка: <story points>
Пример 1 — happy + край
# История: Автонарезка видео в Shorts
> Как контент-мейкер,
> я хочу авто-нарезку длинного видео на Shorts,
> чтобы публиковать чаще, не тратя время на ручной монтаж.
## Критерии приёмки
Scenario: Видео успешно нарезано
Given загружено видео длительностью 10+ минут
When я нажимаю «Нарезать»
Then я получаю ≥3 вертикальных клипа 9:16
And каждый клип ≤60 секунд и содержит русские субтитры
Scenario: Видео слишком короткое
Given загружено видео длительностью 30 секунд
When я нажимаю «Нарезать»
Then показывается сообщение «нужно видео от 1 минуты»
And кнопка нарезки остаётся неактивной
Пример 2 — другой домен
# История: Сохранение карточки в избранное
> Как пользователь базы знаний,
> я хочу добавлять карточки в избранное,
> чтобы быстро возвращаться к нужным инструментам.
## Критерии приёмки
Scenario: Добавление в избранное
Given я открыл карточку инструмента
When я нажимаю на иконку «звезда»
Then карточка появляется в разделе «Избранное»
And звезда становится заполненной
Scenario: Избранное переживает перезагрузку
Given у меня есть карточка в избранном
When я перезагружаю страницу
Then карточка остаётся в «Избранном»
INVEST (критерий хорошей истории)
- Independent — независима (можно сделать отдельно).
- Negotiable — обсуждаема (не жёсткое ТЗ).
- Valuable — ценна для пользователя/бизнеса.
- Estimable — оцениваема (понятен объём).
- Small — мала (влезает в спринт).
- Testable — проверяема (есть критерии).
Чек-лист качества
- Формула «Как… хочу… чтобы…» с реальной ценностью (не «чтобы была кнопка»).
- Роль — конкретный пользователь, а не «система».
- Критерии в Given/When/Then, результат наблюдаем.
- Покрыт хотя бы один край/ошибка, не только happy path.
- Проходит INVEST (особенно Small и Testable).
Частые ошибки
- «Ценность» = повтор действия («чтобы нажать кнопку»). → Настоящая польза: зачем это пользователю.
- История-гигант. → Не влезает в спринт → дроби (нарушен Small).
- Нет критериев приёмки. → Непроверяемо → сдача превратится в спор.
- Техзадача под видом истории («создать таблицу в БД»). → Это Task, а не User Story (нет пользовательской ценности).
- Только happy path. → Добавь край/ошибку — там прячутся баги.