30 лет в ИТ. Прошёл путь от разработчика через тим/тех-лида и руководителя управлений до CTO — знаю каждую роль изнутри. До сих пор пишу код.
Сильные стороны: запуск с нуля (команды, процессы, инфраструктура), трансформация легаси и зрелых организаций, построение надёжных высоконагруженных систем, работа в B2C и B2B одновременно. Управлял коллективами 200+ человек, системами с аудиторией 25+ млн пользователей, реализовывал B2C и B2B стратегии в страховании, телекоме и ритейле, включая электронную коммерцию.
Компании: АльфаСтрахование, СОГАЗ, МегаФон, CUSTIS (Спортмастер, Газпром, Банк России).
Сейчас в роли внешнего CTO помогаю компаниям преодолевать технологические и организационные трудности — от стратегии до кода.
Раньше я закрывал весь этот стек сам или через команды, каждый на своём участке. Теперь мне эти задачи закрывает ИИ.
Я остаюсь тем, кто понимает зачем, что и как правильно — но execution стал быстрее и дешевле.
Пример, от инфраструктуры через полный цикл разработки до деливери. API Gateway за 3 недели part-time.
200+ человек в зоне ответственности, производство полного цикла (CUSTIS)
150+ человек — разработка и сопровождение полного цикла (АльфаСтрахование, 18 лет)
35 человек — 3 команды с нуля за 3 месяца (СОГАЗ)
10+ кросс-функциональных Agile-команд (АльфаСтрахование)
~40 корпоративных систем (SAP FSCM, Oracle E-Business Suite, Infor SalesLogix, QlikView, OpenText и др.)
до 5 000 пользователей внутренних систем, 25+ млн клиентов на сайте (2019 ↗)
Time-to-market: 6 мес → 2 недели (Agile-трансформация)
Доступность: 94% → 99.9% — SRE-группа с нуля
25+ млн клиентов на alfastrah.ru — #1 по посещаемости среди страховых (Яндекс.Радар, 2018 ↗)
Приложение — победитель «Рейтинг Рунета» 2019 ↗ в категории «Финансы»
MVP B2B-портала ↗ за 4 недели → 860K+ визитов/мес, работает до сих пор
ISO/IEC 20000-1:2011 — сертификация разработки
alfastrah.ru — #1 по посещаемости среди страховых, 25+ млн клиентов, работает до сих пор
Приложение АльфаСтрахование — победитель «Рейтинг Рунета» 2019, работает до сих пор
B2B-портал «АльфаПолис» ↗ — 860K+ визитов/мес, вырос в экосистему, работает до сих пор
Команды — 10+ лет вместе, многие работают до сих пор
Принял хаос от 10 подрядчиков (legacy, проблемы с безопасностью). Построил 3 команды с нуля, вывел на релизы за 3 месяца. Выявил и закрыл критическую утечку персданных за месяц.
Перевёл кредитный брокер от подрядчика внутрь — тысячи кредитов, десятки тысяч расчётов в сутки. 60 модулей, 17 микросервисов, интеграции с 5 банками — за 2 месяца.
Аудит производства (200+ человек, 5 автономных направлений, несовместимые стеки, текучка 70%, 3 мес на вхождение). Разработал и защитил стратегию унификации. Собрал Productivity Team — выделенную команду под реализацию стратегии. Стратегия принята, команда передана заказчику и работает.
Масштабная Agile-трансформация традиционной компании. BigData/AI команда с нуля (Hadoop, антифрод). Продукты-лидеры рынка в B2B и B2C.
Self-service платформа без лицензионных затрат. Управление маршрутами, клиентами, аутентификация, rate limiting. Трудоёмкость 3 недели part-time.
Kotlin, Spring Boot 3.4, React, PostgreSQL, Redis, Docker
Удаленное управление работой агентов Claude через бота в Telegram.
n8n, Claude AI, Telegram API, FastAPI, Docker
Двухуровневая система: глобальный per-route лимит через Redis Lua EVALSHA (атомарный Token Bucket) и per-consumer лимиты с отдельным ConsumerRateLimitCacheManager. При недоступности Redis — автоматический fallback на Caffeine in-memory с 50% от лимита.
Spring Cloud Gateway + WebFlux + Netty + R2DBC. Все I/O неблокирующее: HTTP, PostgreSQL, Redis. Нет ThreadLocal — используем Reactor Context + MDC bridging для correlation ID propagation через всю цепочку.
Admin Service публикует события в Redis Pub/Sub при изменении маршрутов, rate limits и consumer limits (3 отдельных канала). Gateway Core подписан на все три — RouteCacheManager обновляет AtomicRef<routes> за < 100ms без перезапуска.
API consumers используют client_credentials grant → JWT Bearer. Admin UI — OIDC PKCE flow через Keycloak. Gateway Core валидирует JWT через JWKS endpoint. Admin Service использует @RequireRole аннотацию с AOP аспектом и иерархией ролей: ADMIN > SECURITY > DEVELOPER.
TracingAttributesFilter добавляет span attributes (route, consumer, correlation ID) в каждый запрос. Трейсы отправляются через OTLP в Jaeger. W3C Trace Context propagation в upstream вызовы. Grafana показывает trace links рядом с метриками.
Оба сервиса экспортируют метрики через /actuator/prometheus. Prometheus scrapes каждые 15s. 5 alert rules: high error rate, P95 latency, gateway down, high consumer cardinality, high metrics cardinality. Grafana dashboard: RPS, P50/P95/P99, errors, per-consumer breakdown.
GitLab CI: build → test → SAST (Semgrep) → Docker → deploy. 4 runners с Docker executor. Secrets из HashiCorp Vault (AppRole). Docker образы в Nexus Registry. PostgreSQL: 14 Flyway миграций (V1–V13, строгий порядок). Traefik 3 как reverse proxy с автоматическим TLS.
Claude Code SDK отдаёт ответ по частям. Вместо ожидания полного ответа — async generator с yield на каждый chunk. FastAPI собирает chunks в буфер и через asyncio.Queue отправляет обратно в n8n → Telegram, который обновляет сообщение через edit. Пользователь видит, как Claude «печатает» в реальном времени.
Каждая сессия — конечный автомат: IDLE → RUNNING → DONE. Состояние хранится в Redis с TTL 24h. Запрос в RUNNING-сессию ставится в очередь. Session ID — 16-char hex (64-bit entropy). Лимит: max 5 concurrent сессий.
Webhook secret в X-Webhook-Secret header — n8n подписывает каждый запрос. Path traversal protection — многоуровневая валидация путей (normalization, whitelist, chroot check). Все входные данные через Pydantic v2 strict-модели. CORS ограничен только n8n origin.
pytest-asyncio для async-кода. Redis заменён на fakeredis — полная имитация Redis API без реального сервера. Каждый тест изолирован: свой экземпляр fakeredis, нет shared state. Покрыто: API endpoints, session CRUD, webhook retry logic, Telegram message chunking.
Стрелки всегда вращаются по часовой. Наивный lerp(from, to) выбирает кратчайший путь — стрелка может дёрнуться назад на 350°, что выглядит как баг. Вместо этого: если target < current, интерполяция идёт через target + 2π — стрелка делает полный оборот вперёд.
350 объектов × 2 стрелки = 700 параллельных интерполяции каждый кадр. Все вычисления — чистая математика без DOM, единственный рендеринг — batch draw на Canvas.
«Волна» бежит по матрице как ветер по полю. Два слоя синусоид с разными частотами: крупная волна (длина = ширина матрицы) задаёт общее движение, мелкая рябь (×3 частота, ×0.3 амплитуда) добавляет органичность.
Между фазами порядок обновления циферблатов перемешивается. Fisher-Yates даёт идеально равномерное распределение за O(n) — каждая перестановка равновероятна.
prefers-reduced-motion: при включённой настройке анимации выключаются, стрелки показывают статичное время. aria-labels на canvas с текстовым описанием. noscript fallback со статичным изображением.
DPR-aware рендеринг: canvas физически в 2-3× больше CSS-размера на Retina. Без этого стрелки размытые.
909 строк, отдельный WYSIWYG-инструмент. Клик по ячейке → выбор угла для часовой и минутной стрелки. Паттерн экспортируется как JSON-массив и подключается к основному движку.
Позволяет визуально создавать надписи и фигуры, которые движок потом анимирует в фазе «text pattern».