Как гибкая архитектура стала новой стратегией «Леруа Мерлен», а её айтишники получили свободу действий

И главное — как это сказывается на клиентах.

Как гибкая архитектура стала новой стратегией «Леруа Мерлен», а её айтишники получили свободу действий
Арно Фётри
архитектор предприятия и лидер трансформации «Леруа Мерлен»

Компания изменилась, потому что изменился рынок

До 2014 года «Леруа Мерлен» развивалась как любой другой традиционный ритейлер: ежегодно расширяла сеть физических магазинов, медленно развивала сайт — данные по ассортименту обновлялись редко и часто не соответствовали действительности. ИТ-ландшафт состоял из монолитных систем, одна часть которых поставлялась вендорами, а другая была наследием общекорпоративных решений, принятых на уровне группы ADEO, в которую входит компания.

«Когда ты отдаёшь в руки вендора управление жизненно важными системами, ты отдаёшь в его руки стратегию. Становится невозможно что-то менять, ведь всё зависит от другой компании и её готовности менять свой монолит», — говорит Арно Фётри, архитектор предприятия и лидер трансформации «Леруа Мерлен».

Примерно в том же 2014 году в России стал укрепляться тренд под условным названием ROPO («research online, purchase offline»): клиенты стали искать нужные товары в интернете, изучать их и только потом приходить за покупками в офлайн-магазины. Сторонние сервисы доставки также начали активно развиваться, и то, что раньше было преимуществом «Леруа Мерлен» (широкая представленность офлайн-магазинов с широким ассортиментом в разных городах), перестало быть таковым.

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

Домены, или продуктовые команды по-новому: с чего решили начать

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

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

«В 2018 году мы решили переходить от модели омниканальных продаж к модели компании-платформы и экосистемы. Портфель стал слишком разнообразным: и услуги для покупателей, и маркетплейс, и работа с партнёрами-поставщиками, и с профессиональными клиентами. Нужно было принципиально менять подход к построению взаимодействия внутри команд», — вспоминает Арно.

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

Для пилота выбрали два направления — окна и кухни: и в том, и в другом у нас было много конкурентов с качественным сервисом. Мы же в силу неповоротливости ещё им уступали, но имели серьёзные амбиции по завоеванию этих рынков. К тому же и окна, и кухни — комплексные проекты, а не просто отдельная товарная группа».

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

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

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

В итоге мы сформировали принципы новой — составной — архитектуры компании:

  • Модульность (Modularity) — разделение любой системы или процесса на множество независимых модулей. Они могут комбинироваться для изменения бизнес-процессов и создания новых бизнес-моделей.
  • Связность (Connectivity) — возможность быстро интегрировать модули и гарантировать прозрачный обмен информацией между ними.
  • Рациональность (Rationality) — оптимизация ресурсов и команд. Не нужно каждый раз изобретать велосипед. Эффективность достигается за счёт максимального повторного использования уже готовых программных компонентов и Inner Source.

Следуя принципу модульности, мы внедрили систему доменов: каждый состоит из операционной и продуктовой команд. «Операционные команды придумывают для клиента и партнёра обёртку, а продуктовые — разрабатывают эту самую обёртку и делают всё, чтобы она выполняла свои задачи», — поясняет Дмитрий Мышков, продуктовый лидер домена «Услуги». При этом у команд в домене единые цели и KPI, но каждая обладает своими бизнес-компетенциями (business capabilities). Инициатором любого изменения может быть и продукт: ведь если у команд единые цели, улучшения предлагают и те, и другие.

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

Как гибкая архитектура стала новой стратегией «Леруа Мерлен», а её айтишники получили свободу действий

Такая архитектура позволяет «Леруа Мерлен» безболезненно отказываться от неэффективных решений и быстро создавать новые автономные модули, если того требует ситуация.

В 2020 году во время пандемии, например, компания за три дня реорганизовала работу в условиях карантина и переформатировала физические магазины в дарксторы, из которых заказы отправляли с доставкой или выдавали на самовывоз.

«Мы знали, что от составной архитектуры (composable architecture) будут одни плюсы, но что их столько — даже не ожидали», — говорит Арно Фётри.

Почему? Во-первых, айтишники, как оказалось, зачастую гораздо лучше операционных отделов понимают, как оптимизировать процессы.

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

В-третьих, продукты «Леруа Мерлен» теперь настолько качественно проработаны, что их можно поставлять внешним пользователям. Пример: Platformeco — лоу-код-платформа для создания и управления API и микросервисами. Она создавалась для внутреннего пользования в командах, а теперь успешно внедряется в крупных компаниях из совершенно разных отраслей.

Домен «Услуги»: от заложенного фундамента до подшитых штор

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

В «Леруа Мерлен» этим занимается домен «Услуги». У него много кросс-функциональных задач, причём на разных этапах клиентского пути. Именно он ищет исполнителей, помогает клиенту заказать услугу, сопутствующую основной покупке (например, установить приобретённую дверь), и уведомляет его о визите мастера. На этот опыт также влияет та самая составная архитектура. Например, дома клиент добавляет нужные ему товары и услуги в корзину, а в магазине открывает её — и строит проект с той же точки.

Каждый процесс на пути пользователя — это, по сути, отдельный продукт. Они создаются из отдельных API-компонентов, которые автономны и почти не зависят друг от друга, и неважно, создание ли это заказа онлайн, сборка товаров на складе или доставка на дом. Всего у продуктов три слоя:

Как гибкая архитектура стала новой стратегией «Леруа Мерлен», а её айтишники получили свободу действий
  • Объектные API (object API). Решения для работы с базой компании — репозиторием корпоративных концепций. Это могут быть мастер-данные по продуктам, ассортименту, ценам: что поставщик предлагает и какие у этих товаров и услуг цены, характеристики и вводные.
  • Функциональные API (function API). Здесь продуктовые команды строят API, которые позволяют сотрудникам, партнёрам и клиентам с мастер-данными из предыдущего пункта взаимодействовать: создавать новые, читать имеющиеся, изменять их или удалять (это базовые функции, которые ещё обозначают акронимом CRUD).
  • Диалоговые API (experience API). Фронтенд-интерфейсы, которые видят поставщики, партнёры и клиенты. Они запускают и «орекстрируют» функциональными API. «Это своеобразные „объяснялки-навигаторы“. Клиент исследует сайт, смотрит на товары, добавляет что-то в корзину, а мы ему подсказываем, что он может купить ещё: например, если он выбрал ванну, возможно, ему захочется её установить или изменить её дизайн», — объясняет Фётри. Для этого компания строит графы на основе анализа пользовательских действий и формирует пользовательские пути для разных категорий.

В компании два типа продуктовых команд. Первые работают над базовыми (core) продуктами — например, для приёма заказа, доставки на склад, последующего хранения и сборки. Всё это разные функции и, следовательно, разные API. Но на бэкенде эти API абсолютно идентичны как для магазинов, так и для складов и дарксторов. А вот интерфейс для них нужен разный, и за эту фронтенд-часть отвечают уже другие продуктовые команды: они «визуализируют» пользовательский опыт. Так что за базовые продукты будет отвечать команда, состоящая прежде всего из продакт-менеджеров, технических аналитиков, архитекторов решений, дата-инженеров и разработчиков. А за пользовательский опыт — UX- и UI-дизайнеры и, может, один-два разработчика.

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

Но чаще он, наоборот, выступает главным — управляющим. «Мы занимаемся полным жизненным циклом услуг и отвечаем за листинг и формирование ассортимента. Так что именно к нам обращаются остальные бизнес-департаменты: если нужно включить услугу в каталог или рассчитать её стоимость. Мы — поставщик мастер-данных и функций. Остальные — наши потребители», — объясняет Дмитрий Мышков, продуктовый лидер домена «Услуги».

Какие технологии используются доменами

Все домены «Леруа Мерлен» организованы по трёхслойной архитектуре. Бэкенд-разработчики работают с объектно-ориентированным языком Java, а теперь ещё с Kotlin. Фронтед-программисты — с JavaScript-библиотекой React. А инженеры, которые создают «прослойку» между клиентской стороной и программно-аппаратной частью сервиса) — с программной платформой Node.js.

Выбор инструментов объясняется просто. Во-первых, так сложилось исторически, и запросам они по-прежнему отвечают. Во-вторых, когда компания наращивала ИТ-мощности, она ориентировалась на те языки и движки, с которыми работало большинство разработчиков, — те же Java и React. Java — универсальный язык и поддерживает самые разные типы систем: базы данных, бизнес-процессы, микрофункции. А React на конец 2010-х казался перспективным трендом. «Многие тогда вкладывались в разработку на платформе Angular, но мы поставили на React и не прогадали. Сейчас специалистов с этими навыками больше», — говорит Дмитрий Мышков.

Разработчики часто придерживаются особых взглядов и на системы, и на языки. Но дать им абсолютную свободу компания не может: между слоями архитектуры должно быть однообразие, иначе не получится синхронизировать работу, особенно в условиях открытого кода.

Составная архитектура, как мы говорили выше, следует принципу рациональности. Вот его иллюстрация: если потребуется самостоятельно изменить структуру данных или запустить новую функцию, достаточно запросить доступ к коду продукта. Эта концепция ещё называется Inner Source — открытый код, доступный всем внутренним разработчикам.

Чтобы принимать правильные архитектурные решения, в компании есть технический директор, его работу «поддерживают» технические лидеры каждого домена и технологический стек. Это инструмент, который показывает, какие технологии компания использует в проектах сейчас, к каким присматривается и какие решения морально устарели. В «Леруа Мерлен», например, долгое время работали с принципом сервисной шины — когда системы обмениваются сообщениями через единую точку. Однако он давно утратил ценность, и вскоре компания окончательно перейдёт на архитектурный стиль REST.

Технологии вне стека использовать нельзя, но любые технологии можно выдвинуть на рассмотрение. Домен «Услуги», например, видит интерес к языку программирования TypeScript, а также фреймворку Nest.js. Все идеи будут в отдельном порядке рассматривать на архитектурном комитете и технический директор, и техлиды в рамках каждой платформы и каждого отдельного домена.

Микросервисная архитектура как испытательный полигон

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

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

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

Преобразующим нововведением стал запуск биллинговой системы — автоматизации расчётов. Раньше компания работала с платёжными системами вендора, и партнёр получал выписку по заказам и прибыли только раз в месяц. Но число партнёров у «Леруа Мерлен» росло, особенно за счёт услуг, — так что продакты построили для них «умный» движок. Он сам рассчитывает комиссию, определяет способ платежа и присылает выплату сразу после оплаты заказа.

Без вызовов, впрочем, тоже не обходится. В трансверсальных проектах «заказчик» может быть не определён. А когда над проектом работает сразу несколько команд разных «профилей», синхронизироваться получается не всегда. «Как-то раз мы занимались разработкой функций для трансверсального проекта. Один из наших продуктов сопровождал только часть UJM. Когда мы подошли к этапу тестирования, то поняли, что не можем пройти изолированный UAT без полноценного end-to-end — ведь мы не могли симулировать другие продукты и могли сломать путь пользователя. В результате масштаб end-to-end-теста, который учитывал бы путь пользователя по всем продуктам цепочки, оказался гораздо больше, чем мы предполагали. Полноценный тест со всеми командами занял ещё два спринта», — вспоминает Дмитрий Мышков.

Но сами продакты считают, что совместные проекты — это не только способ набить шишки, научиться работать согласованно и нести ответственность за свою часть задач, чтобы не подводить другого. Такое взаимодействие позволяет более рационально использовать ресурсы. При этом каждая команда видит, как она влияет на конечный результат и как много от неё зависит.

2424
20 комментариев

Комментарий недоступен

1
Ответить

Спасибо за вопросы и вовлеченность!
ERP от oracle. С 2021 года начали процесс распила монолита на микросервисы, об этом опыте можно почитать тут https://rb.ru/opinion/ot-monolita-k-mikroservisam/
Правки и изменения тоже вносятся через Platformeco, в ней можно смоделировать и раскатать новый бизнес процесс, и за счет дрэг-энд-дроп интерфейса оперативно менять существующие. Мониторинг и алертинг в режиме реального времени покажет, где и что не работает.
Переходить полностью на Kotlin не планируем, при создании нового сервиса всегда взвешиваем все плюсы и минусы и выбираем оптимальную технологию.
В компании мы используем не тех радар, а технологическую таблицу https://leroymerlin-tech.ru/stack/table/, в которой указываем в каком конкретно случае надо использовать ту или иную технологию. Как раз об этом и том, как устроен процесс архитектурного комитета, читайте в нашей новой статье на следующей неделе)

7
Ответить

Комментарий недоступен

1
Ответить

У вас заказы в личном кабинете для Б2Б обрабатываются в Москве. Местные менеджеры в Самаре просят заказы на ватсап скидывать иначе они их не видят. Вчера 40 минут ушло, чтобы заказ забрать.

Какая система... ))))))

1
Ответить

Это типа прощальный текст ради добивания бюджета на маркетинг перед уходом из РФ?

1
Ответить