evgeniy-kleminevgeniy-klemin

Евгений Клёмин

Архитектура, процессы, управление продуктамиБэкенд разработчикФулстек разработчикВедущий (Lead)
Не ищу работу
Возраст: 40 лет
Опыт работы: 18 лет и 5 месяцев
Регистрация: 30.07.2013
Последний визит: 9 месяцев назад
Местоположение: Россия, Санкт-Петербург
Дополнительно: готов к переезду и к удаленной работе
Войдите, чтобы посмотреть контакты пользователя

Обо мне

В разработке с 2003 года, начинал с языков C++ Builder, Delphi, PHP. Немного разрабатывал на C#. Последние языки/фреймворки которые использую в работе - golang, python, vuejs.

Есть опыт разворачивания кластеров Kubernetes на bare-metal, с настройкой и внедрением CI/CD на gitlab.

Плотно работал с системами телефонии на базе Asterisk, FreeSwitchWebRTC.

Из последних технологий, внедряемых для решения задач - cubejs для аналитики и temporal.io для реализации нетривиальных бизнес-процессов.

В последние два года уделял много внимания изучению различных практик по организации процессов разработки и фундаментальные теории (Цель Голдратт и др.) итерационно применяя на текущих процессах комманды.

Придерживаюсь следующих принципов при разработке продукта: 

  • выбор подходящего стека, в зависимости от многих факторов: стоимость внедрения, привлечения разработчиков, поддержка инфраструктуры, наличие текущих компетенций, риски использования
  • проверка идеи короткими циклами
  • планирование стратегии на несколько месяцев
  • ввод в обслуживание: мониторинг разного уровня метрик и настройка правил автоматического алертинга с последующей эскалацией
  • настройка непрерывной интеграции и доставки продукта - частые релизы
  • распределение ролей по исполнителям
  • дизайн-ревью задач разработчиками, минимализация необходимости код-ревью

Для меня важно в сотрудничестве с компанией, разделение позиции, что коммуникации и процессы важнее попытки ускорить всех разработчиков, чтоб выдавали как можно больше фич в единицу времени. Вероятно мы не сработаемся, если принципы компании - мерять эффективность программистов через KPI и требовать оценки всех задач в часах, используя это как попытку замотивировать. Либо внедрения карго-культов под названием скрам, в отрыве от реальных проблем.

Открыт для предложений, где 50% участие в архитектурных решения, и 50% менеджмент и процессы. Идеально - роль играющего тренера. Так же рассмотрю и сильный перекос в разработку в интересных продуктах.

Увлекаюсь горными лыжами и вело-туризмом.

Опыт работы

  • Федеральный контактный центр
    Санкт-ПетербургОт 1000 до 5000 сотрудников
    Software IT Architect / Product owner
    Октябрь 2019 — По настоящее время (2 года и 8 месяцев)

    При устройстве в компании использовалась купленная платформа написанная на PHP в связке с Asterisk и модифицированная версия с тем же подходом, но новым фреймворком PHP.
    Главная проблема - одна связка платформы выдерживала до 150 операторов онлайн в старой версии и до 80 в новой. Первым шагом были заменены коммуникации с Asterisk с php скриптов на go сервисы, что позволило поднять планку по онлайн операторам до 150-200.
    Следующим шагом было проектирование с нуля новой платформы, которая поддерживает общий пул операторов с возможностью масштабирования до 1000+. В результате чего коммандой была создана платформа с pbx-серверами на базе FreeSwitch и набором golang сервисов для оркестрации и реализации логики диалпланов.

    В первый год. Первые сервисы на golang написал самостоятельно. Для развития бэкенда нанял одного middle golang программиста, постепенно своё участие в разработке на go сводил к минимум. Фронт решено было отделить от проектов на PHP и делать выделенными фронтенд-программистами в едином SPA на vue.js. Для реализации этого был выделен фронтенд разработчик из отдела и привлечён новый middle vue.js программист. Для непрерывной доставки нового бэка и фронта обучил системного администратора линукс-серверов разворачиванию Kubernetes кластеров для staging и production окружения, а так же практикам инфраструктура как код. Настрил CI/CD в gitlab для автоматической доставки новых коммитов в тестовое и боевое окружение.

    Второй год. Провёл исследования по проектированию распределённой единой системы телефонии, консультировался со специалистами в этой области и составил план реализации новой платформы. Участвовал в найме voip-инженера, для закрытия потребностей по текущим задачам и новой разработке. Закрыл новую позицию на middle-go программиста.

    • Итерационно настраивал процессы по мере ввода новых разрабочиков. 
    • Занимался согласованием требований задач, обсуждением и согласованием вариантов реализации фич с постановщиками, а так же объяснял необходимость приоритезации для реалистичных ожиданий. 
    • Проводил первичную декомпозицию задач/проектов.
    • Исследовал наличие готовых продуктов, способных ускорить/упростить реализацию задач.
    • Внедрял DDD и Clean Architecture практики в процесс разработки.
    • Обучал коллег, по подходам и инструментам в которых обладал углублёнными знаниями.

    Что было сделано не очень:

    • На начальных стадиях, когда отсутствовали какие-либо процессы, внедрение различных практик растягивало доставку первых фич по сравнению со старыми подходами, из-за чего было непрозрачно для руководства целесообразность нововведений. Правильным было б, выстраивать более прозрачные коммуникации и доносить корректные ожидания, включая цели и обоснования новых изменений.
    • Проработку задач и коммуникацию с заказчиками лучше было выделить в отдельного исполнителя, т.к. закрывать слишком разные роли собственными силами не очень качественно и эффективно. Освободившееся время помогло б в помощи разработчикам по проработке тех. решений и ускорило выпуск продукта.

    Что было сделано хорошо:

    • Разделение на фронт и бэк на разных исполнителей сильно повысило качество продукта, т.к. сложно на хорошем уровне разбираться сразу в разных областях.
    • Добавив стадию согласования на себя функционала и требований к продукту, часть очень трудоёмких задач удалось отфильтровать до разработки, а в производство пропускать самые важные фичи на данный момент. 
    • Автодеплой, мониторинг, алертинг и аггрегатор ошибок - убрал нагрузку с разработика по ручному выкладыванию изменений в прод и свёл ошибки до минимума. При диагностике проблем, кнопкой откатывалась версия к предыдущей.
    • Новый функционал по конструированию сценариев для операторов, сократил в разы затраты в часах на сопровождение и разработку сценариев специалистами. Роль - продакт и техлид.
    • Функционал по ведению компетенций и потребности операторов для нужд проектов избавил от необходимости использовать для этих целей различные гугл-таблицы, и сделал прозрачнее процесс с моментальным выводом необходимой аналитики. Роль - продакт и техлид.
  • колл-центр
    Санкт-ПетербургОт 100 до 1000 сотрудников
    Senior full-stack developer
    Январь 2015 — Октябрь 2019 (4 года и 10 месяцев)

    Была поставлена задача - разработать веб-платформу, которая сделает прозрачными процессы колл-центра и будет единым рабочим местом как для операторов, так и административному персоналу.

    Личный вклад:

    • согласовывал задачи с бизнес-заказчиком и производством
    • проектировал систему
    • разрабатывал основную кодовую базу
    • провёл несколько собеседований разработчиков и нанял 2 программистов
    • настраивал бэкапирование и развертывание системы

    Тех. стэк: Django, can.js, require.js (позже webpack), MongoDB, MySQL, Elasticsearch, Rancher v1 - оркестрация контейнеров, Celery(RabbitMQ), Tornado(для вебсокетов).

    В 2018 году Rancher был заменён на Kubernetes.  

    Главные фейлы:

    • MongoDB использовал для хранения тикетов из различных источников с разной структурой и набором общих полей. Для задач аналитики приходилось применять unwind, что плохо сказалось на производительности. Решил проблему денормализаций документов в той же монге. Оптимальней было б выбрать реляционную базу, и все произвольные поля хранить как json в текстовом поле. 
    • Для фронтенда был выбран can.js фреймворк - простой и минимальное кол-во шаблонного кода, по сравнению с Marionette.js. Простота и не очень большое комьюнити приводило местами к затратам времени, которые съедали ранее полученную экономию.
    • При переходе с Rancher на Kubernetes, для хранения загружаемых файлов был выбран rook, который под капотом поднимал ceph кластер. Кол-во проблем при эксплуатации было довольно много. В условиях жесткого бюджера, стоит избегать сложных систем и выбирать достаточно простые в сопровождении компоненты.
    • Центральной частью платформы был старый сторонний софт для колл-центра - ViciDIAL. Не смотря на то, что в целом он выполнял свои функции, привносил довольно много проблем - периодически сбоил и портил данные. Когда вся система опирается на сторонний софт низкого качества - стоит инвестировать в избавлении от данной зависимости как можно раньше, если из всего функционала коробочного продукта используется небольшая часть, которую проще реализовать самостоятельно чем лечить последствия.

    Достижения:

    • Разработанная платформа решала поставленные задачи бизнеса и помогала управлять полным циклом проектов. Единовременно в системе работало до 100 операторов.
    • Система помогала в планировании ресурсов колл-центра, с помощью машинного обучения строились прогнозы по кол-ву вызовов по часам и расчитывалась потребность в операторах, включая рекомендации где не хватает либо избыток.
  • Частная практика, работа без зачисления в штат
    Санкт-ПетербургБолее 5000 сотрудников
    Senior full-stack developer
    Октябрь 2014 — Январь 2015 (4 месяца)

    Был главным разработчиком CRM системы для организаторов мероприятий captis.ru Комманда была из двух full-stack программистов. Занимался постановкой задач, согласованием с заказчиком, code-review и приёмкой.

    Бэкенд был написан на Django, а фронтенд на Marionette.js (Backbone.js) и деплоился в Amazon AWS с облачной базой MySQL и инстансами бэкенда в двух регионах.

  • Телекоммуникации для бизнеса
    Санкт-ПетербургОт 100 до 1000 сотрудников
    Руководитель группы разработки
    Декабрь 2012 — Октябрь 2014 (1 год и 11 месяцев)

    Старая система биллинга имела ряд недостатков, главный - долгий расчёт выставляемых счетов клиентам. Коллеги спроектировали новую схему БД с набором бизнесовых процедур. На себя взял разработку новых интерфейсов в ранее созданной платформы для гибкого и удобного процесса ведения тарифных планов, тарифных сеток, и др. разделов, которые сократили часы инженеров, занимающихся ведением информации.

    • Перенёс сервис отвечающий за работу домашних сетей на новую архитектуру, в результате кол-во обращений с критическими проблемами сократилось в 15 раз
    • Выявил и устранил причину зависания личного кабенета домашних сетей в дни списания абонентской платы, которая приводила к массовым обращениям клиентов два раза в месяц.
    • Переписал синхронный код RPC сервиса на python для управления операторским оборудованием на ассинхронный с использованием фреймворка twisted, что решило проблемы деградации сервиса под нагрузкой и привело к более стабильной работе связанных подсистем.


      Ведущий инженер-программист
      Апрель 2009 — Декабрь 2012 (3 года и 9 месяцев)

      Перевёлся в другой отдел для помощи коллегам в разработке интерфейсов к собственной биллинговой системы. Имея опыт строительства больших продуктов на Delphi - спроектировал систему и распараллелил процесс разработки на группу из 3х программистов.

      • Система была поделена на модули (контексты), где каждый модуль был подгружаемым dll. 
      • Ядро программы - набор интерфейсов связанных с авторизацией, хранением конфигов, регистрацией в меню, и др. 
      • Для быстрой разработки сделал наследуемые типовые шаблоны форм для различных кейсов. Простые разделы после постановки задачи доставлялись пользователям за несколько часов.
      Веб-программист
      Апрель 2008 — Апрель 2009 (1 год и 1 месяц)

      Научился веб-разработке на python (фреймворк Django), до этого сайты писал на PHP (Zend Framework).

      • Дорабатывал captive-портал для WiFi-сетей (страница авторизации при подключении к публичным WiFi провайдера).
      • Проектировал и реализовывал интерфейс управления ДНС записями.
      • Разработал с нуля личный кабинет для юридических лиц.
    • Разработка ПО для оконного бизнеса
      Санкт-ПетербургОт 10 до 100 сотрудников
      Инженер-программист
      Сентябрь 2007 — Апрель 2008 (8 месяцев)

      Участвовал в разработке основного продукта компании - платформа для комплексной автоматизации крупных оконных предприятий на Delphi.

      Так же работал с коммандой над новой версией на языке C#.

      Основная кодовая база была написана очень сильными разработчиками. Научился и узнал как строить большие коробочные продукты. Впервые познакомился с применением в промышленной разработке паттернов фабрик и интерфейсов Delphi которые позже пригодились в разработке с нуля нового продукта.

    • Петротрест
      Санкт-Петербург
      Системный администратор
      Октябрь 2006 — Сентябрь 2007 (1 год)

      Научился обжимать витую пару и обслуживать СКС.

      • Администрировал сеть на базе MS Server 2003, ISA server, Exchange
      • Разрабатывал и внедрял систему учёта офисного оборудования
      • Сделал справочник сотрудников на PHP
      • Писал скрипты по резервированию документов и баз на Python
    • Аксон
      Санкт-Петербург
      Инженер-программист
      Январь 2006 — Сентябрь 2006 (9 месяцев)

      Через пол года после получения диплома поехал покорять it-компании культурной столицы. Работу нашёл на 5-й день по объявлению в газете, условия были не фонтан, но коллектив калоритный и сильно отличались от коллег заводчан вовлечённостью и профессионализмом.

      • В первом проекте реализовал систему учёта доступа по бесконтактным картам, но проект остался только на тестовом стенде.
      • Разрабатывал систему складского учёта, по примеру похожего продукта компании для мебельного магазина.
      • Участвовал в разработке модулей АС печатного производства предприятия "Печатный Двор им.Горького".
      • Реализовал расширение к базе FireBird на Си для работы с XML содержимым внутри поля.

      Стек технологий: Delphi, FireBird, MySQL.

      DelphiPythonFirebirdMySQLC
    • ФГУП СПО Арктика
      Северодвинск
      Инженер-программист
      Январь 2004 — Январь 2006 (2 года и 1 месяц)

      Первая работа программистом во время учёбы в институте.

      Здесь впервые научили языку Delphi и работы с большими СУБД с хранимками - Oracle pl/sql. Судя по тому, что база на весь филиал завода была одна и периодически падала - учился за зп инженера в 5тр не только я.

      • Первый и основной проект - система учёта приборов. Устанавливать программу на рабочих местах и обучать заводчан привыкших к бумажным системам учёта приходилось самостоятельно.
      • Второй проект, в котором немного принимал участие - обработка базы электро-кабелей авиакрейсера Адмирал Горшков от проектного бюро и извлечение необходимых срезов данных для нужд завода по модификации авиакрейсера.

    Высшее образование

    • СПбГМТУ

      Санкт-Петербургский государственный морской технический университет
      Санкт-Петербург292 выпускника
      Вечерне-заочный
      Сентябрь 2000 — Июнь 2005 (4 года и 9 месяцев)

      Программное обеспечение вычислительной техники и автоматизированных систем.

      Топ учебных проектов:

      1. Нейронка обучаемая с учителем на 3D объектах реализованное на С++ Builder - как не странно в начале нулевых машинное обучение уже было не новой технологией. 3D рендеринг объектов на канве был написан с нуля, с закрашиванием видимых полигонов путём вычисления Z-индекса.
      2. Компилятор с визуализаций разбора токенов в дерево синтаксических связей и выводом каждого шага оптимизации - последней операцией генерился компилируемый ассемблерный код. Реализовано на С++ Builder.

      Дипломная работа - приложение для учёта приборов при ремонте и строительстве судов, которое было внедрено на заводе вместо бумажных карточек. Работа была опубликована в сборнике докладов "Проблемы корабельного машиностроения. Выпуск 4" г.Северодвинск 2005.

    Дополнительное образование