Добро пожаловать
в личный блог о разработке, книгах и полезных материалах
здесь я собираю заметки, ссылки, инструменты и статьи, которые помогают мне в работе и обучении, а так же мой опыт работы.
- Специализации
- .Net C# программист
- Тип занятости
- Полная занятость, частичная занятость
- Формат работы
- На месте работодателя, Удалённо, Гибрид
- Опыт работы
- 22 года
Апрель 2024 — Январь 2025 (10 месяцев)
- Проект
- Электронная тендерная площадка — платформа для взаимодействия контрагентов и проведения торгов.
- Команда
- 2 разработчика, 2 QA-инженера, 1 аналитик, 1 менеджер проекта.
- Стек
- .NET Framework 4.8, C#, ASP.NET Web Forms, ADO.NET, MS SQL Server (Stored Procedures), JavaScript, Bootstrap 5.
- Переходной стек
- Vue.js, Entity Framework, CQRS.
- Интеграции
- IBM Lotus Notes, Microsoft BizTalk.
Примеры задач
- Рефакторинг модуля регистрации: Перевёл монолитную форму на многошаговый мастер (wizard) с динамическим ветвлением логики для юридических и физических лиц.
- Усиление безопасности аутентификации: Внедрил строгую валидацию email (регулярные выражения), контроль уникальности логина с учётом статуса заявки и блокировку повторного использования скомпрометированных логинов. Перевёл механизм восстановления пароля с email на логин.
- Стабилизация кросс-системной интеграции (ЭПВК ↔ КНТ): Устранил критические рассинхроны жизненного цикла контрагентов через BizTalk (например, блокировка в ЭПВК при архивации в КНТ, которая ранее не срабатывала).
- Обработка сущностей для физлиц: Реализовал корректную валидацию и обработку данных, предотвратив падения системы при отсутствии обязательных полей.
- Миграция и выравнивание исторических данных: Разработал комплекс SQL-скриптов для консолидации трёх XML-схем в одну, массовой коррекции статусов (registered/deleted/info) и переноса полей (auction_email → login_name) для формирования корректных записей в BizTalk.
- Модернизация личного кабинета: Реализовал безопасную смену логина/email с принудительным завершением текущей сессии (force logout) и автоматической синхронизацией изменений во внешних системах (Lotus Notes, почтовые рассылки).
- Улучшение UX валидации: Добавил информативную проверку занятости логина в реальном времени и разграничение видимости вкладок интерфейса.
- Разработка модуля уведомлений с нуля: Спроектировал и реализовал страницу управления шаблонами почтовых уведомлений с поддержкой динамической подстановки переменных, что позволило бизнесу менять тексты рассылок без участия разработки.
Февраль 2025 — Июль 2026 (1 год и 6 месяцев)
- Проект
- Внутренний корпоративный чат (мессенджер) — разработка аналога WhatsApp для корпоративных коммуникаций.
- Команда
- 1 разработчик, 1 QA-инженер, 1 аналитик, 1 менеджер проекта.
- Технологии и стек
-
- Архитектура: Client-Server, MVC + Service Layer + Repository, SignalR (real-time)
- Backend: C#, .NET 8, ASP.NET Core MVC, SignalR, EF Core 8, Serilog, Cookie Auth, LDAP/AD
- Frontend: JavaScript, Bootstrap 5, Syncfusion EJ2, Razor Views
- БД: PostgreSQL
- DevOps: GitLab, CI/CD
- Тестирование: xUnit, Moq, FluentAssertions
- Мониторинг: Serilog (Console/File/Seq)
Примеры задач
- Принял проект на ранней стадии (~20 коммитов, нерабочее состояние): монолитное решение с совмещёнными слоями (SignalR, БД, бизнес-логика), единым контроллером с множеством действий; после ухода предыдущего разработчика провёл аудит, стабилизацию и поэтапный рефакторинг в слоистую архитектуру. Стек UI (ASP.NET Core MVC, Razor Views, Syncfusion, Cookie Auth) сохранён по согласованию с заказчиком в рамках сроков проекта.
- Спроектировал и реализовал целевую слоистую архитектуру решения (Web → Services → Repositories → EF) на .NET 8 с разделением на 10+ проектов solution.
- Спроектировал доменную модель PostgreSQL и реализовал persistence-слой: EF Core, Fluent API, миграции, seed-данные, DbContext с поддержкой Data Protection keys.
- Реализовал слой доступа к данным: репозитории по доменным областям, Unit of Work, Query Pipeline для фильтрации, сортировки и пагинации административных экранов.
- Разработал сервисный слой бизнес-логики: аутентификация, пользователи, сообщения, чат, справочники, аудит и централизованная обработка ошибок через DI.
- Внедрил интеграцию с Active Directory/LDAP и RBAC: валидация учётных записей, role-based доступ, policy-based авторизация, переключение между провайдерами БД и AD.
- Реализовал модуль управления сессиями: cookie-аутентификация, политика единой активной сессии, middleware продления сессии.
- Разработал real-time подсистему на SignalR: NotificationHub, группы по рабочим станциям и группам, доставка сообщений, статусы sent/delivered/read, online/offline.
- Создал веб-приложение ASP.NET Core MVC: REST/MVC контроллеры, Razor Views, middleware pipeline, конфигурация окружений (Dev/Test/Prod).
- Реализовал модульный frontend на JavaScript (IIFE, разделение ответственности по доменным модулям): чат, SignalR-клиент, дерево получателей, административные гриды Syncfusion, единый API-клиент и обработка ошибок.
- Настроил структурированное логирование Serilog и конфигурацию приложения (БД, AD, сессии, лимиты SignalR).
- Покрыл проект автотестами: unit-тесты сервисов и провайдеров, integration-тесты контроллеров и SignalR hub; подключил прогон тестов в CI.
- Подготовил техническую документацию: архитектура, структура проекта, deployment, security, API и руководства по эксплуатации.
- Довёл проект до production-версии (~150 коммитов): система выведена в промышленную эксплуатацию и на первом этапе используется более чем 300 пользователями на терминальных рабочих стойках.
Ноябрь 2025 — Март 2026 (5 месяцев)
- Проект
- Сервис оплаты парковочных мест аэропорта на базе системы ABACUS (DESIGNA, Германия).
- Команда
- 2 разработчика, 1 QA-инженер, 1 аналитик, 1 менеджер проекта.
- Стек
- MS SQL Server (4 БД, 500+ таблиц, 2500+ хранимых процедур)
Примеры задач
- Исправление логики обнуления абонементов (Yandex Taxi): Провёл анализ SQL-процедур и интеграционной цепочки, нашёл точку разрыва между обработкой проезда и активацией/обнулением. Реализовал передачу RFID-идентификатора в обработку, полностью устранив сбой в бизнес-логике.
- Корректная фиксация въезда и выезда: Разобрал процесс бронирования по шагам, выявил корневые причины незафиксированных въездов (ошибки в процедуре автоматического закрытия броней, некорректная работа со статусами). Создал решение для согласованной обработки жизненного цикла брони, исключив финансовые потери бизнеса.
- Безопасная массовая очистка устаревших данных: Подготовил процедуры удаления карт, клиентов и транспортных средств с централизованным логированием, использованием транзакций и штатных сервисных процедур системы. Настроил SQL Agent Jobs для автоматического выполнения очистки безопасными батчами.
- Автоматизация ограничений срока действия абонементов: Реализовал механизм временного ограничения срока действия абонемента (новые поля конфигурации, процедуры установки/снятия, автосброс по Job, журналирование, роль доступа и веб-интерфейс для операторов). Система теперь автоматически возвращает параметры в штатный режим после окончания периода.
Общее для 3 команд
- Процессы: Scrum (2-недельные спринты: планирование, имплементация + тесты, Code Review, QA, демо, регресс, ретроспектива).
- Инструменты и процессы: Visual Studio, JetBrains (ReSharper), Jira, Confluence, Bitbucket.
Ноябрь 2021 — Февраль 2022 (4 месяца)
Целевой клиент: внутренняя разработка для InnerWorkings (HH Global)
- Проект
- VALO, e-Commerce, B2B-платформа (Purchase & Procurement Management System) — международный портал автоматизации снабжения и закупок маркетинговой продукции.
- Команда
- 8 Full-stack разработчиков, Team Lead, 6 QA-инженеров
- Технологии и стек
-
- Архитектура: Микрофронтенд (Module Federation), Микросервисы (Event-Driven с переходом на Saga), использовались Services-Repositories с переходом на CQRS.
- Backend: C#, .NET 3.1 / 5, ASP.NET Core Web API, Swagger/OpenAPI, Entity Framework Core с переходом на Dapper, AutoMapper, Fluent Validation
- Frontend: React, TypeScript, Node.js, Webpack, Babel, Prettier, Yarn / npm
- Базы данных и хранилища: MS SQL Server (SSMS), Redis, MinIO (Object Storage)
- Интеграции и брокеры: Apache Kafka
- DevOps и инфраструктура: Docker, Docker Compose, Kubernetes (kubectl, kubefwd, Helm, YAML), Jenkins
- Тестирование: xUnit, NUnit
- Мониторинг и логирование: Splunk
Примеры задач
- Валидация медиа-контента: Разработал механизмы проверки консистентности данных при загрузке, реализовав строгое сопоставление Image IDs и физических имён файлов.
- Импорт адресов доставки: Реализовал предикативный импорт полей Shipping Address в профили локаций при массовой загрузке мастер-данных.
- Развёртывание определений сайтов: Настроил автоматическое развёртывание и синхронизацию глобальных site definitions для новых регионов.
- Обработка ошибок импорта: Спроектировал централизованный паттерн журналирования и визуализации ошибок импорта для администраторов платформы, что ускорило диагностику сбоев.
- Внедрение статусов согласования: Модернизировал модуль групповых закупок, добавив сквозные бизнес-статусы согласования (approval status).
- Расширение структуры данных сорсинга: Интегрировал глобальные рыночные поля (market fields) для поддержки транснациональных закупок.
- Оптимизация доступа к данным: Провёл рефакторинг сервиса групповых закупок с миграцией с Entity Framework на Dapper, что повысило производительность MS SQL при массовых транзакциях.
- Целостность ценовых данных: Устранил дублирование прайс-листов (duplicate pricing issue) и дублирование наименований номенклатурных позиций на уровне СУБД.
- Автоматический пересчёт лимитов: Реализовал бизнес-логику пересчёта пороговых значений (Threshold Management) при динамическом изменении структуры локаций.
- Локализация UI локаций: Модернизировал слой представления данных, заменив отображение технических кодов локаций на человекочитаемые корпоративные наименования.
- Покрытие тестами: Покрыл критический функционал ядра модульными (unit) и интеграционными (integration) тестами.
- Настройка CI/CD: Настроил пайплайны в Jenkins для автоматизации контроля качества, устранил конфликты в перегруженных методах (overloaded methods) и обеспечил стабильный деплой через merge to master.
Февраль 2022 — Май 2022 (4 месяца)
Целевой клиент: Anheuser-Busch InBev, Производство алкогольных и безалкогольных напитков (бренды Bud, Corona, Stella Artois)
- Проект
- e-Commerce, B2B-платформа (Sales & Order Management System) — международный портал дистрибуции и продаж маркетинговой продукции.
- Команда
- 5 Full-stack разработчиков, Team Lead, 5 QA-инженеров
- Стек
- FW 4.7.2, C#, ASP.NET MVC, JavaScript, MS SQL Server, Entity Framework
Примеры задач
- Оптимизация массового создания позиций: Доработал UI и слой представления данных для корректного автоматического расчёта коэффициентов упаковки (Carton Factor) в режиме Create Multiple.
- Расширенная фильтрация дашборда: Внедрил новую систему фильтрации на панели мониторинга (Program Dashboard) для ускорения навигации менеджеров.
- Экспорт мастер-данных в Excel: Реализовал подсистему выгрузки брендов, категорий и семейств продуктов, обеспечив корректное форматирование файлов.
- Устранение ограничений пагинации в отчётах: Инициировал и реализовал пересмотр модулей генерации тяжёлых отчётов для обеспечения выгрузки полных датасетов без обрезки данных.
- Внедрение Dependency Injection: Начал миграцию архитектуры монолита на паттерн DI с использованием контейнера Autofac, обеспечив слабую связанность компонентов.
- Интеграция DI в фоновые задачи: Настроил корректное внедрение зависимостей для асинхронных фоновых задач (Jobs) и устранил ошибки инициализации контейнера при старте приложения.
- Исправление логики удаления в RFQ и Work Orders: Провёл расследование коллизий, перестроил каскадные механизмы удаления элементов, предотвратив автоматическую отмену заказов при удалении последнего элемента.
- Поддержка инвойсов с нулевой стоимостью: Расширил финансовый модуль, интегрировав валидацию и корректную обработку zero cost invoices.
- Стабилизация файлового обмена: Устранил уязвимости при генерации URL-адресов для файлов со специальными символами в именах, обеспечив стабильное скачивание отчётов в Advanced Search.
- Оптимизация локального окружения: Устранил критические конфликты при установке пакетов через npm и стандартизировал конфигурацию среды разработки для всей инженерной команды.
- Нормализация прав доступа к БД: Упорядочил ролевую модель доступа к бэкапам баз данных в соответствии с политиками безопасности.
Февраль 2022 — Октябрь 2023 (1 год и 9 месяцев)
Целевой клиент: The Coca-Cola Company, Производство безалкогольных напитков (бренды Coca-Cola, Fanta, Sprite)
- Проект
- e-Commerce, B2B-платформа (Sales & Order Management System) — международный портал дистрибуции и продаж маркетинговой продукции.
- Команда
- 15 Full-stack разработчиков, Team Lead, 15 QA-инженеров
- Стек
- FW 4.7.2, C#, ASP.NET MVC, JavaScript, MS SQL Server, Entity Framework, Autofac (DI)
Примеры задач
- Архитектурный рефакторинг legacy-кода: Выполнил масштабный рефакторинг унаследованных модулей, устранив коллизии слияния веток по результатам code review.
- Верификация статусов заказов: Реализовал функционал проверки и валидации динамических списков для статусов Pending Approval.
- Управление документооборотом: Разработал и внедрил поддержку сущностей Private Document Type и Enquiry Title в системе согласования.
- Массовое копирование матричных товаров: Внедрил отказоустойчивые алгоритмы Mass Copy для сложных номенклатурных позиций (Matrix items).
- Оптимизация аналитических отчётов: Ускорил генерацию отчётов MRM и MCX, добавив поддержку вариативности номенклатуры, Budget year и Tolerance Review.
- Расширение экспорта в Advanced Search: Добавил выгрузку ценовых типов (Pricing Type) и бенчмарк-полей в Excel без потери структуры данных.
- Оптимизация рендеринга больших списков: Восстановил корректное отображение интерфейса при одновременной загрузке более 2000 товарных позиций на одной странице.
- Оптимизация массового редактирования: Снизил транзакционную нагрузку на таблицы ценовых матриц (pricing tables) при использовании режима bulk edit.
- Параметризованная валидация: Внедрил централизованный механизм генерации понятных сообщений об ошибках (Parameterized error labels) на клиенте и сервере.
- Устранение Server 500 Error: Проанализировал production logs, локализовал и устранил скрытые инфраструктурные сбои при интеграции новых вендоров.
- Контроль Min/Max для Quick Buy: Интегрировал алгоритмы проверки минимальных и максимальных порогов для сценариев быстрого выкупа товаров.
- Автоматический расчёт MOQ: Реализовал серверную логику расчёта минимального объёма заказа (Minimum Order Quantity) на странице товара.
- Расширение шаблонов импорта: Добавил поддержку размерных сеток (Size fields) и классов использования (Item Usage Class) в массовый импорт позиций.
- Исправление локализации выпадающих списков: Устранил системные сбои рендеринга языковых ключей вместо переводов в компонентах Search Criteria на множестве экранов.
- Локализация финансовых метрик: Стабилизировал мультиязычное отображение валют и числовых форматов в модуле управления бюджетами (Manager Budget).
- Устойчивая интеграция с PNP: Реализовал адаптивную схему парсинга входящих JSON-пакетов от Procurement Network Platform для бесперебойной обработки заказов.
- Мониторинг изменения цен: Внедрил систему реактивного отслеживания динамических колебаний стоимости (Run On Price changes) на странице маппинга типов товаров.
- Устранение переполнения при отклонении документов: Исправил уязвимость, приводившую к падению приложения при вводе длинных текстовых комментариев в сценариях Document rejection.
- Нормализация ролей владельцев программ: Исправил логику назначения и отображения прав Program owners на странице товара при повторном запуске процессов.
- Исправление фильтров дашборда: Восстановил корректную работу хронологических фильтров (order date filter) на вкладке заказов дашборда.
- Поиск по журналу аудита: Разработал функционал Audit Trail с возможностью полнотекстового поиска по журналам действий пользователей.
- Трекинг изменений в уведомлениях: Добавил логирование и отображение истории изменений (change tracking) в модулях Job Info и Edit Notification.
- Разграничение прав доступа: Реализовал детальную систему permissions для ценовых матриц и таблиц запросов RFQ/PRFQ в режиме массового редактирования.
- Команда
- 5 full stack разработчиков, руководитель отдела, 3 тестера.
- Распределение времени
-
- 80% — разработка на ABAP
- 20% — разработка на C# (пара проектов)
- Роли
- SAP ABAP developer, C# Developer.
- Основные обязанности
- ABAP-разработка новых транзакций в SAP, улучшение имеющихся.
- Дополнительные обязанности
- Разработка внутреннего корпоративного портала (ASP.NET MVC Core). Предложения по улучшению приложения, отвечающего за сборку автомобилей (WinForms FW 4.7): изменение архитектуры, добавление нового функционала.
2012 — 2020
Компания: Procter & Gamble; Продукция: Tide, Fary, Pampers.
- Команда
- 3 full stack разработчиков, руководитель отдела, 2 тестера.
- Масштаб работ
-
- 5–10 новых WinForms проектов разрабатывалось командой каждый год.
- 100+ проектов на поддержке (размер проектов в среднем 10–20 таблиц в MS SQL).
- 1 проект был разработан на ASP.NET Core MVC + JS (размер 100+ таблиц).