От MVP к продакшену

Что идёт после MVP, собранного на вайбе

Прототип выкатился, у него появились пользователи — и держится всё на вас одном. Forge — это следующий шаг: выкатка, через которую может пройти любое изменение, в облачном аккаунте, который принадлежит вам, и команда, которая продолжает делать фичи. Вливает изменения человек.

Выкатка, которую можно повторить

Одно декларативное описание на сервис — и он разворачивается в облачном аккаунте, который принадлежит вам: Amazon, Google, Yandex Cloud, Kubernetes или ваши собственные серверы. Ядро, которое это делает, открыто и лежит под лицензией MIT.

Команда, а не промпт

Продакт, архитектор, разработчик, QA и ревьюер доводят тикет до pull request. Каждую передачу между ролями читает управляющий агент и решает, передавать работу дальше или возвращать.

Непроверенное не вливается

Каждое изменение разворачивается на одноразовом стенде с отдельным поддоменом, проверяется живыми запросами и уничтожается. Кнопку merge нажимает человек.

Репозиторий и ключи остаются у вас

Работа, обоснования и вердикты ложатся в ваш git-репозиторий. Весь инструментарий можно развернуть у себя — он открытый, — или взять управляемую версию и подключить свои ключи провайдеров.

Задача

«Работает. Люди пользуются. И между этим всем и падением стою только я».

Задача прототипа — выяснить, нужна ли кому-то вообще эта штука. Пока задача такая, прототипу можно держать пароли в .env, иметь единственный путь выкатки, который работает только с вашего ноутбука, и бэклог, который живёт у вас в голове. Выкатить его именно так было правильным решением — благодаря этому у него и появились пользователи.

Как только пользователи появились, эти три вещи перестают быть сокращением пути. Дальше продукту нужен не код. Ему нужна выкатка, через которую любое изменение проходит без вашего участия; окружение, достаточно похожее на продакшен, чтобы на нём имело смысл проверять; секреты где-нибудь, кроме репозитория; и кто-то, кто продолжает делать следующую фичу, пока всё это приводится в порядок.

Это инженерная функция, и обычно выбор такой: быть ею самому по ночам, нанять сильного инженера, который пока не по карману, или взять fractional CTO на несколько часов в неделю. Forge — четвёртый вариант, и он состоит из двух половин: выкатка, которую вы себе ставите, и команда, которая работает так, как работает команда, — в вашем репозитории, через pull request’ы, с ревью перед тем, как что-то попадёт в main.

Половина про выкатку

Forge выкатывается через sc, Simple Container — то же открытое ядро, которым он выкатывает сам себя.

  • Одно декларативное описание на сервис. Что это, где это работает, что ему нужно. Отдельный самописный конвейер под каждый сервис не нужен.
  • Ваш облачный аккаунт. Разворачивает в Amazon, Google, Yandex Cloud, Kubernetes или на ваших собственных серверах. Аккаунт, данные и счёт остаются вашими.
  • Секреты перестают жить в репозитории. Они лежат в зашифрованном реестре и расшифровываются в момент выкатки: в коммитах нет ничего читаемого, и .env больше не надо никому передавать.
  • Окружение на каждое изменение. Полную копию сервисов можно поднять на отдельном поддомене, проверить и снести — об этом изолированные стенды .
  • Проверять можно не по нашему слову. Лицензия MIT, OpenSSF Best Practices Gold со всеми выполненными критериями, Scorecard 10/10. То, что выкатывает ваш продукт, можно прочитать.

Половина про команду

Знакомая цепочка, но между каждыми двумя шагами стоит валидатор:

От тикета до pull request
Тикетвход
ПродактPMпревращает в требования и критерии
АрхитекторArchitectпроектирует решение
РазработчикDeveloperпишет код и тесты
QAQAвыкатывает и проверяет живыми запросами
РевьюерReviewerревьюит и подписывает
Pull requestвыход

От «направить ассистента на тикет» это отличается прежде всего валидатором на переходах. Каждую передачу читает управляющий агент и решает, должна ли следующая роль её получить. Если нет — работа возвращается с конкретными указаниями, а не уезжает дальше, чтобы стать чужой проблемой.

Второе отличие — всё записано. Результат каждой роли — коммит в ветке прогона, поэтому обоснования, отклонённые попытки и вердикты лежат там же, когда вы открываете pull request. Вы ревьюите не вывод чёрного ящика: видно, как он к нему пришёл, и можно вмешаться посреди прогона, закоммитив исправленную передачу самому.

Третье — вливает человек. Автоматическое влитие есть, включается отдельно и ограничено бюджетом автономии, но по умолчанию кнопку нажимаете вы.

С чего начать

Две вещи, в таком порядке, и ни одна из них не переписывание с нуля:

  1. Один сервис, одно окружение. Опишите то, что у вас уже работает, и выкатите это через sc один раз. После этого выкатка — команда, а не вечер, и окружение на каждое изменение идёт в комплекте.
  2. Один хорошо описанный тикет. Направьте на него цепочку разработки и прочитайте pull request, который она откроет: ветку, коммиты с передачами, вердикты, которые вернули работу назад. Это честная мера того, подходит ли вам такой способ.

Из расплывчатого тикета выйдет расплывчатый pull request: шаг продакта вытаскивает неоднозначность наружу, а не придумывает ответ за вас. Это правильно — но да, сначала она вернётся к вам.

Чем это подтверждается

Самое сильное подтверждение, которое у нас есть, — так собирается сам Forge. Автономный драйвер читает наш роадмап, берёт следующий готовый к работе пункт, запускает на нём эту же цепочку, и полученный pull request вливается в репозитории самой платформы. Сервисы, из которых платформа состоит — control plane, AI-шлюз, рантайм, хранилище, уведомления, — выкатываются тем же ядром sc: в Amazon, а там, где работа должна остаться в России, — в Yandex Cloud.

Эти репозитории закрытые, поэтому мы не будем делать вид, что вы можете пойти и всё проверить сами. Что мы можем — провести вас по реальным прогонам: ветка, коммиты, вердикты, которые вернули работу назад, и те, что подняли вопрос человеку. Это тот же код, который будет работать у вас, и показать лучше его, чем бенчмарк.

Что под капотом

У MVP уже есть пользователи, и держится он на вас одном?

Направьте Forge на тот репозиторий, который у вас уже есть. Первая чистая выкатка и первый pull request скажут больше любой демонстрации.