Как помогал Project manager с написанием ТЗ?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как я помогал Project Manager с написанием ТЗ (Technical Specification)
ТЗ — это мост между видением PM и реализацией разработчиков. Хорошее ТЗ ускоряет разработку на 30-50%, плохое — замораживает проект на переделки.
Шаг 1: Понимание разницы между roles
Product Manager (я):
- ПОЧЕМУ делаем (бизнес-цель, юзер-проблема)
- ЧТО делаем (функциональные требования)
- КДО целевая аудитория (user personas)
- КОГДА нужно (приоритет, deadline)
Project Manager (коллега):
- КАК организовать процесс
- СКОЛЬКО ресурсов
- На сколько спринтов
- Риск-менеджмент, блокеры
Я помогаю Project Manager с содержанием (ТЗ), она помогает мне с процессом (планирование, координация).
Шаг 2: Начало: Формулировка проблемы
Плохое ТЗ: "Нужно улучшить фильтры в приложении"
Хорошее ТЗ (мой вклад):
ПРОБЛЕМА:
20% пользователей жалуются, что не могут найти нужный продукт из-за плохих фильтров.
Сейчас фильтры работают только по названию, пользователям нужно ещё по цене, рейтингу, категории.
ЦЕЛЬ:
Улучшить experience поиска, чтобы пользователи находили товар за 30 секунд (сейчас 2-3 минуты).
CОНТЕКСТ:
- DAU в категории товаров: 5,000
- Конверсия до клика на товар: 60% → нужно до 75%
- Конкурент (Amazon) имеет фильтры по 15+ параметрам
Эта информация ДО технических деталей. Она позволяет разработчикам понять, почему они делают эту работу.
Шаг 3: User stories и требования
Я пишу user stories, которые Project Manager помогает превратить в спринты:
User Story:
Как покупатель,
Я хочу фильтровать товары по цене,
Чтобы найти товар в моём бюджете.
Принимаемые критерии:
- Могу ввести минимальную и максимальную цену
- Результаты обновляются в реальном времени
- Могу комбинировать фильтр цены с другими фильтрами
Требования (уточнение):
| Требование | Описание | Приоритет |
|---|---|---|
| Фильтр по цене (min-max) | Слайдер от $0 до $10,000 | MUST |
| Фильтр по рейтингу | Checkbox: 4.5+, 4+, 3+, все | MUST |
| Фильтр по категории | Dropdown с 20 категориями | MUST |
| Фильтр по бренду | Multiselect | SHOULD |
| Кастомные теги | Пользователь создал теги товаров | COULD |
| Сохранение фильтров | Помни выбранные фильтры | SHOULD |
При помощи Project Manager выбираем: MUST делаем сейчас, SHOULD и COULD — потом.
Шаг 4: Поведение граничных случаев
Я описываю, что должно происходить в edge cases:
Вариант 1: Нет результатов
Если пользователь выбрал цену $1-10, а такые товары кончились:
- Показать пустую страницу
- Сообщение: "Нет товаров в этом ценовом диапазоне"
- Предложить: "Попробуйте расширить цену" + кнопка (очистить фильтр)
Вариант 2: Мобильная версия
На мобиле фильтры занимают полный экран (нет sidebar):
- Кнопка "Фильтры" открывает drawer
- Показываем по 1 фильтру за раз (иначе не влазит)
- Кнопка "Применить" запускает поиск
Вариант 3: Performance
Если пользователь очень часто меняет фильтры (50+ раз в минуту):
- Не делать запрос на каждое изменение (дебаунс 300ms)
- Показать loading spinner
- Кэшировать результаты
Все эти детали я обсуждаю с Project Manager, чтобы понять: стоит ли это в MVP или потом?
Шаг 5: Макеты и взаимодействие
Я не рисую макеты (это дизайнер), но я описываю flow:
PAGE FLOW:
1. Пользователь открывает "Товары" → видит список + фильтры слева
2. Кликает на фильтр цены → слайдер
3. Движет слайдер → список товаров обновляется (no page refresh)
4. Выбирает категорию → результаты снова обновляются
5. Кликает на товар → переходит на detail page
6. Нажимает back → фильтры остаются такие же (сохраняются в URL)
Обсуждение с Project Manager:
- На сколько спринтов разбить эту работу?
- Кто делает фронт, кто бэк, кто интеграцию?
- Есть ли зависимости (нужно сначала API от бэка)?
Шаг 6: API контракт
Я определяю, какие API endpoints нужны. Project Manager согласует это с бэкенд lead:
Endpoint: GET /api/v1/products
Query параметры:
- price_min: number (опционально)
- price_max: number (опционально)
- category: string (опционально, может быть несколько)
- rating_min: number (опционально)
Пример: GET /api/v1/products?price_min=10&price_max=100&category=electronics&rating_min=4
Ответ:
{
"items": [
{
"id": "uuid",
"name": "Product Name",
"price": 45.99,
"rating": 4.5,
"category": "electronics"
}
],
"total_count": 234,
"page": 1
}
Этот контракт обсуждается раньше разработки. Фронт может писать код с моком, пока бэк не готов.
Шаг 7: Тестирование и критерии приёма
Я пишу checklist для QA. Project Manager помогает спланировать testing phase:
Функциональные тесты:
[ ] Фильтр по цене: выбрал $50-100, показываются только товары в этом диапазоне
[ ] Фильтр по категории: выбрал 2 категории, показываются товары из обеих
[ ] Комбинация: цена + категория + рейтинг работают вместе
[ ] Очистка фильтров: кнопка "Reset" убирает все фильтры
[ ] Сохранение URL: если закрою tab и вернусь, фильтры остаются (по URL)
Performance тесты:
[ ] Загрузка результатов при фильтре: < 500ms (вместе с animation)
[ ] Изменение фильтра (без reload): < 300ms
[ ] Мобильная версия: < 800ms (может быть медленнее)
UI/UX тесты:
[ ] На мобиле фильтры занимают весь экран (не видно товары)
[ ] На дескьопе фильтры в sidebar (видно товары и фильтры одновременно)
[ ] Сообщение "Нет результатов" ясное и есть способ очистить фильтры
Шаг 8: Дорожная карта и зависимости
Я с Project Manager планирую разделение на спринты:
Sprint 1 (неделя 1-2):
- Бэк: API для фильтров (price, category, rating)
- Фронт: UI компоненты (слайдер, checkbox, dropdown)
Sprint 2 (неделя 3-4):
- Фронт: интеграция фронта с API
- QA: функциональное тестирование
Sprint 3 (опционально):
- Фронт: улучшение UX, animations
- BАк: оптимизация запросов (если медленно)
Зависимости:
- Фронт не может начать спринт 2, пока бэк не закончит спринт 1
- API должен быть задокументирован в Swagger
- Тестовые данные (fixtures) нужны для разработки
Шаг 9: Документирование и передача знаний
После запуска я помогаю Project Manager с документацией для support/analytics:
ТЗ ИТОГОВОЕ (для архива и будущих reference):
- Проблема: описание
- Решение: что реализовали
- Результаты: метрики
- Уроки: что работало, что нет
- Будущие улучшения: что нужно добавить
Это помогает, когда через год нужно добавить новый фильтр — уже понимаешь архитектуру.
Шаг 10: Post-mortem и улучшения
После запуска фичи я с Project Manager провожу встречу:
Что прошло хорошо?
- Требования были ясными, не было переделок
- API контракт был правильным с первого раза
- Тестирование было быстрым
Что можно улучшить?
- Забыли про граничный случай (нет результатов)
- ТЗ было слишком подробным в деталях (ненужная информация)
- Не было обсуждения performance с бэк lead раньше
Применяем для следующего проекта:
- Добавляем граничные случаи в чеклист
- Делаем ТЗ менее подробным, больше фокуса на требования
- Приглашаем tech lead на обсуждение API раньше
Мой процесс написания ТЗ (с Project Manager)
- Проблема + Контекст (я) → 30 минут обсуждения с Project Manager
- User stories и требования (я) → обсуждение с дизайнером и tech lead
- Граничные случаи (я + tech lead) → Project Manager добавляет риски
- API контракт (я + бэк lead) → Project Manager рассчитывает effort
- Спринты и зависимости (я + Project Manager) → планирование
- Тестирование (я + QA) → Project Manager следит за timeline
- Документирование (я + Project Manager) → архивируем для будущего
Инструменты, которые я использую
- Figma — макеты и mockups
- Confluence — документирование ТЗ
- Jira — user stories, tasks, зависимости
- Miro — диаграммы user flow, edge cases
- Slack — быстрые вопросы и уточнения
Project Manager использует те же инструменты, но фокусируется на timeline и ресурсах.
Антипаттерны (что НЕ делать)
❌ ТЗ без контекста "Нужно сделать фильтры" → Разработчики не понимают, зачем
❌ ТЗ слишком подробное "На кнопке шрифт должен быть sans-serif 14px rgba(0,0,0,0.87)..." → Это дизайнер должен определить
❌ Не обсуждать с техническими людьми → Написал ТЗ, только потом спросил у бэк lead — он говорит "это невозможно"
❌ Не определить API заранее → Фронт и бэк разработаны, API контракт не сходится
❌ Забыть про граничные случаи → Фичу запустили, упали на edge case, нужна срочная правка
Заключение
Хорошее ТЗ, написанное PM при помощи Project Manager, — это:
- Контекст — почему мы это делаем
- Требования — четко и точно
- Граничные случаи — что может пойти не так
- API контракт — как компоненты общаются
- Зависимости — что делать в каком порядке
- Тестирование — как проверить, что работает
- Документирование — для будущего
Когда это всё есть, разработчики знают, что делать. Project Manager знает, когда всё закончится. PM спокоен, что ничего не упущено. Каждый делает свою работу правильно.