STIT·AI-driven engineering systemRU/EN

Мы научили ИИнашей инженернойдисциплине

Скорость выросла в разы.
Качество впервые перестало зависеть от конкретного исполнителя

аналитика·архитектура·бэкенд·инфраструктура
02/16problem

Без процесса AI не ускоряет Он усиливает то, что уже сломано

До AI слабый процесс просто медленно выпускал legacy. С AI: то же самое, в десять раз быстрее. Время до релиза, надёжность, понимание собственной системы — всё это держится не на инструментах, а на повторяемости

→ это не закон отрасли. Это отсутствие повторяемого процесса
3 оси, на которых ломается каждый проект
время6 месяцев

От старта до устойчивого production: TLS, секреты, мониторинг, бэкапы, авторизация, дашборды. Каждый раз заново, каждым новым составом

люди1 инженер

Держит в голове, как система связана. Уходит — продукт встаёт. Документация устаревает быстрее, чем пишется

AI-иллюзия10× кода

Но никто не проверяет, повторяет ли он архитектуру и безопасность команды. Скорость генерации не равна скорости поставки

03/16как это устроено

AI работает так, как работает лучший из нас — потому что именно так мы его научили

За годы практики у нас выкристаллизовался свой способ строить production-софт: архитектурные принципы, ритуалы code review, регламенты инцидентов, способы отделять стабильное от черновика. Мы это не держим в головах. Мы это оцифровали. AI наследует этот слой

01опыт → правило

Каждое выработанное инженерное решение фиксируется как правило в репозитории, а не в чьей-то памяти и не в Notion-документе, который никто не открывает

02правило → проверка

Каждое правило получает машинную проверку: hooks, gates, ограничения ролей агентов. Решения превращаются в систему, которая работает сама, без напоминаний

03проверка → AI

AI работает поверх этого слоя. Он наследует процессы как новый сотрудник наследует культуру команды. Но без обучения, без забывчивости, без отклонений в сторону

↳ партнёрам — оцифровываем их инженерную культуру тем же способом
04/16ecosystem

4 опоры Одна фабрика

Каждый блок отвечает за свою зону. Контракты между ними — явные. Любую часть можно показать аудитору, форкнуть клиенту, передать новой команде, не теряя контекста

stit/infra
Платформа

Наша корпоративная платформа. Единые SSO, секреты, регистр образов, сквозная наблюдаемость. К ней подключается каждый клиентский проект без отдельной настройки

edge · SSO · vault · registry · observability · multi-tenant
project-infra-template
Проектная инфраструктура

Стандартный пакет инфраструктуры под клиента: контейнеры, конфигурация, бэкапы, мониторинг, восстановление. Разворачивается одной командой

docker-compose · ansible · daily backup · DR runbook
go-backend-template
Бэкенд-фабрика

Шаблон бэкенда с архитектурными артефактами под кодогенерацию. Безопасность, наблюдаемость, аудит — встроены. ИИ собирает домен по утверждённому документу

DDD-артефакты · doc → code mapping · встроенный аудит и метрики
golibinfra
Инженерные блоки

Готовые компоненты бэкенда: транзакционный outbox, audit-log, идемпотентность, защита от перебора, метрики, кэш, JWT. Базис, на котором собирается домен

outbox · audit · idempotency · brute-force guard · metrics · JWT
платформапроектная инфрабэкенд-фабрикаинженерные блоки
в работе: дизайн-система · фронтенд-шаблон с тем же контуром артефактов

2 режима развёртывания

Архитектуру подбираем под задачу. Шаблоны, артефакты и контроль качества — одни и те же

01
один сервер
Single-node на VPS

Docker Compose, одна машина. Быстрый запуск, низкая стоимость эксплуатации, простой DR. Подходит для MVP, средних нагрузок, изолированных корпоративных контуров

Docker·Compose·Ansible·Traefik
02
распределённая система
Кластер на Kubernetes

Горизонтальный масштаб, multi-region, высокие нагрузки. Шины событий, OLAP-аналитика, оркестрация долгих процессов. Для нагруженных и распределённых продуктов

Kubernetes·Helm·Argo CD·Kafka·ScyllaDB·ClickHouse·gRPC·Temporal
05/16что в коробке · день первый

С первого дня — то, что обычно строят к полугоду

Безопасность, наблюдаемость, восстановление — встроены в шаблон. Они не строятся заново на каждом проекте. Один раз продумано, задокументировано, проверено в боевой эксплуатации

TLS, защита от перебора, WAF на периметре+2 нед
Хранилище секретов: никаких ключей в репозитории+2 нед
Сквозная наблюдаемость: метрики, логи, трейсы+1 мес
Алерты на технические и бизнес-аномалии, доставка в мобильное приложение+2 нед
Готовые панели в Grafana+3 мес
Авторизация: JWT, Argon2id, защита от перебора+2 мес
Обнаружение повторного использования токенов+2 нед
Журнал аудита, корректируемый только дозаписью+2 нед
Транзакционный outbox для событий+1 мес
Ежедневные бэкапы + квартальные учения восстановления+1 мес
SSO для административных интерфейсов+2 нед
Готовые HTTP-обвязки: rate-limit, CSP, идемпотентность+2 нед
Изоляция между клиентами, заложенная в инфраструктуру+1 мес

→ итого сэкономлено·~6 месяцев·календарного времени

06/16аналитика домена

Сначала разбираем бизнес на атомы Потом пишем код

Прежде чем писать код, мы разбираем стратегию и бизнес-процессы партнёра четырьмя проверенными методологиями. Каждая показывает домен с разной стороны: гипотезы, опыт пользователя, срез MVP, событийная модель. На выходе — артефакты, из которых приложение вытекает как следствие, а не появляется по интуиции

01
Карта гипотез
что даёт

Дерево от бизнес-метрики до конкретной фичи. Каждая ветка — проверяемая гипотеза о поведении пользователя

что закрывает

«фичу делаем, потому что попросили»: без связи со стратегией и метрикой

02
Карта процесса-опыта
что даёт

Полный путь пользователя через процессы компании, наложенный на backstage-системы и точки боли

что закрывает

фокус на одну фичу без понимания, что вокруг неё ломается

03
Карта реализации историй
что даёт

Двумерная карта: путь пользователя × глубина реализации. Из неё нарезается MVP и следующие итерации

что закрывает

«всё нужно сразу и идеально»: нет среза, который можно выпустить первым

04
Event Storming
Alberto Brandolini
что даёт

Совместное моделирование с командой партнёра: события домена, команды, агрегаты, политики. Сразу маппится в наши docs/domains/ шаблоны

что закрывает

разрыв между «как бизнес мыслит» и «как описано в коде»: словарь общий с первой встречи

↳ артефакты аналитики становятся входом в наш markdown-шаблон. Что происходит дальше: прямо в следующей секции
07/16контур: артефакт → код

Один артефакт — 6 слоёв кода

Артефакты аналитики переезжают в единый формат markdown. По утверждённому документу ИИ собирает все слои реализации, одинаково на любом проекте. Пока документ не утверждён, сборка не запускается: status: draft — стоп

docs/domains/user/user.aggregate.md
OK
validate-domain-doc.sh
/add-domain skill
OK
depguard · CI-gate
Перед сборкой автоматически проверяется: документ утверждён, ссылки между артефактами целостные, обязательные разделы заполнены. Если нет — сборка останавливается до правки. Соответствие не на дисциплине разработчика, а в системе
маппинг секций → Go-конструкций зафиксирован в одном документе · MAPPING.md
08/165 уровней контроля

От советов к блокировкам

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

01
совет
риск
«забыл правило»
Общие правила репозитория подгружаются в каждое задание автоматически. Помнить не нужно: они уже в контексте
02
контекст
риск
«не знал, что в этой зоне свои правила»
При работе на конкретном участке — инфраструктура, безопасность, домен — специфичные правила подключаются сами
03
процедура
риск
«пропустил обязательный шаг»
Новый домен начинается с проверки утверждённого документа. Шаги фиксированы: обойти порядок нельзя
04
роль
риск
«вышел за пределы полномочий»
Ревьюер получает только инструменты чтения. Редактировать код физически не может, даже если бы захотел
05
блокировка
риск
«пошёл в обход сознательно»
Деплой без прошедших тестов, незакреплённая версия контейнера, секрет в коммите — не пройдут. Останавливается на уровне инструмента
«Инструкции — это совет. Блокировки — это гарантия выполнения»
— стандарт Anthropic, закреплённый в нашем рабочем процессе
09/16безопасность · 8 слоёв

8 слоёв — каждый закрывает свой класс атак

Не «потом, когда дойдут руки». Каждый слой — известный способ атаки и встроенный в шаблон ответ. Всё уже работает на момент первого деплоя

01
Сервер
атака
дыры в системных пакетах, нелегитимный root-процесс
защита

Автоматические обновления безопасности, точное время для логов, лимиты ядра. Базовая закалка хоста — из коробки

02
Доступ
атака
перебор паролей по SSH
защита

Вход только по ключам. После 5 неудачных попыток — бан на час. Пароли не отключаются, пока ключи не настроены. Никто не остаётся снаружи

03
Периметр
атака
бот-трафик, сканеры уязвимостей, перехват по HTTP
защита

Веб-фаервол с готовыми наборами правил. Обязательный HTTPS, современный TLS, преднастроенный HSTS. Шумный трафик режется на краю

04
Контейнеры
атака
подмена образа в реестре, выход из песочницы
защита

Версии образов закреплены до хэша. Обновление только осознанным действием. Файловая система — только на чтение, где это возможно. Базы данных недоступны из публичной сети

05
HTTP-слой
атака
переполнение запросами, повторная отправка платежей
защита

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

06
Авторизация
атака
подмена алгоритма токена, кража refresh-токена
защита

Жёсткая проверка алгоритма при каждом входе. Стойкое хэширование паролей. Повторное использование refresh — мгновенная блокировка сессии и событие в аудит

07
Секреты
атака
утечка ключа через репозиторий или логи команд
защита

Централизованное хранилище. Доступ разграничен по проекту и окружению. Чужой проект — отказ на уровне политики, не дисциплины

08
Аудит
атака
подчистка следов после взлома
защита

Журнал, в который нельзя ничего удалить или изменить — только дозаписать. Корреляция с трейсами и идентификаторами запросов

10/16наблюдаемость · с первого деплоя

Наблюдаемость — готовый дашборд, не отдельный проект

Метрики, логи и трейсы собираются автоматически, при подключении модулей. Бизнес-показатели лежат на тех же панелях, что и инфраструктурные. Никаких отдельных недель разработки наблюдаемости

grafana.stit.tech / dashboards / Apps · Service Overview
HTTP RPS
http_requests_total
+12%
178req/s
HTTP p95 latency
http_server_duration_seconds
88ms
DB pool · active
db_pool_connections{state=active}
16/ 30
Outbox lag
outbox_lag_seconds{subject=*}
0.60s
biz_user_registered_total
business · конвенция bizmetric
+8%
21/min
auth_refresh_reused_total
security · audit event
0event
алерты
На любые инциденты — технические и бизнес-аномалии

Не только CPU и диск. Падение конверсии, рост ошибок, отклонение бизнес-показателя от baseline — настраиваем под ваши метрики и пороги. Каждый алерт идёт с контекстом: что произошло, в каком сервисе, какой запрос

канал доставки
Мобильное приложение для команды клиента

Не Slack и не e-mail. Алерты приходят push-уведомлением на телефон, мгновенно, с деталями инцидента. Доступ — для тех, кому реально нужно: инженеры, операционка, бизнес-стейкхолдеры. Часть нашего инфраструктурного сервиса

↳ панель имитирована для презентации. На реальном проекте показатели живые с первой минуты деплоя, без правки кода приложения
11/16изоляция клиентов

Изоляция криптографией, а не дисциплиной

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

project AOTLP + BearerTraefikedgetenant-authGo · 95 LOCotel-collectorrouting connectorVictoriaMetricsaccountIDLokiX-Scope-OrgIDTempoX-Scope-OrgID
01
Маршрутизация
попытка
запрос приходит без токена клиента
что произойдёт
На периметре каждый пакет получает токен клиента. Без токена или с чужим запрос разворачивается ещё до прикладного слоя
02
Приёмник
попытка
в теле запроса прописан чужой ID
что произойдёт
На входе в хранилища: повторная проверка соответствия токена и заявленного клиента. Подмена в теле запроса игнорируется
03
Хранилище
попытка
запрос «выдай данные клиента X»
что произойдёт
Данные разделены на уровне самих баз. Прочитать другого клиента физически невозможно. Нет даже теоретического запроса, который дал бы доступ
12/16на что обратит внимание CTO

12 решений — каждое закрывает свой класс ошибок

Не маркетинг — каждое решение реально существует в коде, проверяется за минуту: открыть репозиторий, найти строку. Архитектура, документация, шаблоны, качество, выпуск, AI. Без размытых обещаний

01архитектура
DDD + гексагональная — на каждом проекте одинаково

Внутренний домен не знает ни про Postgres, ни про HTTP, ни про очередь, только про интерфейсы. Замена storage-слоя — две папки. Это не «на крупных проектах потом», это default на день первый

класс ошибок, который закрыт
решение в одном модуле утекло на всю систему
02архитектура
Один документ домена → 6 файлов кода

Маппинг разделов markdown в Go-конструкции зафиксирован в одном документе. Property → метод-геттер; emitted event → публикация в outbox в той же транзакции. Команды собирают код по одинаковым правилам

класс ошибок, который закрыт
два разработчика по-разному поняли одни требования
03архитектура
Документация ведёт код, а не догоняет — это держит AI в узде

Любое изменение начинается с обновления markdown-документа: бизнес-логика, API, инфраструктурный сервис. status:draft блокирует сборку, отсутствующий раздел блокирует skill. AI физически не может выйти за границы описания. Документация задаёт ему контракт. Через год после релиза она по-прежнему отражает текущее состояние

класс ошибок, который закрыт
документация отстала: никто не помнит, как это работает
04архитектура
17 kit-пакетов как явные контракты

audit · outbox · brute-force · http · auth · observability — каждый kit приносит свою схему миграций, свои метрики, свой fx-модуль. Это не «утилиты», это инфраструктурные контракты с границами

класс ошибок, который закрыт
каждый сервис по-своему пишет аудит, метрики, outbox
05шаблоны
7 типов доменных шаблонов с обязательными разделами

aggregate · entity · event · use-case · policy · value-object · context-readme. У каждого жёсткий frontmatter, обязательные разделы, валидируемая ссылочная целостность между документами

класс ошибок, который закрыт
забыли инвариант, список событий или правила доступа
06шаблоны
1 сервис = 1 compose-фрагмент + готовый k8s-манифест

Один и тот же сервис описан в двух форматах: compose — для single-VPS-старта (день первый, низкая стоимость); Helm-чарт — для масштаба, когда нужна горизонтальная отказоустойчивость. Переход не требует переписывания приложения

класс ошибок, который закрыт
переезд на k8s = переписывание приложения с нуля
07качество
TDD как режим работы по умолчанию · coverage-gate в CI

Любой код — бизнес-логика, инфраструктурные обёртки, утилиты — пишется test-first: сначала проверяемый контракт, потом реализация. PR без тестов или с понижением покрытия не пройдёт CI. Интеграционные тесты бьются по реальным Postgres / NATS / Redis в контейнерах, не по мокам

класс ошибок, который закрыт
регрессия проскочила в прод, потому что «потом протестируем»
08качество
Жёсткий linter-стек + depguard блокирует нарушение границ

golangci-lint в strict-режиме с 30+ checker'ов. depguard декларативно запрещает импорты вне доменных границ: внутренний домен не может тянуть инфраструктурный пакет, репозиторий не может звать handler. Слои архитектуры не могут «случайно» переплестись. CI не пропустит

класс ошибок, который закрыт
слои архитектуры медленно слипаются, через год рефакторинг невозможен
09выпуск
Multi-stage CI/CD: lint → test → security scan → build → deploy

Каждый этап — блокирующий гейт. Failed lint: нет тестов. Failed test: нет билда. Найденная уязвимость в зависимостях: нет деплоя. Ни один этап не «можно пропустить, если очень надо»

класс ошибок, который закрыт
влили код, не прошедший проверку, потому что «срочно»
10выпуск
Полный цикл dev / staging / prod · изоляция между окружениями

Каждое окружение — отдельный compose-стек, отдельные секреты в Vault, отдельные БД, отдельный домен. Прод физически недоступен из dev: сетевого пути нет. Тестовые данные не утекают в продакшн ни прямо, ни косвенно

класс ошибок, который закрыт
разработчик случайно подключился к проду в тестовой команде
11выпуск
Production deploy: approve от ответственных + auto-rollback

Выкатка в прод требует явного approve от назначенных reviewer'ов в PR. После деплоя health check мониторится N секунд. Если не зеленеет, происходит автоматический откат к предыдущей версии без участия человека

класс ошибок, который закрыт
бракованный релиз остался в проде, пока кто-то не заметил
12AI
12 procedural skills + reviewer-subagent без write-tools

/add-domain, /add-endpoint, smartdev: пошаговые процедуры с предусловиями, не «промпты». Reviewer получает только инструменты чтения. Edit/Write физически отсутствуют. Агент не «творец», а исполнитель воспроизводимого скрипта

класс ошибок, который закрыт
AI «творчески» переписал то, что должен был только проверить
13/16ответы на сложные вопросы

Вопросы, которые нам зададут первыми

01возражениеAI непредсказуем — что-то да сломает+
Поэтому ИИ у нас работает не сам по себе. Пять уровней контроля: правила, контекст, процедуры, ограниченные роли, блокировки. Инструкция — это совет; блокировка — гарантия выполнения
02возражениеШаблон — это велосипед, у нас уникальные требования+
Шаблон закрывает только инфраструктуру. А у неё у всех одинаковые требования: секреты, аудит, метрики, восстановление. Уникальная бизнес-логика остаётся вашей и пишется в отдельных модулях
03возражениеНе получится ли привязка к экосистеме STIT?+
Все компоненты — отраслевой open-source: Postgres, OpenTelemetry, Grafana, Vault, Traefik и другие. Наше — тонкие обёртки и небольшой собственный сервис изоляции. Покинуть нас можно в любой момент
04возражениеЧто, если STIT исчезнет?+
Передаём весь технологический контур целиком: репозитории, документацию, артефакты. Документация для ИИ читается людьми так же легко. Любая команда продолжит работу с того же места
05возражениеИИ может «придумать» что попало+
Перед сборкой автоматически проверяется целостность артефактов и обязательные разделы. Импорты между модулями ограничены. В сборке — десять статических проверок. Роль ревьюера не имеет права редактировать код
06возражениеГде доказательства, что это правда работает?+
Живые репозитории. Развёрнутый корпоративный стек, на котором всё реально эксплуатируется. Архитектурные решения с trade-offs задокументированы. Открываем под NDA
14/16живое демо

8 эпизодов живого показа

Полный показ — 30 минут с ведущим. Не слайды: реальные команды на живой инфраструктуре. Под NDA открываем корпоративный стек и референс-проекты

01≈2 мин
git push → production
что увидите

Pipeline в Gitea: lint → test → security scan → build → deploy → health check, все зелёные. Версия в /health поменялась за время одного кофе

доказывает

«Деплой» — это не event с пятью людьми на телефонах, а кнопка

02≈3 мин
Markdown → 6 файлов production-Go
что увидите

Открываем docs/domains/user/aggregate.md, запускаем /add-domain: появляются entity.go, usecase.go, events.go, policy.go, repository.go, handler.go. Все компилируются, тесты на месте

доказывает

AI не «подсказывает». AI исполняет фиксированную процедуру по утверждённому документу

03≈2 мин
Live-ревью PR через reviewer-субагент
что увидите

Открываем PR, делегируем reviewer-агенту. Он читает diff, выкладывает комментарии. На попытку «давай поправлю» следует отказ инструмента: Edit/Write физически отсутствуют в его наборе

доказывает

Ревьюер не может «исправить» вместо «прокомментировать». Обзор остаётся обзором

04≈2 мин
Один HTTP-запрос → полный путь в Tempo
что увидите

POST в API → trace появляется в Tempo. Цепочка: handler → БД (pgx) → outbox → NATS → consumer → внешний HTTP. Один trace_id, ни одного разрыва, видно длительность каждого шага

доказывает

«Где упало?» — за один клик в дашборде, а не за полчаса в логах

05≈2 мин
Подмена tenant_id → отказ на трёх уровнях
что увидите

Меняем X-Tenant-ID в curl-запросе → отказ на периметре. Меняем в теле запроса: отказ на входе в хранилище. Запрос в БД мимо приёмника: данных в выдаче нет

доказывает

«Один баг = утечка всех клиентов» — физически невозможно: нужно сломать три проверки одновременно

06≈1 мин
Refresh-токен дважды → блокировка сессии
что увидите

Используем refresh, получаем новую пару. Используем тот же refresh ещё раз: сессия убита мгновенно, в audit_log запись refresh_reused, у пользователя logout на всех устройствах

доказывает

«У нас украли токен» — детектится за секунду, а не за неделю

07≈1 мин
Деплой в прод без approve → стоп на гейте
что увидите

Запускаем production-deploy с PR без подтверждения от назначенных reviewer'ов, и pipeline останавливается на approval-gate, ответственным уходит уведомление. После approve выкатка идёт автоматически

доказывает

«Случайный релиз» в продакшн — невозможен ни технически, ни организационно

08≈5 мин
Удалили БД → восстановились из бэкапа
что увидите

На staging Postgres делаем DROP DATABASE → запускаем процедуру восстановления → restic поднимает последний бэкап → проверка целостности → /health зелёный. Замеряем RPO и RTO в реальном времени

доказывает

DR — не «есть бумага, на которой написано», а измеримая операция с известным временем

15/16формат сотрудничества

Мы становимся вашим инженерным контуром

Не разовый проект. Долгосрочное партнёрство, в котором мы берём на себя четыре зоны ответственности и работаем в логике вашего бизнеса

партнёрство
4 зоны
01
Инфраструктура
Берём на себя корпоративную платформу: безопасность, наблюдаемость, восстановление, единый вход. Эксплуатируем сами. Вам не нужно нанимать DevOps
02
Оцифровка процессов
Описываем ваши бизнес-процессы в едином формате артефактов. По ним собирается система, обучается команда, контролируется качество
03
Поиск точек автоматизации
Регулярно анализируем, где автоматизация даст ощутимый результат. Не разовая постановка ТЗ, а постоянная работа в логике ROI
04
Разработка софта
Бэкенд, дизайн, фронтенд собираются по нашей методологии. Качество и скорость остаются предсказуемыми независимо от роста команды
или
разовая работа
Разработка под ключ
Если нужен только продукт, без долгосрочного партнёрства. Закрываем задачу по нашей методологии, фиксируем результат, передаём документацию и репозитории команде клиента
16/16·обсудим проект

Без воронки
Без менеджеров

Коротко о задаче в Telegram. Отвечаем сами. Если задача в нашей экспертизе, договоримся о встрече. Если нет — скажем честно

промышленный стек, эксплуатируемый нашей командой
Go·TypeScript·React·Next.js·PostgreSQL·ScyllaDB·ClickHouse·Redis·MinIO·NATS·Kafka·gRPC·Temporal·Docker·Kubernetes·Helm·Argo CD·Ansible·Traefik·Vault·Authentik·Gitea·CrowdSec·OpenTelemetry·Grafana·VictoriaMetrics·Loki·Tempo·Alertmanager·Restic
Мы берём на себя эксплуатацию всего технологического контура. Вам не нужно нанимать команду DevOps. Это часть партнёрства
STIT · b2b outsource · since 2022stit.tech