Системный дизайн от требований
От требований к компонентам, данным, API и плану эволюции системы.
Спроектируй систему. Требования: {{requirements}}.
Действуй как staff-инженер. Не пиши код — пиши дизайн.
1. Уточнение требований
Прежде чем дизайнить, проясни:
- Функциональные: что система должна делать (список user-stories)
- Нефункциональные:
- Latency: P50 / P99
- Throughput: RPS / DAU
- Доступность: 99.9% / 99.99%?
- Consistency: eventual / strong / read-your-writes?
- Storage: размер / рост
- Стоимость: бюджет
Если не знаешь — спрашивай. Не угадывай.
2. Capacity estimation
Прикинь масштаб:
- Пользователей: ...
- Запросов в секунду peak: ...
- Хранения: ...
- Чтения vs записи (соотношение)
Это влияет на выбор технологий.
3. Главные компоненты
Нарисуй (текстом или ASCII):
Client → CDN → Load Balancer → API Gateway → [Services] → [Data]
↓
Message Queue → Workers
Для каждого:
- Что делает (одно предложение)
- Технология (с обоснованием)
- Scaling-стратегия
4. Модель данных
Главные сущности и связи:
User (1) ── (N) Order (N) ── (N) Product
└── (N) PaymentAttempt
- Реляционная (Postgres)? Документная (Mongo)? KV (Redis)?
- Партиционирование? Шардинг?
- Индексы для главных запросов
5. API-контракты
Главные эндпойнты с примерами:
POST /v1/orders
→ 201 { id, status: "pending" }
→ 400 { error: "validation_failed", fields: {...} }
→ 429 (rate limit)
6. Критичные потоки
Опиши пошагово 2-3 главных сценария:
Создание заказа:
1. Client → POST /v1/orders
2. API validates, checks stock в Redis cache
3. INSERT в orders с status='pending'
4. Publish event 'order.created' в queue
5. Worker обрабатывает: charge payment, обновляет status
6. Webhook клиенту
7. Failure modes
Что произойдёт когда:
- БД упала?
- Очередь забилась?
- Один сервис тормозит?
- Дубль запроса?
- Часовая зона / DST?
Для каждого: что мы делаем (retry, fallback, manual intervention).
8. Эволюция
Что можем сделать позже, а не сейчас:
- Кеш для X
- Шардинг БД
- Отделение write от read
- CQRS / event sourcing
Сейчас — минимально жизнеспособная архитектура. Не over-engineer.
9. Trade-offs
Каждое решение имеет цену. Назови:
- Что выбрали и почему
- Что отвергли и почему
- Где будет больно при росте
10. Документация
После дизайна:
- ADR для каждого важного решения (см. отдельный промт)
- Diagrams (architecture, sequence)
- README с onboarding
Принципы
- Простота > красота. Boring tech > новый язык
- YAGNI. Не закладывайся на 1M пользователей если у нас 100
- "Один тех-долг" разрешён, не больше. Если кладёшь 5 — будет беда
- Все trade-offs должны быть осознанными
Превратить спецификацию фичи в план реализации
Декомпозиция требования на конкретные шаги, файлы, типы и порядок изменений.
Multi-agent: координатор и специалисты
Архитектура из координатора и специализированных агентов: передача контекста, дедупликация, race conditions.
Новый subagent или новый skill: что выбрать
Decision tree: создавать ли отдельного агента или достаточно skill. Критерии — контекст, переиспользование, frequency, complexity.