Суть
Декомпозиция — это дробление большого на маленькое и проверяемое. Главный принцип: крупное прячет риск, тормозит поток и не поддаётся оценке, а мелкое легко оценить, проверить и довести до конца. «Слона едят по кусочкам»: непонятную задачу на месяцы превращаем в цепочку понятных шагов на часы.
Иерархия
Epic — крупная цель/тема (недели-месяцы), напр. «Облачная синхронизация».
└ Feature — законченная возможность, напр. «Вход и регистрация».
└ User Story — ценность для пользователя, влезает в спринт.
└ Task — конкретный технический шаг (часы), напр. «эндпоинт логина + тест».
- Epic/Feature — язык планирования и roadmap.
- Story — язык спринта и приёмки (ценность + критерии).
- Task — язык ежедневной работы (технические шаги).
INVEST — критерий хорошей истории
Independent · Negotiable · Valuable · Estimable · Small · Testable. Если история нарушает Small (не влезает в спринт) или Estimable (нельзя оценить) — её надо дробить дальше.
Пример декомпозиции на числах
Epic: «Облачная синхронизация» — оценка навскидку ~40 SP (слишком крупно, риск спрятан).
Дробим на Features:
F1. Вход/регистрация ......... ~13 SP
F2. Push/pull ядра ........... ~13 SP
F3. Realtime + конфликты ..... ~14 SP
F1 «Вход/регистрация» дробим на Stories (каждая ≤ спринт, INVEST):
S1. Регистрация по email ............ 5 SP
S2. Вход и сессия ................... 5 SP
S3. Выход и сброс локального ядра ... 3 SP
S1 дробим на Tasks (часы):
T1. Эндпоинт POST /register + валидация + тест
T2. Форма регистрации (UI) + состояния ошибок
T3. Хеширование пароля + сохранение в БД + миграция
Проверка: 5+5+3 (Stories F1) ≈ 13 SP — сходится с оценкой Feature. ✔
Большие истории (≥13–21) НЕ берём в спринт как есть — дробим (нарушен Small).
Когда применять
- Перед спринтом — Epic/Feature → Stories размера спринта.
- Перед работой — Story → Tasks (технические шаги).
- В вайб-кодинге — тот же принцип: сервис/фичу дробим на проверяемые шаги, после каждого — проверка (ровно фаза Plan конвейера).
Ловушки
- История-гигант в спринте. → Неопределённость огромна, риск спрятан; дроби до ≤8–13 SP.
- Дробление по слоям, а не по ценности («сделать весь бэкенд», «потом весь фронт»). → Story должна давать пользовательскую ценность вертикально (тонкий срез фичи целиком).
- Task вместо Story («создать таблицу») как единица ценности. → Task — шаг, ценность несёт Story.
- Передробление. → Десятки микрозадач на тривиальное — overhead; дроби до «понятно и проверяемо», не мельче.
- Потеря целого. → Дробя, держи в голове Epic — зачем всё это; иначе соберётся не то.