Торговля DataArt
5 283

Ocado: как устроен один из самых технологичных в мире онлайн-магазинов

Старший архитектор и менеджер проектов компании DataArt Кирилл Мокшин рассказал о нескольких интересных проектах, созданных совместно с ритейлером.

В закладки

Ocado — крупнейший в мире продовольственный онлайн-супермаркет, доставляющий продукты более чем 600 тысячам покупателей в Великобритании.

В отличие от большинства крупных продовольственных ритейлеров, у Ocado нет собственной сети магазинов. Все товары компания продаёт через веб-сайт и мобильное приложение, доставляя их с автоматизированных складов. Бизнес Ocado требует использования передовых технологий — от голосовых команд Alexa для заказа продуктов до оптимизированной системы доставки.

Практически ежедневно Ocado внедряет новые и обновляет старые решения. За 17 лет в компании были написаны сотни систем и сервисов. Все они создаются проектными командами с нуля специально для Ocado. Те, что я опишу в качестве примеров, появились в разное время, и к моменту выхода материала могут быть заменены более совершенными.

За семь лет работы с Ocado мы сделали многое, но видели только небольшую часть общей картины. На огромную машину, доставляющую десятки тысяч заказов в сутки, работают более 1100 разработчиков. В основном это сотрудники Ocado.

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

У Ocado пять собственных центров разработки: в Англии, Болгарии, Испании и Польше

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

По итогам прошлого года и выручка, и чистая прибыль Ocado выросли примерно на 15%, несмотря на растущую конкуренцию на рынке продовольственного ритейла. Это выше среднего роста рынка. Растёт и количество заказов. Это подтверждение тому, что инвестиции в технологии в ритейле себя оправдывают.

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

Более того, объём разработки позволил Ocado в какой-то момент запустить новое направление бизнеса. Теперь они предлагают другим розничным операторам полный набор технологических сервисов — Ocado Smart Platform (OSP).

Доставка

Мониторинг автопарка в режиме реального времени

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

Точный расчёт времени

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

В результате, если пользователь заказывал продукты в Ocado на один и тот же адрес более трёх раз, расчёт оказывается довольно точным, включая время в пути, парковку и доставку товара от автомобиля до двери.

UX для водителей

Для доставки мы разработали ещё несколько решений разного масштаба. В частности, решили интересную задачу из области user experience водителей с так называемыми sausage fingers.

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

Чтобы облегчить им жизнь, мы создали клавиатуру большего размера и оптимизировали алгоритм ввода данных. Например, на нескольких экранах показывались только кнопки, нужные пользователю в определённой ситуации: там, где нужно вводить числа, мы показывали только цифры.

Эти решения частные и выглядят довольно простыми, но ощутимо повышают операционную эффективность.

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

Работа складов

Напомним, что у Ocado нет магазинов как таковых, все заказы доставляются со складов. Без эффективной работы складов организовать подобное сложно. Что именно там происходит?

Во-первых, степень вмешательства человека здесь минимальна. Каждый склад Ocado — 30-километровый конвейер, по которому непрерывно движутся упаковки с продуктами.

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

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

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

Продажи

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

Smart promo

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

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

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

Автоматизация рекламных кампаний

Вместе с Ocado мы занимались доработкой и поддержкой решения для работы с поставщиками. Например, для проведения промокампаний, оценки их стоимости и эффективности, бронирования рекламы на сайте и выставления счетов за неё.

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

Расширение привычной функциональности интернет-магазина

Мы также участвовали в разработке сайта и мобильного приложения Ocado. Уровень требований к их функциональности и надёжности с учётом трафика и оборотов бизнеса легко представить.

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

Так выглядит сайт Ocado, где можно автоматически собрать все ингредиенты для приготовления блюда, не теряя время на поиск продукта по разным разделам

Что еще нужно онлайн-магазину

DataArt участвовала во многих других проектах для Ocado: мы создавали систему для консолидации всех данных о продажах и составления отчётности, усовершенствовали и поддерживали платёжные модули, занимались оценкой безопасности (pen test).

Создавали депозитарий для хранения всех ИТ-систем для передачи клиентам (речь о единой платформе, которую Ocado продаёт другим ритейлерам), делали систему учёта рабочего времени и компенсаций сотрудников. И это — совсем небольшая часть системы Ocado, разработка которой продолжается много лет и ведётся сотнями сотрудников компании и партнёрами.

#ритейл

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "DataArt", "author_type": "self", "tags": ["\u0440\u0438\u0442\u0435\u0439\u043b"], "comments": 3, "likes": 17, "favorites": 1, "is_advertisement": false, "subsite_label": "trade", "id": 29907, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15395' + '50799') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 29907, "author_id": 123035, "diff_limit": 1000, "urls": {"diff":"\/comments\/29907\/get","add":"\/comments\/29907\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/29907"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199122 }

3 комментария 3 комм.

Популярные

По порядку

1

"Например, на нескольких экранах показывались только кнопки, нужные пользователю в определённой ситуации: там, где нужно вводить числа, мы показывали только цифры."

Появился кандидат на нобелевку

Ответить
1

ja rabotaiu tam

Ответить

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

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

–1

Чем круче магазин, тем эпичнее его редизайн. Я бы посмотрел на это

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Приложение-плацебо скачали
больше миллиона раз
Подписаться на push-уведомления