Внутренняя платформа документооборота крупного банка, обеспечивающая централизованное хранение, согласование и маршрутизацию корпоративных документов. Система реализована на микросервисной архитектуре (15 сервисов) с синхронным и асинхронным взаимодействием, охватывает более 2 000 пользователей. Функциональность включает ролевое разграничение доступа, полнотекстовый поиск, версионирование документов и интеграцию с корпоративной инфраструктурой.
Команда: 5 System Analysts, 7 Backend Developers, 2 Frontend Developers, 5 QA Engineer
- Реализовал ключевые бизнес-сценарии согласования документов: маршрутизация по ролям, параллельное и последовательное согласование, автоматические уведомления через Kafka-события — сроки согласования договоров сократились с 3 дней до нескольких часов.
- Построил полнотекстовый поиск на OpenSearch: кастомный анализатор для русского языка с морфологией и синонимами, индексирование содержимого PDF и DOCX, поиск с нечётким соответствием и подсветкой вхождений — сотрудники находят нужный документ за секунды вместо ручного листания папок.
- Спроектировал и реализовал ролевую модель на Keycloak: иерархические роли (просмотр → редактирование → согласование → администрирование), атрибутивный контроль доступа на уровне отдела и типа документа, интеграция с корпоративным LDAP — 2 000+ пользователей получили ровно те права, что нужны по должности.
- Настроил Kafka-топики для асинхронного взаимодействия: партиционирование по типу события, dead letter queue для повторной обработки сбоев, мониторинг лага консьюмеров через Grafana — система не теряет ни одного события даже при временном падении downstream-сервиса.
- Провёл аудит безопасности по AppSec-отчёту: устранил SQL-инъекции через параметризацию запросов, закрыл XXE-уязвимости в XML-парсере, настроил CSP-заголовки — все критические и высокие уязвимости закрыты по итогам повторного сканирования.
- Последовательно рефакторил кодовую базу: декомпозировал God Objects на сервисный слой, заменил N+1 запросы на fetch join с пагинацией, убрал дублирование маппинга через MapStruct — покрытие тестами выросло с 34% до 71%, время сборки сократилось на 25%.
- Участвовал в ревью архитектурных решений: предложил схему версионирования документов через иммутабельное хранение ревизий вместо мягкого удаления — это упростило аудит изменений и сняло целый класс багов с параллельным редактированием.
- Java 17
- Spring Framework
- PostgreSQL
- Liquibase
- Hibernate
- Gradle
- Apache Kafka
- Keycloak
- OpenSearch
Внутренний инструмент автоматизации миграции справочных данных между средами разработки и тестирования. Система на основе трёх микросервисов выполняет сравнение схем и данных двух экземпляров БД, после чего генерирует DML-скрипты переноса и отката изменений. Ключевой результат: переработка логики с Oracle PL/SQL на Java с применением многопоточности позволила сократить время выполнения критического сценария с 2 часов до 1,5 минут.
Команда: Team Lead, 2 System Analysts, 4 Backend Developers, 2 Frontend Developers
- Выступил техническим лидом подпроекта: провёл декомпозицию на три микросервиса (reader, comparator, script-generator), согласовал архитектуру с командой, распределил задачи и контролировал качество через ревью каждого PR.
- Спроектировал и реализовал ядро сравнения: рекурсивный обход иерархических справочников, алгоритм diff с учётом зависимостей по foreign key (чтобы DML применялся в правильном порядке), обработка коллизий при переименовании объектов — корректная работа на схемах с 200+ взаимосвязанными таблицами.
- Реализовал генератор DML-скриптов переноса и отката: скрипт переноса идемпотентен, скрипт отката точно обращает каждую операцию, транзакционные блоки с savepoint для атомарного применения групп изменений — команда релиза перестала бояться применять скрипты вручную.
- Добавил многопоточность через ExecutorService: параллельное чтение из нескольких схем, thread-safe накопление результатов через ConcurrentHashMap, правильный порядок сборки итогового diff через CountDownLatch — это и дало снижение с 2 часов до 1,5 минут на самом тяжёлом сценарии.
- Разработал систему аудита на уровне БД: триггеры на всех справочных таблицах пишут историю (кто, когда, что, старое и новое значение), представления для удобной фильтрации по пользователю и периоду, нормализация схемы устранила дублирование в 5 таблицах.
- Реализовал UI на Vaadin для аналитиков: визуальное diff-дерево с подсветкой добавлений/изменений/удалений, фильтрация по схеме и типу объекта, генерация SQL по кнопке на лету — аналитики работают с инструментом без единого обращения в DevOps.
- Обеспечил совместимость с двумя СУБД (PostgreSQL и Oracle): абстрагировал диалекто-специфичные конструкции через стратегию, покрыл граничные случаи интеграционными тестами через Testcontainers.
- Java 17
- Sptring Boot 3
- Hibernate JPA
- PostgreSQL
- Oracle
- Maven
- Vaadin
Внутренняя монолитная система банка для рассмотрения заявок на кредитование физических лиц. Задачей участия в проекте являлась стабилизация системы перед плановым масштабированием: построение полноценного контура наблюдаемости, устранение узких мест в производительности и повышение сопровождаемости кодовой базы. Система обрабатывает кредитные заявки в режиме реального времени, что предъявляет высокие требования к надёжности и корректности реализованной бизнес-логики.
Команда: Team Lead, 6 Backend Developers, 2 Frontend Developers, 3 QA Engineers, 5 System Analysts
- Выстроил observability стек с нуля: структурированное JSON-логирование через Logback + MDC (traceId, userId, requestId в каждой строке), централизованный сбор в Graylog с фильтрами по контексту, дашборды в Grafana по ключевым бизнес-метрикам (число заявок в час, время рассмотрения, процент отказов).
- Настроил мониторинг приложения в Kubernetes: Prometheus scraping через аннотации на подах, кастомные метрики через Micrometer (размер очереди заявок, время ответа внешних сервисов), алерты по p95 latency и error rate — время обнаружения инцидентов сократилось с «жалоба пользователя» до автоматического алерта за 2 минуты.
- Провёл профилирование под нагрузкой через async-profiler: нашёл три горячие точки — лишняя сериализация в Kafka-продюсере, неиндексированный запрос в цикле, блокировка на synchronized-методе при конкурентном доступе к кешу — устранение этих точек снизило p99 latency на 40%.
- Выполнил рефакторинг критически важных модулей: разбил методы по 500+ строк, заменил магические константы на задокументированные enums, покрыл отрефакторенный код юнит-тестами — следующий разработчик разбирается в логике рассмотрения заявки за час, а не за день.
- Реализовал сложную бизнес-логику расчёта кредитного решения: правила андеррайтинга с учётом кредитной истории, дохода и скоринга, корректная обработка граничных случаев (нулевой доход, незакрытые просрочки, поручительство) — покрыл логику 47 параметризованными тест-кейсами.
- Java 11
- Spring Boot 3
- Apache Kafka
- Oracle
- Kubernetes
- Maven
- Liquibase
- Graylog
- Grafana
Веб-сервис автоматизированного построения модели угроз безопасности персональных данных в соответствии с методологией ФСТЭК России. Система формирует актуальный перечень угроз на основе характеристик информационной системы, указанных пользователем, и генерирует готовый отчётный документ установленного формата. Реализована в виде монолитного приложения с двухфакторной аутентификацией и модулем автоматической отправки результатов по электронной почте.
Команда: Project Manager (Analyst), 1 Backend Developer, 1 Frontend Developer
- Реализовал движок моделирования угроз: граф зависимостей между объектами защиты, нарушителями, векторами атак и угрозами из банка ФСТЭК, алгоритм автоматического вывода актуальных угроз на основе характеристик системы — то, что аналитик делал 3–5 дней, сервис строит за 30 секунд.
- Разработал генератор отчётов в формате ФСТЭК: шаблон с автоподстановкой результатов, нумерация угроз, таблицы актуальности с обоснованиями, экспорт в DOCX — организация получает готовый документ для регулятора без единой ручной правки.
- Настроил автоматическую отправку отчётов по email через Spring Mail: HTML-письмо с резюме угроз, DOCX во вложении, шаблонизация через Thymeleaf, retry при временной недоступности SMTP.
- Реализовал двухфакторную аутентификацию: TOTP через Google Authenticator (RFC 6238), QR-код для первичной привязки, graceful period для смены устройства, audit log всех попыток входа — доступ к данным ПДн защищён вторым фактором у всех пользователей.
- Покрыл бизнес-логику модульными и интеграционными тестами: 118 параметризованных кейсов по матрице ФСТЭК, интеграционные тесты с реальной PostgreSQL через Testcontainers, проверка содержимого DOCX через Apache POI — coverage 79%, ни одного бага в логике угроз после релиза.
- Спроектировал схему БД через jOOQ: типобезопасные DSL-запросы, миграции через Flyway с откатными скриптами — схема прошла 14 миграций без единого инцидента с потерей данных.
- Java 17
- Spring Boot 3
- PostgreSQL
- jOOQ
- Flyway
- Docker
B2B-платформа для поиска и установления деловых контактов между организациями: поставщиками, подрядчиками и инвесторами. Ключевое техническое требование — интеллектуальный полнотекстовый поиск с поддержкой нечёткого соответствия, устойчивый к опечаткам, сокращениям и вариативности написания. Проект реализован с нуля, что обеспечило полное участие в выборе архитектурных решений и технологического стека
Команда: 1 Business Analyst, 1 System Analyst, 1 Data Analyst, 2 Backend Developers, 2 Frontend Developers, 1 QA Engineer
- Разработал полнотекстовый поиск с нечётким соответствием на PostgreSQL: триграммный индекс (pg_trgm) для fuzzy-матчинга, GiST-индексы для ускорения по сходству, tsvector + tsquery для лексемного поиска по русскому тексту — результаты за 80–120 мс на таблице с 500k контрагентов.
- Добавил векторный поиск по семантической близости: sentence embeddings через ruBERT, хранение в pgvector, гибридный скоринг (полнотекстовый + семантический с весами) — система находит релевантных контрагентов, даже если пользователь описывает деятельность своими словами.
- Реализовал автоисправление опечаток: словарь с частотами, алгоритм Дамерау–Левенштейна для генерации кандидатов, suggest-блок над результатами — пользователи с опечатками всё равно получают результат вместо пустой страницы.
- Участвовал в архитектурных решениях: обосновал выбор PostgreSQL + pg_trgm вместо отдельного Elasticsearch (меньше инфраструктуры при достаточной производительности на данном объёме), выбрал OpenShift по требованиям заказчика к изоляции.
- Провёл нагрузочное тестирование через Gatling: симуляция 500 одновременных запросов, профилирование через EXPLAIN ANALYZE, тюнинг work_mem и effective_cache_size — p95 latency при пиковой нагрузке не превышает 300 мс.
- Выстроил прямую коммуникацию с заказчиком: еженедельные демо, фиксация требований через user stories в Confluence, оперативное согласование изменений в ранжировании — ни одного «не то, что хотели» за 13 месяцев.
- Покрыл поисковую логику интеграционными тестами: 85 сценариев с реальными данными (опечатки, синонимы, частичные совпадения, кириллица + латиница), прогон в Jenkins CI — регрессии в ранжировании видны сразу при мерже.
- Java 17
- Spring Framework
- PostgreSQL
- Flyway
- jOOQ
- OpenShift
- Jenkins
- Maven
Внутренний корпоративный инструмент для формирования и хранения резюме сотрудников на основе унифицированных шаблонов. Система предоставляет HR-специалистам и менеджерам проектов возможность создавать, редактировать и экспортировать актуальные резюме без привлечения разработчиков. Реализована в виде монолитного приложения с разграничением прав доступа, версионированием и генерацией документов в формате PDF.
Команда: 1 System Analyst, 2 Backend Developers, 1 Frontend Developer, 1 QA Engineer
- Реализовал систему авторизации на Spring Security + JWT: регистрация с подтверждением email, хранение refresh-токенов в PostgreSQL с TTL и ротацией при каждом обновлении, чёрный список отозванных токенов — защита данных без избыточной сложности для внутреннего инструмента.
- Разработал движок шаблонов резюме: JSON-схема для описания структуры, рендеринг через Thymeleaf в HTML, конвертация в PDF через Flying Saucer — HR может создать новый корпоративный шаблон без участия разработчика, меняя только JSON-конфигурацию.
- Реализовал полный CRUD с валидацией через Bean Validation, пагинацией в Spring Data и оптимистичной блокировкой для предотвращения конфликтов при одновременном редактировании — основа, на которую надстраивался весь функционал.
- Принимал активное участие в обсуждении архитектуры: предложил Hibernate JPA вместо JDBC-шаблонов для ускорения разработки, обосновал Liquibase для миграций с учётом роста команды — решения прижились и не потребовали пересмотра.
- Задокументировал REST API через Swagger/OpenAPI с примерами запросов, ответов и кодами ошибок — frontend-разработчик интегрировался с API за день без единого вопроса к backend.
- Java 17
- Spring Framework
- PostgreSQL
- Hibernate JPA
- Liquibase
- Maven