О студии · кто принимает решения

Инженер за maincode

Решение, контракт и код проходят через одни руки: от границ доменов на диаграмме C4 до миграции, которая доедет до продакшена в пятницу вечером.

Максим Диденко

Технический архитектор · Senior Backend

Занимаюсь системами, в которых учёт должен сходиться: документ, остаток и проводка обязаны рассказывать одну и ту же историю через месяц после закрытия периода. Отсюда и фокус — доменное моделирование, контракты между сервисами и схема базы данных, которую не приходится переписывать при первом же новом типе документа. Пишу на Go, живу в планах запросов PostgreSQL и MS SQL, фиксирую решения в ADR раньше, чем в коде.

  • Go
  • Python
  • PostgreSQL
  • MS SQL Server
  • ClickHouse
  • gRPC
  • GraphQL
  • Kafka
  • Elasticsearch
  • Airflow · ETL
  • CQRS · DWH
  • Docker
  • GitLab CI
  • C4 · ADR
Проекты, где это применялось →
  • Опыт9+ лет в разработке, с 2015 года
  • РольТехнический архитектор / Senior Backend
  • ФокусДоменное моделирование, контракты сервисов, схемы БД и DWH
  • ДоменыERP и документооборот, склад и логистика, финансы, ритейл-аналитика
  • РегионАбакан, Республика Хакасия · работаем удалённо по РФ
  • ЯзыкиРусский · English B1
  • ДоговорИП Диденко Максим Сергеевич · ОГРНИП 324190000021130
  • РезюмеХабр Карьера ↗

Опыт

Проекты, из которых собрана практика

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

  • ERP-платформа Технический архитектор мультиарендной ERP на модульном монолите: 10+ доменных модулей — НСИ, продажи, склад, закупки, финансы, ценообразование, договоры, доставка, документы, IAM. Три монолита и GraphQL-шлюз, единый gRPC-контракт coreerp.v1 почти на два десятка сервисов, 100+ обратимых миграций на Goose, модель C4 уровней L1–L4 и корпус ADR. Ядро документооборота — единая шапка с per-type расширениями, конечный автомат статусов и граф связей «на основании». Разбор проекта →
  • Розничная сеть Движок распределения товара: три пайплайна — прямая логистика с алгоритмом Split, обратная BackLogic с вывозом излишков на склад и Blackbox с жадным перераспределением магазин→магазин по score. Скорость продаж считается на EMA со сглаживанием выбросов, потребность — с сезонностью и страховым запасом, снимок метрик привязан к JobId, чтобы результат разбивки можно было воспроизвести. Заказчиков мы не называем — ни в одном проекте. Разбор проекта →
  • Логистика Автоматизация логистических операций на восьми масштабируемых микросервисах за централизованным API-шлюзом: время обработки ключевых процессов сокращено с 16+ часов до 9 минут. Go на бэкенде, Nuxt 3 с TypeScript и Handsontable в операторском интерфейсе, MS SQL Server с версионированными миграциями, централизованное логирование Vector → Elasticsearch, LDAP и JWT, сборки в GitLab CI. Разбор проекта →
  • Аутсорсинг Два разных контура. Для онкологического исследовательского центра в США — учёт грантов и финансовых потоков, данные лабораторных исследований и регламентированный учёт препаратов; все расчёты вынесены на уровень базы данных, потому что результат должен воспроизводиться независимо от приложения, которое его запросило. Для крупного банка — интеграционное решение в Murex с преобразованием MxML → FIXML.
  • Игровой холдинг Хранилище данных на MS SQL, PostgreSQL и ClickHouse, миграция ETL с SSIS на Apache Airflow, последовательный переход DWH на PostgreSQL и затем на ClickHouse под аналитические профили нагрузки. Проводили PoC Arenadata Hyperwave и Visiology v3 — по итогам сравнения выбрали FineBI, и это тот случай, когда полезнее оказался не выбранный инструмент, а зафиксированные критерии выбора.
  • Интеграция данных Отказоустойчивая интеграция пяти баз данных и полный цикл внедрения Airflow — от настройки окружения до динамических DAG, которые генерируются из конфигурации, а не копируются руками при появлении шестого источника.
  • ОЦО холдинга Руководство отделом из трёх человек и обучение коллег T-SQL. Опыт, из которого выросло рабочее правило: архитектурное решение живёт ровно столько, сколько его понимает команда, — поэтому объяснение решения входит в работу наравне с самим решением.
9+ летв разработке, с 2015 года
10+доменных модулей в ERP-платформе
8микросервисов за одним API-шлюзом
3пайплайна распределения товара

Во что мы верим

Пять правил, которые дороже любой технологии

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

Решение фиксируется до кода

Границы модулей, контракт и модель данных сначала описываются, потом реализуются. У каждого значимого выбора появляется ADR: контекст, варианты, решение, последствия. Через год именно последний раздел отвечает на вопрос «почему тут так», когда автора рядом нет.

C4 L1–L4 · ADR · схемы в репозитории

Зрелые инструменты без погони за хайпом

Go, PostgreSQL, Kafka, Elasticsearch — не потому, что модно, а потому, что у них предсказуемое поведение под нагрузкой, понятная эксплуатация и большой рынок инженеров. Новый инструмент попадает в проект, только если старый упирается в измеримое ограничение, а не в скуку.

критерий выбора важнее самого выбора

Модульный монолит, пока домен не потребует иного

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

границы — обязательны, распределённость — по показаниям

Код и документация принадлежат заказчику

Репозиторий и инфраструктура заводятся на вашей стороне с первого дня, исключительные права передаются по договору. Никаких «лицензий на платформу», закрытых сборок и мест, где без нас не разобраться: документация пишется по ходу работы, а не собирается задним числом при передаче.

передача проекта — дни, а не месяцы

Альтернативы разбираются честно

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

рассмотренные варианты — часть поставки

Стек

Чем работаем на практике

Перечислено то, что уже стояло в продакшене или проходило проверку в PoC на реальных данных. Стек — следствие задач, а не наоборот: под чужую систему берём её инструменты, под новую выбираем то, что вы сможете эксплуатировать.

Языки и рантайм

  • Go 1.26
  • Python
  • TypeScript
  • Nuxt 3
  • T-SQL
  • PL/pgSQL
  • React
  • PHP

API и контракты

  • gRPC
  • Protocol Buffers
  • buf
  • GraphQL
  • gqlgen
  • DataLoader
  • REST
  • FIXML · MxML

Данные

  • PostgreSQL 16
  • MS SQL Server
  • ClickHouse
  • Elasticsearch
  • Goose
  • Шардирование
  • Индексы и планы

DWH, ETL и аналитика

  • Apache Airflow
  • Динамические DAG
  • SSIS → Airflow
  • FineBI
  • Visiology v3
  • Arenadata Hyperwave
  • excelize

События и очереди

  • Kafka
  • Транзакционный Outbox
  • CQRS
  • Read-модели
  • Идемпотентность
  • Журнал обмена

Инфраструктура и CI/CD

  • Docker
  • Docker Compose
  • GitLab CI
  • Обратимые миграции
  • go:embed
  • nginx
  • Apache

Наблюдаемость

  • Vector → Elasticsearch
  • Метрики
  • Трейсинг
  • Дедлайны и таймауты
  • Алерты по обмену

Безопасность

  • LDAP
  • JWT
  • IAM и роли
  • Мультиарендность
  • Root CA · X.509
  • NDA по запросу

Публикации

Что можно прочитать до разговора

Публичных материалов немного и они честно старые — большая часть работы закрыта NDA. Зато по ним видно манеру: разбор механизма по шагам, а не пересказ документации.

  • Habr «From Root CA to User Authorization in nginx+apache. Part 1» ↗ — статья 2017 года о том, как выстроить цепочку от собственного корневого центра сертификации до авторизации пользователя по клиентскому сертификату на связке nginx и Apache.
  • Резюме Профиль на Хабр Карьере ↗ — полный список проектов, ролей и технологий, с которыми довелось работать. Там же удобно проверить, совпадает ли наш опыт с вашей задачей.

Как устроена студия

Почему «мы», если решения принимает один человек

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

«Мы» — это форма работы, а не приписанные сотрудники

Архитектуру, контракты, схему данных и код-ревью ведёт один человек — Максим Диденко. Вы всегда разговариваете с тем, кто принимает решения: между вашей задачей и кодом нет менеджерского слоя, который переводит одно в другое с потерями.

Подрядчики подключаются на реализацию

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

Единственная точка отказа — сам архитектор

Это лечится не обещаниями, а артефактами. Репозиторий ваш с первого дня, модель C4 и ADR пишутся по ходу работы, миграции обратимы, сборка описана в CI. Передача проекта другому Go-разработчику занимает дни — ровно ради этого решения и фиксируются письменно.

Откуда название

Мейн-кун, который стал доменным именем

naming

Студия названа в честь кота породы мейн-кун: Maine Coon → maincode. Совпадение оказалось удачным — main + code читается ровно как то, чем мы занимаемся: основной код системы, тот самый, который потом годами меняют другие люди. Мейн-куны, к слову, тоже растут медленно и до конца формируются годам к четырём, что довольно точно описывает жизненный цикл учётной системы.

maincodeMaine Coon → maincode 🐾

Куда дальше

Если хотите проверить нас по делу

Контакты

Опишите задачу — отвечу лично, без отдела продаж

Достаточно пары абзацев: что за система, что в ней сейчас болит и к какому сроку нужен результат. Вернёмся с трактовкой задачи, рисками и вариантом решения. maincode — инженерная студия ИП Диденко М. С.