Привет! Меня зовут Илья, я директор департамента разработки в ЮMoney. За каждым малозаметным обновлением может стоять месяц работы: проработка архитектуры, дизайна, код-ревью и множество проверок безопасности. В ЮMoney мы смогли совместить тщательный контроль с бешеной скоростью — и делаем до 100 релизов в день. Расскажу, как мелкие задачи спасают от больших рисков и что помогает нам «катиться» быстрее.

Какие процессы влияют на задержку разработки

Продукт проходит много этапов перед выходом в продакшн. За малозаметными изменениями скрывается большая работа разных команд. Некоторые этапы длятся дольше других:

  • Техрешение требует времени для интеграции в архитектуру. Без апрува архитектурного комитета разработку не запускаем.

  • UI-исследования дизайнеров определяют логику продукта. Мы стараемся не начинать разработку без проработки интерфейса.

  • Код-ревью раньше назначали всем разработчикам отдела. И код мог не проверить никто из-за коллективной ответственности. В итоге мы наладили процесс код-ревью. Теперь алгоритм автоматически назначает задачу на 2-3 участников команды + внешнего эксперта. Сокращение количества участников ускорило процесс.

Также важно до начала разработки точно оценить задачи­­ в стори-поинтах (SP). У каждой команды своё понимание, сколько SP может весить задача на их проекте. Бывает, разработчики оценивают задачу слишком позитивно, при этом время разработки может увеличиться. Важно извлекать уроки для точности будущих расчётов.

Что помогает ускорить разработку в финтехе

Скорости мы достигаем за счёт автоматизации и грамотной декомпозиции задач.

  1. Декомпозиция больших тасок на мелкие. В среднем разработчик тратит на одну задачу около полутора дней. Мы не даём задач на месяц и больше — ими сложно управлять, высок риск потери времени.

  2. Код-ревью с ограниченным числом специалистов. Ускоряет проверку, исключает перекладывание задач, не размывает обязанности.

  3. Интеграционные автотесты после код-ревью. У нас их несколько тысяч на всю систему. Ручное тестирование дало бы один релиз в неделю вместо нескольких сотен. Автотесты сокращают время и гарантируют качество.

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

Когда я пришёл в ЮMoney в 2014 году, все релизы делались вручную релиз-менеджером. На это уходил целый день, плюс ещё один закладывали на выкатку. Сегодня автоматизация ускорила процесс в сто раз.

Как мы выкатываем релиз безопасно

Все наши релизы — канареечные (подробнее в этой статье). Мы выкатываем релиз только на 5% трафика и наблюдаем ошибками: если на сервере ничего не сломалось, катим дальше на все сервера, иначе — откатываем и чиним.

Человек решает только одно: катить дальше или возвращаемся назад. Остальное делают алгоритмы.

Мы используем набор практик для безопасного написания кода — SSDLC (Secure Software Development Lifecycle):

  • Тестировщик проверяет бизнес-логику согласно требованиям продуктового менеджера.

  • Параллельно с этим запускается автоматический процесс проверки исходного кода и внешних библиотек на предмет уязвимостей.

  • Специальное ПО проверяет каждый пулл-реквест на соответствие регламентам и требованиям безопасности.

  • Проводим статический анализ каждого пулл-реквеста: программа анализирует код на уязвимости.

  • Запускаем динамический анализ DAST, когда программа пытается взломать наш код.

Итог

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


А что вам удалось автоматизировать и тем самым улучшить процесс? Делитесь своими наработками в комментариях. Буду рад обменяться опытом.