Развитие без деградации
Версия: 1.0 Дата: 25.04.2026 Статус: Утверждён
Каждое архитектурное решение в vitiana-api-platform работает на развитие платформы, а не на деградацию.
Платформа строится как зрелая глобальная система, не MVP. Заглушки (stubs), временные решения (temporary workarounds), «потом перепишем» (cheap shortcuts), хардкод (hardcoded values), upgradable-later компоненты — запрещены как архитектурный приоритет.
Зафиксировано 25.04.2026.
Главный тезис
«Сейчас одна модель, потом разделим» — это деградация в самом первом документе. Каждое такое упрощение в стартовой архитектуре превращается в дорогое переписывание через 6-12 месяцев. Платформа верхнего уровня не может позволить себе такие переходы — они затрагивают доменную модель, surface contracts, governance.
Решение — зрелая архитектура с фазированной реализацией, где каждая фаза не создаёт долг, а финальная картина зафиксирована в документации с самого начала.
Что считается деградацией (запрещено)
1. Заглушки
- Поле в каноничной модели, которое «пока всегда null».
- Логика, которая возвращает фиксированный ответ «временно».
- Сущность, которая существует только для backward compatibility с одним поставщиком.
- API endpoint, который возвращает заглушку с
not_implemented_yet.
2. Временные решения
- Архитектурный паттерн, выбранный потому что «проще для MVP».
- Storage-решение, которое «пока в одной БД, потом разнесём».
- Захватная интеграция (captive integration), которая «пока завязана на одного поставщика, рефакторим позже».
- Manual reconciliation как штатный путь.
3. Hardcode
- Названия поставщиков в каноничной модели.
- Tenant-specific логика в общем коде.
- Константы как бизнес-правила без явной policy entity.
4. Backward-compatibility долг от старта
- Документ, который описывает «v1 модель и v2 модель», когда v1 ещё не выпущена.
- Дублирование сущностей под разные surface contracts на старте.
- Compatibility shims в самой первой версии canonical schema.
Что разрешено и обязательно
Зрелые решения с фазированной реализацией
Решение может быть реализовано в несколько фаз, если выполнены все четыре условия:
- Конечная архитектура чётко описана в документе.
- Каждая промежуточная фаза не создаёт долг, который нужно потом переписывать.
- Переход между фазами — это расширение, не миграция.
- Триггеры перехода фиксированы в документации (метрические или business signals).
Это не заглушка, а incremental delivery зрелой архитектуры.
Пример приемлемого подхода:
- Фаза 1: один Kubernetes-кластер для всех execution contours.
- Фаза 2: разделение на dedicated clusters per contour.
Это работает, потому что каноничная модель сервисов одна и та же, изменяется только packaging. Никакой код не переписывается.
Пример неприемлемого подхода:
- Фаза 1: shared schema для booking и canonical.
- Фаза 2: «разделим потом».
Это создаёт долг, который повлияет на все домены через схему БД.
Открытые развилки фиксируются явно
Если в документе обнаружено решение, требующее долгого исследования или эскалации, оно не превращается в заглушку. Оно фиксируется как открытая развилка в специальном разделе документа («Открытые вопросы», «Развилки требующие решения») и эскалируется владельцу платформы.
Развилка — это признание неопределённости. Заглушка — это спрятанная неопределённость. Первое допустимо, второе запрещено.
Исключения через явное тезисное обоснование
Временное решение может быть допущено только если выполнены все пять пунктов:
- В документе явно написано, что это временное решение.
- Указана причина (тезисы), почему оно введено.
- Указан конкретный триггер, при котором оно убирается.
- Указан план миграции на зрелое решение.
- Создан follow-up task в системе (или явная отметка в документе для будущей итерации).
Без этих 5 пунктов временное решение не может быть зафиксировано в документе.
Принципы развития vs деградации
Развитие
- Каноничная модель проектируется так, чтобы любое расширение шло через добавление, не через переписывание.
- Surface contracts проектируются так, чтобы новые fields были additive, не breaking.
- Storage layer проектируется так, чтобы добавление storage class было операционным, не архитектурным.
- Eventing проектируется так, чтобы новые event families не ломали consumers.
- Tenancy проектируется так, чтобы добавление нового tenant tier было configuration change, не code change.
Деградация
- «Сейчас одна модель, потом разделим».
- «Сейчас один surface, потом добавим нюансы».
- «Сейчас один storage, потом разнесём».
- «Сейчас события одной формы, потом усилим».
- «Сейчас один tenant tier, потом сделаем enterprise».
Если в документе появляется одна из формулировок «деградации» — он не готов.
Как применять при написании документа
Перед публикацией каждого документа задаю вопросы:
- Содержит ли документ упрощения, которые потом будут переписаны?
- Если содержит — есть ли явный план миграции и триггер?
- Нет ли заглушек, hardcode, captive integrations?
- Является ли документ описанием зрелого решения, реализуемого по фазам, или это MVP-документация?
- Если решение частичное — где зафиксированы открытые развилки и эскалация?
Документ, описывающий MVP без явной финальной архитектуры — переписывается.
Что это означает для существующих документов
При ревью существующих документов нахожу:
- Любые формулировки «MVP scope» / «pilot phase» / «временное решение без плана миграции» — переформулирую.
- Заглушки в схеме данных (если есть) — фиксирую как технический долг слоя приёма данных, не как архитектуру.
- Захватная логика (captive logic) для конкретного поставщика — переношу в supplier capability matrix.
Действия делаю в рамках полномочий главного архитектора, кроме случаев, когда переписывание затрагивает уже зафиксированную несущую логику (см. CLAUDE.md §0).
Связанная документация
- Закон 00000 — платформа главенствует над поставщиками — деградация ради подстройки под поставщика запрещена.
- Современные лучшие практики верхнеуровневых платформ — современные подходы предполагают зрелые решения, не legacy compromises.
- Эластичное масштабирование и упаковка по фазам — фазированная реализация инфраструктуры допустима, потому что финальная архитектура зафиксирована.
- Тезисное обоснование архитектурных решений — исключения для временных решений возможны только с тезисным обоснованием и планом миграции.
- Закон разработки документации платформы — лучшие масштабируемые логики и прослеживание связей.