Этот материал - часть практического курса “ProductDo: Tech для продакта”.
Ситуации продакта с Архитектурой и их решения
| Ситуация |
Пример ситуации |
Шаги продакта |
| Прохожу собеседование, попросили построить архитектуру реального приложения |
“Нарисуйте нам, пожалуйста, архитектуру приложения знакомств Tinder” |
Строю архитектуру по шагам: фронтенд, сервисы, базы данных, API (см. следующую таблицу) |
| Перешел в новую команду/продукт, пытаюсь понять, что к чему |
Перешел в продукт “Доставка” большого магазина |
Прошу знающих коллег нарисовать общую архитектуру, чтобы понять, что с чем связано внутри и вне моего продукта и найти своих клиентов и зависимости. |
| Мне нужно заменеджить создание сложной кросс-командной фичи |
Задача: ввести единую платежную систему для всех сервисов компании: такси, доставки еды, аренды самокатов |
Вместе с Тех Лидом рисую архитектуру сервисов, относящихся к оплате в перечисленных продуктах. Продакт не принимает решение о финальной архитектуре, но должен понимать, что к чему, чтобы залидить проект. |
| Дали задание запустить новый продукт: пытаюсь понять, что строить и сколько это займет |
Директор: “Хочу поручить тебе разработать систему интеграции с таксопарками для нашего приложения такси” |
Строю архитектуру (сначала сам, потом с тех лидом), продумываю все связи. Дополняю ее шаблоном “Full Product Review”. |
| Разработка стала занимать кучу времени, все идет медленно, программисты жалуются |
Добавление фичи “Корзина” заняло 5 месяцев. |
Скорее всего, это одна из “болезней” архитектуры: |
- Сильная связанность
- Дуплицирование
- Бесполезная зависимость
- Монолит
Иду обсуждать это с тех лидом и готовлюсь к сложным миграциям. |
| Я - Lead продакт и планирую распределение команд по продукту | Есть 3 команды, чтобы построить онлайн-магазин велосипедов. | Строю архитектуру. На основе архитектуры и бизнес-целей делю команды, например, так:
- Команда 1: отвечает за загрузку товаров и поиск
- Команда 2: за весь фронтенд
- Команда 3: за покупку, доставку и отзывы |
| Нужны новые идеи для бизнеса | Придумал, как расширить доставку еды на доставку посылок по городу | Строю детальную архитектуру. После этого станет яснее, какие полезные для бизнеса фичи можно будет добавить относительно малой кровью |
| Твоя ситуация тут не описана? Оставь коммент и мы ее добавим! | | |
Как построить архитектуру: короткая версия
- Смотрим на требования CJM/Figma (или задаем их сами, если строим с нуля)
- Строим пошаговую Service Blueprint табличку
- Строим Service Diagram: выделяем и рисуем frontend-элементы продукта
- Строим Service Diagram: выделяем и рисуем backend-элементы продукта. Для этого, для всех бизнес-процессов:
- Выбираем отдельный бизнес-процесс и называем сервис
- Добавляем сервису базы данных
- Добавляем сервису API
- Добавляем сервису внешние интеграции
- Полируем Service Diagram под аудиторию: архитектура должна выглядеть читаемо
Как построить архитектуру: длинная версия
| Шаг |
Простое объяснение |
Пример |
| Смотрим на требования CJM/Figma |
К началу построения архитектуры мы уже знаем, какие фичи нужны пользователю и какие данные это подтверждают. Чаще всего это выражается в каком-то наброске дизайна (например, в Figma). Это твои базовые, не технические навыки. |
Решили, что для онлайн-магазина велосипедов потребуются: |
- страница поиска
- страница продукта
- страница оплаты
и так далее |
| Строим пошаговую Service Blueprint табличку | Табличка отвечает на вопрос: "Что должно произойти на фронтенде (сайт, приложение) и бэкенде (сервисы, саппорт), чтобы пользователь совершил еще один шаг customer journey. | См. пример заполненной Service Blueprint ниже. |
| Строим Service Diagram:
выделяем и рисуем frontend-элементы продукта | То, с чем непосредственно взаимодействует пользователь. Для стандартного e-commerce магазина это чаще всего web-сайт и иногда - приложение. В зависимости от детализации мы можем указать на архитектуре только их (два квадратика), а можем нарисовать более детальную service diagram (страница поиска товаров, страница товара, страница заказов). | См. зеленые элементы на архитектуре ниже. |
| Строим Service Diagram: выделяем и рисуем backend-элементы продукта. | На бэке живут сервисы, которые позволяют frontend делать свою работу. Для построения архитекуры бэкенда надо разбить весь продукт на бизнес-процессы и для каждого:
а. Выбрать отдельный бизнес-процесс и назвать сервис
b. Добавить сервису базы данных
c. Добавить сервису API
d. Добавить сервису внешние интеграции
Если хотим подчеркнуть связь каких-то элементов, используем обычные стрелки. Направление - от “просящего” к тому, кто делает “работу”.
Это - самая трудоемкая и долгая часть, занимает 80% времени, так что не бойся, если идет тяжело.
В симуляторе мы разбираем 5 примеров (такси, доставка еды, стриминг музыки и тд), чтобы отработать навык. | См. архитектуру на картинке ниже:
- серым обозначены сервисы
- синим их базы данных
- рыжим их API
- желтым их внешние интеграции
Пример стрелок: сайт магазина связан с сервисом поиска (просит его вернуть результаты), а сервис доставки - с внешним сервисом нотификаций (просит отправить нотификацию). |
| Полируем Service Diagram под аудиторию: архитектура должна выглядеть читаемо | Задача продакта - донести очень сложную информацию обо всех требованиях и связях в одной картинке, будь то целая компания или отдельный сервис. Диаграмма должна вызывать чувство понимания структуры и показывать, как отдельные куски логики складываются в цельный продукт. Нечитаемая диаграмма (слишком много деталей, непонятные обозначения) приведет к обратному эффекту и просто всех запутает. | Рекомендации:
- называть сервисы понятными именами (никаких “STLP service”)
- соблюдать цветовую схему (например, пользователи - одним цветом, backend - другим, интеграции - третьим)
- не перебарщивать со стрелочками (например, не рисовать их для очевидных связей)
- помнить главную цель картинки (показать общую картину или же отдельный бизнес-процесс) и аудиторию (CEO или программисты команды) |
| Архитектура определяет организационную структуру и наоборот | Логические зависимости между сервисами никуда не деваются, даже если отвечающие за них команды расположить в разных зданиях и разных орг. структурах. Так что, если сервисы связаны, то продакты этих команд будут вынуждены постоянно координироваться.
Верно и обратное, структура команд определяет... архитектуру! Это утверждение столько раз подтверждалось на практике, что оно получило название Conway's Law. | Например, четыре команды с большой вероятностью построят архитектуру, которая делит всю логику на четыре части. А одна огромная команда с главным менеджером построит... монолит с центральным мозгом.
Так что будь внимателен, твоя “картинка” - это будущее организации. |
Пример заполненной Service Blueprint и Архитектуры для магазина велосипедов


Чек-лист продакта: технический стек
| Элемент |
Простое определение |
Какие бывают |
Вопросы продакта |
| Frontend-технологии |
Какие технологии использованы для создания UI, которые видит пользователь |
HTML: каркас web-страницы |
|
| CSS: стиль web-страницы |
|
|
|
| Javascript: язык для ****всего ****интерактива ****web-страницы |
- Почему выбраны именно эта технология? Можно посмотреть сравнительную табличку? |
|
|
- Какой у комады опыт работы с этой технологией? |
| Backend-технологии | На чем написана главная внутренняя логика продукта | Разные алгоритмы, написанные на разных языках программирования (Java, C++, Scala, Python, etc) | - Почему выбраны именно эта технология? Можно посмотреть сравнительную табличку?
- Какой у комады опыт работы с этой технологией? |
| Базы данных | Место хранения данных (покупок, пользователей, действий и тд).
| SQL: структурированные данные, сложные поиски, быстрый доступ, данные доступны сразу, сложнее скейлить
NoSQL: неструктурированные данные, простые поиски, медленный доступ, данные доступны когда-то, легче скейлить
Cache/CDN: способ держать частые элементы “под рукой” | - Соответствует ли выбор решения хранения продуктовым требованиям (частота и скорость поиска, скейл, консистентность)?
- Испытывают ли пользователи проблемы со скоростью и нужно ли нам подумать о кэшировании популярных запросов? |
| Работа с трафиком | Способы обработки входящих запросов. | Queue/Stack: способ временного хранения до обработки сервисом
Router/Load balancer: для распределения нагрузки
Proxy: типа “калитки” - каждый через нее должен пройти (пример: security-прокси) | - Зачем нужен этот элемент? Какую бизнес-проблему он решает? |
| Сообщения | Способ сервиса сказать что-то другой системе. | Logs: сервисы отправляют все подряд о своей работе. Нужны программистам для отладки проблем.
Events: сервисы отправляют что-то важное о своей работе. Отображаются на на дашбордах. | - Какие события мы передаем? Хочу построить дашборд по некоторым из них. |
| Инфраструктура в целом | Где живет весь код всех сервисов | На своих серверах
В своих датацентрах
В облаке (AWS, Google, Microsoft, etc) | - Почему выбор сделан в сторону Х? Можно посмотреть сравнительную табличку? |