Привет! Меня зовут Екатерина Бадалян, и я – руководитель центра компетенции разработки блока ИТ-развития корпоративного бизнеса в «РСХБ-Интех» (IT-компания АО «Россельхозбанк»). Моя команда в течение девяти месяцев работала над новым решением для мониторинга банковских сделок в РСХБ. Мы создали многие блоки с нуля и фактически полностью пересмотрели и переработали продукт, сформировав новую функциональную user-friendly систему. Ей уже успешно пользуется бизнес-подразделение Россельхозбанка. О том, как мы в столь сжатые сроки выстроили работу внутри команды и с заказчиком, с какими трудностями столкнулись,  как внедрили современные решения и доработали то, что осталось от исторического процесса автоматизации, а главное – безболезненно перенесли на новый стек свыше 37 миллионов мониторингов, я расскажу в этой статье.

Замысел

Наш клиент использовал для автоматизации процессов мониторинга условий кредитных сделок корпоративных заемщиков legacy-систему, написанную в 2012 году на толстом клиенте WinForms в сочетании с устаревшими библиотеками DevExpress (на двухзвенной архитектуре). Причем работала эта система в более чем 60 филиалах банка, которые не только отслеживали условия кредитования, но и формировали в ней отчеты разного уровня (некоторые из них были очень массивными). Из-за использования устаревшей технологической платформы и ежедневно растущего объема данных быстродействие решения постоянно снижалось и кратно возрастало количество технических сбоев. Оперативность отклика в период пиковых нагрузок замедлилась, возникали сложности с внесением данных. Мы пришли к точке, когда качественно развивать и улучшать систему стало уже невозможно, а поддерживать и сопровождать текущее решение – крайне сложно.

Тогда мы с менеджером проекта подготовили для бизнес-заказчика предложение по реализации совершенно нового и современного проекта с конкретным планом действий.

Был составлен список всех необходимых работ, сопоставлены каждому виду работ предполагаемые оценки, добавлен «запас» на возможные проволочки и неизвестность (к слову, мы впервые шли на такие радикальные шаги и были взволнованы предстоящими переменами) и обучение команды.

Оценка задач и планирование по месяцам в зависимости от ресурсов и емкости задачи
Оценка задач и планирование по месяцам в зависимости от ресурсов и емкости задачи

Когда мы подробно расписали и предварительно оценили скоуп задач, ожидаемый срок реализации проекта превысил год. Однако такой таймлайн заказчику не подошел – подготовку ежегодных отчетов было критично начать уже в новой системе: таким образом, нам потребовалось сократить срок на ¼ - до 9 месяцев. Приняли решение остановить все доработки старой системы, кроме критических, и бросить силы в новую разработку.

Чтобы весь процесс прошел успешно, мы применили следующие фишки планирования в сжатые сроки:

  • Карта продукта (User Story Mapping): мы разделили предполагаемую доработку на релизы, а также расставили приоритеты между доработками внутри каждого намеченного релиза от жизненно необходимых функций до удобств и пожеланий на будущее развитие (мы рисовали «скелет» полностью, постоянно корректировали, тщательно отделяли «критичное» от просто «нужного»).

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

  • Более активное вовлечение заказчика в работу команды:  Владелец продукта должен быстро принимать решения, согласовывать и определять методологические подходы (понятная карта полномочий внутри задачи, договоренность на старте «по каким правилам мы работаем»).

  • Настройка режима работы в команде и продуктивность: прозрачную витрину задач (Владелец продукта понимает цену переделок и ошибок, команда каждый спринт показывает предсказуемый «выхлоп»).

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

    Бэклоги и доски мы настраивали полностью под себя (как нам понятно и удобно):

Доска задач команды на спринт
Доска задач команды на спринт
Наглядное планирование в Excel всех задач бэклога по исполнителям и трудоемкости
Наглядное планирование в Excel всех задач бэклога по исполнителям и трудоемкости

Основная сложность проекта заключалась в ограниченных сроках для разработки без реальной возможности их переноса. У нас было 7 месяцев на разработку, 2 – на тестирование, опытную эксплуатацию, миграцию данных, обучение пользователей и внедрение, вместо рассчитанных комфортных 14 месяцев на проект. Как и следовало ожидать, поставленные сроки и ожидания оказались слишком оптимистичными - трудностей  и различных проблем в процессе реализации выявилось на порядок больше. Тем не менее, установленные Заказчиком сроки были соблюдены. Как?

Что помогло нам достичь нужного результата в установленные сроки:

  • Уменьшение объёма работ к первому релизу за счет планирования

    Благодаря USM и планированию мы выделили самый важный функционал, без которого нельзя идти в продуктив, в первый релиз, тем самым отбросив все дополнительный функции и задачи на последующие релизы.

  • Грамотные владелец продукта (Сергей Бирюков) и менеджер (Елизавета Лощинина)

    Product owner управлял командой и по-настоящему вовлекся в разработку, поэтому требования оперативно приоритизировались, а карта связанных задач корректировалась (Владелец защищал требования перед подразделениями банка, поэтому практически исключились все изменения во время или после реализации), а главное он «слышал» команду и помогал решать все возникающие проблемы. Несмотря на небольшой опыт на старте работ, Product Owner инвестировал личное время в то, чтобы разобраться «как все работает» и прислушивался к мнению команды и возможностям (подход «хочу», поменялся на «что мы сможем»).  

    Также, большую роль сыграл менеджер проекта, который жестко контролировал все сроки и этапы, вдохновлял команду в сложные периоды, настраивал все взаимодействия внутри команды и вне, и очень глубоко погружался абсолютно во все вопросы, этапы и части создания системы, а я, в свою очередь, помогала менеджеру на старте работ, а затем в организации всего процесса в целом и наставничеством. Наш путь оказался сложным, несмотря на это, Лиза всегда сохраняла боевой настрой, заряжала команду. Когда мы не понимали, как справиться с ситуацией, сидели по вечерам – мозгоштурмили, чтобы исправить положение, ограждали от сомнений и переживаний команду, по крайней мере старались решить трудности с заявками-соседними командами-сроками-созданием «железа»-препятствиями и так далее – менеджерами и тимлидом разработки.  

  • Мотивированность команды идеей

    Из-за большой вовлеченности команды в задачу (как со стороны разработчиков, так и со стороны владельца), команда была готова к сверхусилиям. И это оказалось ключевым преимуществом, команда совершила «чудо» несмотря на все прогнозы и сложности. Вместе мы шли к общей цели и горели задачей.
    Кроме того, тимлид Аркадий постоянно придумывал для разработчиков «фишки»: шутки, голосовалки, смайлики, наборы мемов, обучение – все это поднимало настрой и объединяло.

  • Наращивание ресурсов

    Возникли сложности при поиске в открытом рынке – не удавалось быстро подобрать новых разработчиков и других специалистов с опытом в используемых технологиях. Стало понятно, что проще обучить с нуля начинающих мидлов или джунов, чем затягивать подбор персонала. Также мы начали искать людей по всей России и собрали распределённую команду из разных городов страны.

    Помимо усиления штатной команды мы приняли решение временно (на 4-6 месяцев) привлечь уже сработанную команду субподрядчиков (5 разработчиков, 2 аналитика и тестировщик). Конечно, подключение дополнительных людей занимало время, однако спустя месяц-два усилия окупались. Таким образом, размер команды временно увеличился с 12 до 21 человека  – беспрецедентный объем для Scrum.

    Отдельная ноша упала на плечи менеджера системы и руководителя разработки, так как команда существенно выросла и ей требовалось управлять, обучать новых членов команды, а также объединять коллектив, налаживать командный дух и взаимодействие.

  • Порядок в документации и качественные единообразные требования

    С первых дней мы вели технический проект в Confluence, в том числе создали страничку для аналитиков с описанием библиотеки компонентов, доступной для использования в Системе.

Учиться можно и в процессе

Несколько человек, работавших с момента создания legacy-системы (с 2012-2013 гг.), в том числе руководитель разработки, один за другим, по разным причинам, покинули команду в активной стадии нового проекта. Так, вынужденно, мы остались не только без значимой части команды разработки, но и без накопленных знаний, касающихся принципов и особенностей исторического приложения (до создания нашего техпроекта вся техническая документация велась в разрозненных Word-документах). Значительная часть прежнего функционала вовсе не была описана в документации, так что время от времени приходилось разводить руками и создавать все заново.

При этом из внутренней команды выделился талантливый разработчик Аркадий, который возглавил программистов.

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

Нюансы в процессе реализации

Первоначально задачу по переносу системы в Web-приложение мы видели просто адаптацией всех существующих функций, интерфейсов, логики «один в один», то есть предполагался порт со старого стека технологий на новый. Но что такое – перенос «один в один» десятков тысяч строк legacy-кода, наполненного «костылями» для закрытия технических проблем старого фреймворка, недокументированной логикой, не покрытого тестами и/или комментариями, раскиданного между клиентским кодом и хранимыми в базе данных процедурами? Так что оказалось, что в нашем случае не все новое – хорошо забытое старое.

В процессе работы владелец системы внес концептуальные изменения в логику – от блокировок возможностей пользователей до изменения архитектуры. Оптимизированная бизнес-логика значительно усложнила процесс миграции данных – их надо было не просто перенести, но и в процессе адаптировать под новые вводные организации механизма. Важно было также учесть разносторонность данных: при миграции необходимо было объединить несколько записей в одну таким образом, чтобы исключить интерпретации, возникавшие в разных бизнес-подразделениях. Да и масштаб добавлял сложности – например, объем  только одной из самых крупных таблиц составлял свыше 37 миллионов записей, а таких таблиц были десятки.

Что касается стека, то мы остановились на .Net Core 6.0, Angular 13, Postgres Pro, потому что это «родной» для нас стек.

Пользователь – тоже часть команды

Для нас было важно создать не только функциональный и современный продукт, но и максимально удобный – хотелось, чтобы приложение пользователям понравилось. Legacy-система этим похвастаться не могла – она казалась квестом, в первую очередь для видящих ее впервые: много логики, сложный интерфейс, громоздкие ленты мониторингов и связей. Это и стало причиной концептуальных изменений. Владелец продукта настроил еженедельный обмен обратной связью с филиалами, а работу с пользователями выделили в отдельный блок внутри нашей разработки. На формирование удобного интерфейса был выделен дизайнер.

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

Ближе к дате внедрения из-за изменения пользовательских путей в новой системе понадобился еще один этап: помимо обычной инструкции был подготовлен обучающий курс, в котором виртуальные герои познакомили пользователей с «Н2.0» и правилами работы в ней. К тиражированию дизайнер разработал удобную инструкцию.

Отличный старт

Качественное внедрение Системы невозможно без готовности пользователей в ней работать. Для этого наш Владелец продукта выстроил сложный график внедрения (с учетом технических ограничений по объему данных для миграции), при котором пользователи получали тестовый доступ к Системе на реальных данных, имея возможность некоторое время обучаться на реальных сделках, осуществлять параллельную работу в старой и новой Системах, сравнивая результаты для понимания своих ошибок.

Первый запуск новой системы прошел на группе из четырех филиалов, миграция данных проводилась только для них, точечно. Далее каждые выходные на протяжении 4-х недель (разбили миграцию на 8 выходных дня в связи с техническими ограничениями по объему данных для миграции) у нас происходила «двойная» миграция: одна часть филиалов получали возможность работать в Системе в тестовом режиме, вторая часть переходила уже на опытно-промышленную эксплуатацию.

Получилось, что в течение этого месяца команда работала в режиме «24/7», когда в выходные шла миграция за миграцией, а в будние дни в оперативном режиме решались возникающие у пользователей проблемы и дочищался функционал.

Также, помимо обучающего курса для пользователей, о котором я писала ранее, Владелец продукта проводил «мастер-классы» в формате видеоконференций, на которых рассказывал про концепцию осуществления функционала на новой Системе.

В заключении, мы можем смело заявить, что у нас получилось разработать Систему, которую по-настоящему приняли и полюбили пользователи. Первоначальный «базовый» функционал получилось реализовать точно в срок, система запустилась в апреле 2022 (от первоначальных сроков, которые мы планировали 9 месяцев назад, мы отклонились всего на 1 неделю). На текущий момент «Н2.0» – современная и удобная система для ведения мониторингов по клиентам и отчетности.

Наш результат:

  • В сжатые сроки бесшовно заменена историческая система (толстый клиент) на современное импортозамещенное решение: в пятницу сотрудники сопровождения заканчивали работать в старой системе, в понедельник полноценно продолжали работать с теми же данными уже в новой.

  • Проведена миграция накопленных данных (более 30 миллионов мониторингов) из MS SQL в PostgreSQL.

  • В процессе принципиально изменен подход к мониторингу (оптимизирована бизнес-логика, что значительно усложнило процесс миграции данных – данные были перенесены не просто из БД в БД, но и адаптированы «на лету» под новую логику организации механизма мониторинга).

  • Благодаря проекту у нас сформировалась сильная, сплочённая и мотивированная IT-команда.

  • Создана быстродействующая, надежная с интуитивно понятным интерфейсом современная система, готовая для последующего развития и интеграций с иными IT-системами Банка.

Комментарии (11)


  1. boopiz
    31.10.2022 15:04
    +2

    итого. одно легаси с костылями заменили другим с другими костылями (я представляю сколько их там, если приходилось учиться вебу, не говоря уже про гугловскую поделку) . Ждем обзор, через время от нового менеджера. Как все начало тормозить и надо срочно переводить на новые технологии!


    1. yarkaya Автор
      31.10.2022 15:51
      +1

      Добрый день! Неаккуратные кусочки кода мы отправили на рефакторинг и сейчас поступаем таким же образом (как, впрочем, и написано в статье). Гигиена кода очень важна. С запуска нареканий нет.

      Спасибо за комментарий


      1. boopiz
        01.11.2022 02:05
        +1

        Это пока. Уверен, что в момент запуска предыдущей версии тоже не было нареканий. Ведь все списывалось на наличие и отработку базового функционала (большинство доп бизнес процессов переводятся на ручной режим.. потерпите немного, сейчас мы тут основное допилим) . Все начинается после полноценной сдачи в работу и поддержку. Когда подписаны бумаги, что все слелано и отговорок уже не может быть. А бизнес не ждёт. У него свой техдолг. Первое время как то можно отпинываться, но через пол года, год станет невозможно. Придется начинать выполнять их задачи. А объёмы данных растут, а интеграций всё больше. И начинается самый увлекательный процесс - костылегенерация. Это мы ещё не знаем, как и кто писал самое основное - бэк, как и кем разрабатывалась семантическая модель данных (ведь старые то ушли... или их ушли.. это вопросы и тут только ваша версия). если с кривым вебом, двузвенкой (давно научились справляться, путем кластера терминальных серверов, для узких каналрв и тд) можно жить и прогнозировать, то с кривым бэком, кривой структурой БД и невозможностью ее лёгкой адаптации (потому что писали как умели, а не как надо) вы долго не протянете. совершенно не важно на чем у вас фронт написан. это вкусовщина и особой роли не играет. хоть в Excel. всегда важны данные. их непротиворечивость, скорость отклика на мутации и чтение. По этому. Вы конечно проделали работу за деньги, но радоваться пока не чему. Нужна наработка на отказ. Я более чем, уверен, что когда все у вас начнёт безумно тормозить и сыпаться (а это будет. это объективная реальность. меняются задачи и структура данных) вы не придете и не напишите здесь объективный отчет по этому поводу.


        1. yarkaya Автор
          01.11.2022 11:38
          +1

          Ниже Ваши сомнения развеял разработчик @pavel_horoshun — ознакомьтесь, пожалуйста.

          Предыдущее приложение разрабатывалась в 2012 году, конечно же, за годы технологи уходят вперед.

          Наверное, самое главное качество команды — учиться на ошибках, находить их, признавать и фиксить, а не закрываться костылями.


          1. boopiz
            01.11.2022 14:30
            +1

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


            1. yarkaya Автор
              01.11.2022 16:51

              Мы тоже ставили акцент на бэке, согласна с Вашим компетентным комментарием про его важность. Благодарю за интерес и участие. Если появятся вопросы-идеи, в том числе к разработчику, пишите.


  1. novoselov
    31.10.2022 16:50
    +4

    Из статьи я понял что, нужного результата помогли достичь:

    • грамотный владелец продукта Сергей по-настоящему вовлекшийся приоритизацией

    • боевой менеджер проекта Елизавета вдохновляющая команду жесткими сроками

    • сверхусиленный тимлид Аркадий придумывающий поднятие настроя с помощью мемов

      Сложности создавала только беспецедентная пачка из 21 необученных и неуправляемых ноунеймов


    1. yarkaya Автор
      31.10.2022 18:25

      +


    1. yarkaya Автор
      31.10.2022 18:25
      +1

      Спасибо за комментарий. 

      Отчасти вы правы, задачу покорили люди и их упорство — у нас получилось, благодаря большому желанию и заинтересованности. Мы учились новому, к примеру, брали USM, примеряли, чтобы закрыть определённую цель. 

      Про «пачку» утверждение неверное — опыта у многих членов команды было немного именно в вебе. Как раз из-за управляемости и быстрой обучаемости (и тому, что крепкая база все же была) мы построили систему. 

      Изначально «новая команда без опыта» казалась большой сложностью, но благодаря усилиям и желанию участников, обучение пошло быстро. Команда сплотилась и это позволило взять обороты. 

      Вывод такой:

      • Сильно хотеть, мотивировать друг друга и не бояться инвестировать время;

      • Идти на компромиссы (не программировать все и сразу, а выбрать базу и не ставить перед собой нереальную задачу);

      • Брейнстормить, какие еще варианты для решения одной и той же задачи существуют (как «где взять ресурсы, когда ключевые люди уходят на критичном пути», «как реализировать сложное проще», «как научить хороших и талантливых людей новому быстрее»);

      • Находиться в контакте друг с другом, слышать (а это в ИТ-мир сложно);

      • Исправлять ошибки, когда их нашли.


  1. pavel_horoshun
    01.11.2022 11:31
    +2

    И никто не упомянул аналитиков и тестировщиков :) А стоило. Наши прекрасные девушки и весёлые парни не давали нам, разработчикам, расслабиться - выявляли ошибки в самых сложных местах, где, казалось бы, уже всё предусмотрено. По сути, грань между тестировщиком и аналитиком была не столь явна - каждый старался погрузиться в бизнес-задачи по-максимуму. Ну а там, где компетенций не хватало, подключалась Елизавета и помогала принять верное решение. Способность Елизаветы быть в курсе всех бизнес-требований, возможность удержать всё в голове - это круто, однозначно.
    Ну а нам просто не мешали. В команде всего было 3 ведущих разработчика, были новички и ребята с опытом. Не все выдержали темпа - двое уволились ещё до релиза, и порой приходилось работать за двоих, а иногда и за троих. Зато было интересно. Мы зашли в проект как подрядчики, за плечами был успешно внедренный большой проект с большим стеком современных технологий разработки и множеством собственных оригинальных решений, и для нас это была возможность распространить свои компетенции, внедрить новые идеи и перенять лучшие практики. Аркадий как тимлид шел нам навстречу - не препятствовал внедрению наших решений, наоборот, старался помочь во всём. А мы прокачивались в Ангуларе у Аркадия - благо было чему поучиться.
    Что мы имеем в итоге с технической стороны.

    1. Мощное front-end приложение на Angular с развитым графическим интерфейсом. Использование реактивных форм, RxJs, elfStore позволило построить интерфейс средней и высокой степени сложности с учетом всех требований дизайна и пользователя. Обратная сторона - достаточно высокий порог вхождения, требующий от разработчика глубоких знаний ангулара, веба в целом и определенный интелектуальный уровень.

    2. Модульные тесты для самых ответственных и сложных форм на Ангуларе.

    3. На бэке - паттерны CQRS (simple), DDD (Domain Driven Design), TDD (Test Driven Development), активное внедрение практик SOLID. Изначально было поставлена идея использовать подходы KISS, SRP - и за этим старались следить. Также внедрили ряд интересных решений по бизнес-логике - отдельной статьи заслуживает, например, реализация модуля Контроля и Уведомлений. Другие идеи - обновленная версия аудита, например - ещё внедряется, есть ряд идей, которые пока ждут своей очереди.

    4. Хорошая документация технических заданий. Да, поначалу не всё было гладко, но мы все учились, и в текущий момент аналитики красавцы - пишут грамотные ТЗ с таблицами, диаграммами, проработкой деталей на самом низком уровне. И что мы имеем: современное, перспективное приложение, способное к дальнейшему развитию и привлекающее сотрудников любого уровня - от senior'а разработчика до крутых аналитиков. Так что ждём, когда к нам присоединятся наши новые сотрудники, и готовы к новым интересным задачам.


    1. yarkaya Автор
      01.11.2022 11:42

      Благодарю за поддержку и классные пояснения!

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