ООО «Творческое Образование» — Старший разработчик, системный аналитик
Август 2024 — настоящее время
Краснодар, удалённо. Федеральные сети онлайн и офлайн школ. Главный разработчик на проектах. grafika-art-school.ru/franchise (GRAFIKA) и arttech-school.ru/franchise (ArtTech)
Рост внутри компании
- 2024 — пришёл бэкенд-разработчиком: архитектура БД и серверная часть платформы, которую делали с нуля.
- 2025 — повышен до старшего разработчика и закрыл выпавшую роль системного аналитика. С этого момента официально совмещаю две штатные должности — старший разработчик и системный аналитик, каждая со своей зарплатой.
- 2026 — зона ответственности расширена на backend, frontend, DevOps, QA, архитектуру и системную аналитику, включая поддержку проектов смежных отделов на других языках.
Платформу для студентов, преподавателей, менеджеров, руководителей и партнёров делаем с нуля: веб-версия, приложения для Android и iPhone, Telegram-бот. По сути это CRM/ERP сети школ: расписания и залы, абонементы и финансы, роли и права, отчётность — семь типов пользователей со своими правами и интерфейсами. В команде backend- и frontend-разработчики, DevOps, системные аналитики, PM и QA. Я проектирую архитектуру БД и бэкенда, пишу серверную часть, помогаю аналитикам с ТЗ, а фронтендерам с отладкой и оптимизацией запросов.
Масштаб системы
2 федеральные сети из одной кодовой базы4 клиента: веб, Android, iOS, Telegram7 ролей пользователей~40 таблиц в PostgreSQL~90 версионных миграций120+ REST-эндпоинтов20+ доменных роутеров~30 тыс. строк бэкенда~80 тыс. строк фронтенда30+ экранов интерфейсаДесятки городов в разных таймзонах
Цель Запустить платформу для федеральной сети школ и довести её до продакшна.
Действие Спроектировал архитектуру БД и бэкенда, реализовал серверную часть веба и приложений. Стек выбрал полностью асинхронный (FastAPI, SQLAlchemy 2.0 async, asyncpg), схему БД — под версионные миграции Alembic, чтобы структура менялась без простоя и без ручных правок на проде. Написал скрипты загрузки и миграции данных.
Результат Вывели продукт в продакшн. Через мои скрипты в систему заведено около 5 000 студентов, которые активно пользуются приложением.
Цель Поддержать сложную логику абонементов и расписаний для разных городов и таймзон.
Действие Сделал конструктор абонементов (направления со своими лимитами или безлимитом), запись и отмену занятий, заморозки, приостановки, трансферы, присутствие студента сразу в нескольких школах, учёт десятков городов в разных таймзонах.
Результат Бэкенд сам корректно отрабатывает эти случаи, ручных операций стало заметно меньше.
Цель Дать живую связь с пользователями.
Действие Построил систему массовых и индивидуальных push-уведомлений на Socket.IO с Redis в роли брокера — realtime масштабируется горизонтально, несколькими процессами за балансировщиком, а не одним «толстым» воркером. Онлайн-сессии и присутствие держу в Redis, доступ — по JWT с асимметричной RSA-подписью (приватный ключ не покидает эмитента, остальные сервисы проверяют токен публичным). Добавил отложенные рассылки по расписаниям и событиям, с генерацией текста по шаблонам и учётом таймзон.
Результат Школы разных городов получают уведомления вовремя, история сообщений сохраняется.
Цель Дать прозрачность обучения и обратную связь, упростить контроль для управляющей компании и партнёров.
Действие Сделал оценку занятий (рейтинги и отзывы), хранение и показ истории действий студента в его профиле, а также инструменты отчётности, рейтингов и контроля для сотрудников управляющей компании, партнёров и школ.
Результат Активность и качество занятий видны в одном месте — решения принимаются по данным, а не на глаз.
Цель Масштабировать продукт на две федеральные сети (GRAFIKA и ArtTech) и подготовить выход за рубеж.
Действие Перестроил архитектуру, расширил и местами переписал логику, структуры моделей и таблиц с сохранением данных тысяч пользователей из множества связанных таблиц. Заложил особенности дизайна и логики под каждую компанию.
Результат Одно приложение работает на две федеральные сети (GRAFIKA и ArtTech) в РФ, начата подготовка к запуску в других странах.
2026. Принял на себя backend, frontend, DevOps, QA, архитектуру и системную аналитику, в том числе поддержку проектов на других языках из смежных отделов. Теперь отвечаю практически за всё, что связано с разработкой ПО в компании — от схемы БД до выкладки на прод и процесса, по которому работает команда.
Цель Сделать качество проверяемым, а выкладку — предсказуемой, когда за разработку отвечает один человек.
Действие Выстроил тестовую инфраструктуру на обоих проектах: pytest + pytest-asyncio + httpx на бэкенде, vitest (unit) и Playwright (e2e) на фронтенде — сквозные сценарии прогоняются отдельно по каждой роли и отдельно в мобильных раскладках, UI-компоненты вынесены в Storybook. Взял на себя CI/CD в GitLab: сборка образов → линтеры → тесты с замером покрытия → выкладка на удалённые хосты через Docker-контексты → миграции → уведомление в Telegram. Развёл окружения (тест, прод GRAFIKA, прод ArtTech) и перевёл релизы на SemVer-теги от main, чтобы каждая версия на проде была однозначно сопоставима с коммитом.
Результат Выкладка стала операцией, а не ритуалом: пайплайн сам не пустит на прод код, не прошедший линтеры и тесты, а откат — это возврат на предыдущий тег.
Цель Не дать двум брендам разъехаться в две несовместимые кодовые базы.
Действие Оставил один бэкенд и один фронтенд-бандл на обе сети: бренд определяется доменом и флагом сборки, а различия в логике, правах и оформлении вынесены в конфигурацию, а не в форк. Фронтенд организовал по Feature-Sliced Design (слои app / pages / widgets / features / entities / shared) — границы между доменами явные, и правка одного модуля не тянет за собой соседние.
Результат Новая фича выходит сразу на обе сети, а не пишется дважды; расхождения между брендами остаются на уровне настроек.
Цель Ускорить разработку и держать единое качество кода, когда над проектом работают разные ИИ-ассистенты и агенты.
Действие Внедрил собственный процесс ИИ-ассистированной разработки: единый свод правил для всех агентов (один источник истины плюс 11 скиллов-дисциплин — git, тесты, асинхронный код, отладка, документация, подготовка и ревью MR, релизы, автоматизация), доску со спринтами, этапами и задачами, Definition of Ready и Done, ритуал коммитов, обязательные тесты и линтеры до коммита, синхронную документацию. Моно-репо с оркестратором сам маршрутизирует запрос в нужный проект и задаёт агенту порядок чтения документов. Механику вынес в скрипты-гейты: синхронность доски с файлами спринтов, валидность ссылок в документации, перевод статусов задач — одной командой; весь ритуал проверок до коммита прогоняет единый preflight. Любой агент (Cursor, Windsurf, Devin, Claude Code, GitHub Copilot, JetBrains AI) читает одни и те же документы и пишет код единообразно. В ежедневной работе совмещаю несколько ассистентов и под задачу выбираю подходящий. Архитектуру, ревью и финальные решения держу за собой — агенты ускоряют рутину, а не заменяют инженера.
Результат Скорость разработки выросла в несколько раз: код приходит с тестами и пройденными линтерами, документация не отстаёт от кода, единое качество держится даже при работе с разными агентами. Процесс не на словах, а в артефактах: 12 закрытых спринтов с досками по проектам, 11 скиллов-дисциплин, 31 документ живой спецификации бэкенда и фронтенда, ни одного изменения в обход доски.
Инженерный процесс
Моно-репо с оркестратором12 закрытых спринтовDefinition of Done11 скиллов-дисциплин31 документ спецификацииpreflight до коммитаСкрипты-гейты синхронности8 стадий GitLab CI4 окруженияЗамер покрытия в CIДеплой по SemVer-тегамMR-дисциплина и ревью
Сами мульти-агентные системы, локальные LLM, RAG и дообучение моделей — мой полигон: на нём учусь, проверяю идеи и оттачиваю этот процесс. Методику выложил в открытом виде во флагманском проекте ai-multi-agent-system — открыто лежат AGENTS.md, _board, _docs и .agents. Другие открытые наработки: local-rag-mcp, fine-tuning, ai-tg-bot. Помог маркетингу с интеграциями и автоматизацией: Битрикс24, GetCourse, Tilda, Albato, eLama, RIS.Promo, Марквиз, ВКонтакте.
Стек
Python 3.14FastAPIUvicornAsyncIOPostgreSQL 16SQLAlchemy 2.0 asyncasyncpgAlembicPydantic 2PoetryRedisSocket.IOWebSocketJWT RS256S3 (aiobotocore)RESTful APIOpenAPI / Swagger / ReDocPytesthttpxFlake8TypeScript 5React 18Vite 5Feature-Sliced DesignEffectorReact Router 6Formik / YupSCSS ModulesStorybookVitestPlaywrightESLint / StylelintPWADocker (multi-stage)Docker ComposeNginxGitLab CI/CDSemVer-релизыLinuxJiraConfluenceБитрикс24CursorWindsurfDevinJetBrains AI AssistantGitHub CopilotClaude CodePyCharm ProfessionalOllamaМульти-агентыFine-tuningRAG
Pel-Meni — Ведущий разработчик
Июль 2023 — Август 2024
Казань. Вендинговые аппараты, интернет-магазин, одноплатные ПК и серверы. pel-meni.ru
Цель Привести сырой legacy к рабочему и развиваемому состоянию.
Действие Исправил баги, отрефакторил код под PEP-8 и GitFlow, добавил аннотации типов, документацию и Docstrings, ввёл Code Review и трекинг задач в Yandex Tracker, перевёл данные с SQLite на PostgreSQL.
Результат Проект стало возможно развивать командой, а не латать в одиночку.
Цель Разделить монолит и упростить разработку.
Действие Разделил frontend и backend (Django REST framework и Vue.js), перевёл систему на микросервисную архитектуру, добавил логирование сервисов с веб-интерфейсом, брокеры сообщений (MQTT, RabbitMQ) и Docker Compose.
Результат Сервисы стало можно размещать и обновлять по отдельности.
Цель Убрать риск поломки продакшна при разработке.
Действие Собрал локальную среду разработки (любой разработчик запускает backend, frontend, монолиты и микросервисы вендинга, магазина, админки и ЛК у себя на ПК) и удалённую предпродакшн-среду на отдельной системе.
Результат Тестировать и дебажить можно без опасения сломать продакшн.
Цель Заставить работать связку «железо в торговом зале → облако» так, чтобы аппарат готовил заказ сам, а не по звонку оператора.
Действие Программировал сами аппараты на одноплатных ПК (Repka Pi, Orange Pi): управление контроллером по Modbus TCP, платёжный терминал Vendista по serial-порту, манипулятор соусов — напрямую через GPIO и I²C, интерфейс киоска в Chromium и Firefox Kiosk с автозапуском через systemd. Живое состояние заказа гоняю в интерфейс по WebSocket (Django Channels + Redis), обмен с облаком — через MQTT-брокер и RabbitMQ. Подключил онлайн-оплату и фискальные чеки, мультиязычность каталога, автогенерацию OpenAPI. Отдельным микросервисом сделал контроль связи с аппаратами: если аппарат перестал отвечать — алерт уходит в Telegram. Доступ к аппаратам и БД закрыл VPN (L2TP/IPsec).
Результат Аппараты, магазин и админка работают как одна система: заказ проходит от кнопки на экране до контроллера и чека, а обрыв связи виден раньше, чем о нём сообщит клиент.
Масштаб
2 Django-проекта, 28 приложений~31 модель БД105 миграций117 маршрутов в магазине3 микросервиса на FastAPIVue 3 + Vite + PiniaSvelte (первая версия киоска)Edge на Orange Pi
Стек
PythonDjango 4Django REST frameworkDjango ChannelsDaphneFastAPIWebSocketJavaScriptVue 3VitePiniaSvelte.jsLinux UbuntuPostgreSQLSQLiteRedisMQTT (Mosquitto)RabbitMQModbus TCPpyserialGPIO / I²CRepka PiOrange PiVendistaОнлайн-оплата и чекиChromium / Firefox KiosksystemdVPN L2TP/IPsecGunicornNginxDocker ComposeGitLabYandex TrackerRESTful APIOpenAPI (drf-spectacular)
«Ваш инвестор» — Старший программист
Декабрь 2022 — Июль 2023
Новосибирск. Сервис займов (финтех). vashinvestor.ru/company
Микрокредитная компания: выдача займов невозможна без обращения к внешним источникам — государственным реестрам и сервисам проверки данных. Если такой источник молча «лёг» или отдал устаревший список, бизнес узнаёт об этом уже на отказе клиенту или на нарушении комплаенса. Моя зона — сделать так, чтобы об этом узнавали раньше.
Цель Завести под мониторинг все внешние источники, от которых зависит выдача займов и комплаенс, — включая те, что Zabbix не умеет проверять напрямую.
Действие Большую часть проверок реализовал прямо в Zabbix. Для остальных — там, где нужна сложная авторизация (в том числе по сертификату) или разбор нетривиальных структур ответа — написал промежуточные сервисы на Django REST framework и отдал их в Zabbix как обычные метрики. Среди источников — реестры Росфинмониторинга (перечень ФРОМУ, список МВК, перечень террористов и экстремистов) и сервисы проверки данных по базам МВД. Проверки идут по расписанию Celery, асинхронно и параллельно (AsyncIO, httpx, aiohttp), состояние сервисов держится в Redis. Токены доступа сервис перевыпускает сам — за час до истечения, а не после отказа. Статус трёхуровневый: UP / PREFAIL / DOWN, где PREFAIL — предупреждение «источник ещё работает, но квота или баланс подходят к концу». Запуск и логи любой проверки вывел кнопками в админку. Линтер поставил гейтом на деплой: не прошёл flake8 — контейнер не поднимается.
Результат Под мониторингом оказались десятки внешних сервисов, включая критичные для комплаенса государственные реестры. Про деградацию источника команда узнаёт заранее — по PREFAIL, а не по инциденту с клиентом.
Дополнительно администрировал сервер, проводил Code Review и координировал внешнюю команду разработки, которая вела остальные продукты компании (публичный сайт, ядро, личный кабинет клиента).
Стек
Python 3.11Django 4.1Django REST frameworkAsyncIOhttpxaiohttpPostgreSQLSQLAlchemy 2.0Django ORMCeleryRedisZabbixGunicornNginxDocker Composeflake8 как гейт деплояGitLabLinux (CentOS 7)YouTrackБитрикс24
«Робот Карл» — Ведущий разработчик
Февраль 2022 — Декабрь 2022
Москва. Платформа лидогенерации на базе ИИ. robotkarl.ru
Цель Сделать стабильную работу телефонии в высоконагруженной системе.
Действие Реализовал сервис асинхронной перезагрузки шлюзов: десятки устройств перезагружаются параллельно (AsyncIO с uvloop, асинхронный HTTP-клиент, точка входа на FastAPI), а не по очереди. Сделал приложение распределения звонков с контролем состояний и переключением сим-карт (десятки шлюзов, сотни SIM-карт), включая автоматическую привязку SIM к слотам. Написал Selenium-парсеры личных кабинетов бизнес-аккаунтов операторов (каждый — в своём изолированном контейнере с браузером), парсеры статусов портов шлюзов с отправкой в RabbitMQ и парсер маршрутизатора сим-карт. Запуск по расписанию организовал через Celery — десяток регулярных задач.
Результат Звонки распределяются стабильнее, рутинные операции автоматизированы.
Цель Снизить нагрузку от смежного сервиса на PHP.
Действие Провёл research чужого проекта на PHP, переработал и оптимизировал его взаимодействие с нашим сервисом на Python.
Результат Нагрузка на системы снизилась, производительность взаимодействия выросла в разы.
Цель Автоматизировать управление сервисами и убрать ручные операции через консоль.
Действие Собрал веб-админку над двумя разными базами одновременно (маршрутизация запросов между БД на уровне приложения — своя, включая базу телефонной платформы): видны логи и конфиги, есть распределение прав и ролей, запуск отдельных сервисов, утилит и методов по кнопкам в интерфейсе и по расписанию. Каждый сервис описан своим конфигом и поднимается как отдельная systemd-единица, поэтому их можно разносить по разным серверам. Код — с аннотациями типов и документацией.
Результат Рутинные запуски ушли на расписание и кнопки в интерфейсе — отпала необходимость в администраторах, которые раньше делали это вручную через терминал. Управлять системой стало проще, а код с аннотацией типов и документацией не стыдно передать другим.
Отдельно принял на поддержку два чужих проекта: SMS-шлюз (FastAPI и Celery, шесть отдельных воркеров под свои роли — приём, обработка, публикация, вебхуки, работа с БД и учёт, миграции на Alembic) и ML-сервис анализа телефонных разговоров — распознавание речи и классификация реплик, определение пауз и реакций робота (Google Cloud Speech и сторонний ASR, librosa, морфология и NER для русского языка, обмен через RabbitMQ). Разбирался в чужой кодовой базе, чинил баги и держал сервисы в рабочем состоянии. Речь и ML в продакшне — ещё в 2022 году, задолго до того, как это стало моей основной темой.
Стек
PythonDjangoDjango REST frameworkFastAPIAsyncIOuvloopCelery + Celery beatRedisRabbitMQMySQL (две базы)SQLAlchemyDjango ORMAlembicSeleniumBeautifulSoup / lxmlsystemdASR / речьAsteriskLinux (Ubuntu)DockerGitLab CI/CDJiraConfluenceBitbucketZabbix