В Dodo Engineering есть традиция: несколько раз в год айтишники ходят в пиццерии и тестируют, как продукт работает на местах. В этот раз мы, разработчики Небесного логиста, решили сломать их по‑крупному и зарядили тест на три недели.

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

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

Что будет уметь Небесный логист:

  • собирать заказы в поездку и назначать поездки на курьеров (автоназначение);

  • управлять количеством курьеров на смене так, чтобы они не сидели без дела, но и чтобы не было недостатка курьеров;

  • управлять кухней так, чтобы заказ был готов чётко к прибытию курьера.

  • управлять закупками: прогнозировать закупки продуктов, учитывая расход продуктов за предыдущие недели, наличие продуктов у поставщиков, их стоимость и время доставки;

  • призывать на помощь соседние пиццерии, если где‑то не справляется кухня.

Разработку мы начали с автоназначения, об этом и расскажем.

Глава первая, в которой рассказываем, зачем разработчики ходят в пиццерии

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

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

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

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

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

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

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

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

Глава вторая, в котором мы преодолеваем волны негатива

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

И тут главное понимать, в чём причина гнева и как с ним работать.

Первая причина: люди не любят что-то новое. «Давайте работать так, как мы работали раньше, — говорят они. — С накладными на берёсте было лучше! Отключите всё это сейчас же и верните как было!» Как говорится, новые ботинки всегда жмут.

Фото из личного архива нашего QA-инженера Вити.
Фото из личного архива нашего QA-инженера Вити.

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

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

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

Глава третья, в которой мы находим друзей

Прошло три дня негатива, постоянных разборов ситуаций и разъяснений до переломного момента, когда самый проблемный и недовольный курьер в чате вдруг написал остальным: «Ребята! Я понял, как это работает! Сейчас я вам всё объясню». Постепенно лояльность к нашему продукту начинает расти. И курьеры, и менеджеры начинают оценивать пользу нашей системы. Так появляются наши «ранние последователи» — те, кто ещё до начала массового внедрения системы оценили её достоинства и которые поддерживают идею Небесного логиста.

Наш первый «ранний последователь». Дальше курьеры сами всё объясняли друг другу, а мы потирали руки от удовольствия.
Наш первый «ранний последователь». Дальше курьеры сами всё объясняли друг другу, а мы потирали руки от удовольствия.

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

«Ранние последователи» помогают продвигать идею среди других курьеров. И это уже про лояльность к системе. Вот приходит к нам курьер и говорит:«Э, а чо это заказ ушёл к Васе, я был первый в очереди! Система ваша фигня!». А мы ему: «Дорогой наш человек! Заказ пришёл в 10 часов 36 минут к тебе и ждал две минуты, когда ты его примешь. А ты, видимо, в телефон-то и не смотрел, вот заказ тебя и не дождался и в 10 часов 38 минут ушёл от тебя к Васе. А Вася его сразу и взял в доставку». И курьер как-то сразу преисполняется уважением к системе: «О как, оказывается, всё устроено!». Система становится понятной и прозрачной и в итоге курьеры принимают правила игры.

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

Глава четвёртая, в которой мы собираем метрики и терпим неудачу

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

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

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

Глава пятая, в которой мы делаем выводы и идём дальше

По большому счёту мы не смогли проверить гипотезу, потому что данные, которые получили во время теста, оказались нерелевантными по нескольким причинам:

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

  • курьерам понадобилось время на принятие системы;

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

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

Кроме того, мы проверили систему под реальной нагрузкой. Помимо ожидаемых пиков, мы ещё и попали на два Дня города, и даже на перекрытие части зоны доставки из-за съёмок фильма!

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

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

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

Эпилог

В очередной раз мы убедились, что тестирование в полях даёт нам много чего:

  • мы получаем возможность проверить, совпадают ли реальные процессы с тем, как мы их заложили в системе;

  • получаем множество тест-кейсов, на выдумывание которых у тестировщиков и разработчиков потратилось бы много сил и средств. Мало того, что их придумать надо, так ещё и потом воспроизвести в виде автоматизированного теста!

  • фидбэк, инсайты;

  • кортизол, адреналин и эндорфин в неограниченных количествах!

Что ещё почитать: наша продакт‑оунер Наталья Гараханова написала статью о том, как проходили первые тестирования Небесного логиста.

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


  1. xRay
    00.00.0000 00:00
    +2

    Mantis-religiosa Пожалуйста добавьте подтверждение заказа кодом из пуш-уведомления (или из смс или из заказа в самом приложении) при получении заказа. Это нужно для защиты от ситуации когда курьер доставил заказ не по тому адресу и там его радостно приняли. Сам недавно с таким столкнулся.


    1. Mantis-religiosa Автор
      00.00.0000 00:00
      +1

      Спасибо за обратную связь! Уже несу её команде


      1. The_Kf
        00.00.0000 00:00

        В Убере в качестве кода используются последние 4 цифры номера телефона