В Dodo Engineering есть традиция: несколько раз в год айтишники ходят в пиццерии и тестируют, как продукт работает на местах. В этот раз мы, разработчики Небесного логиста, решили сломать их по‑крупному и зарядили тест на три недели. Это статья о «приключениях» команды разработки в пиццериях. Рассказываем о том, как мы тестируем продукт в реальных условиях на реальных пользователях, как это помогает прорабатывать наши гипотезы. О наших ожиданиях, которые сломались о реальность, о волне негатива, к которой мы оказались не готовы, и как превращали критиков в сторонников. Доставка у нас считается сервисом критического пути — это один из важнейших компонентов, без которого ежедневная работа пиццерии развалится. У него есть свои боли, которые можно было было бы решить с помощью автоматизации процессов. Но боли доставки (скорость, логистика, оптимизация поездок и т. д.) — это лишь один из аспектов комплексной задачи управления пиццерией, поэтому решать её надо глобально. Так родилась идея Небесного логиста — многокомпонентной системы, автоматизирующей различные части управления пиццерии. Что будет уметь Небесный логист: собирать заказы в поездку и назначать поездки на курьеров (автоназначение); управлять количеством курьеров на смене так, чтобы они не сидели без дела, но и чтобы не было недостатка курьеров; управлять кухней так, чтобы заказ был готов чётко к прибытию курьера. управлять закупками: прогнозировать закупки продуктов, учитывая расход продуктов за предыдущие недели, наличие продуктов у поставщиков, их стоимость и время доставки; призывать на помощь соседние пиццерии, если где‑то не справляется кухня. Разработку мы начали с автоназначения, об этом и расскажем. С самого начала разработки наша команда понимала, что не сможет учесть всё и сразу.  Мы провели интервью с менеджерами, наблюдали за аналитикой, чтобы составить модель будущей системы. Но всё равно она оставалась слишком идеализированной: в ней курьеры чётко выполняют свои обязанности, на смене всё идёт по плану.  На самом деле всё может происходить совсем не так. И чтобы понять, как и с чем мы столкнёмся при внедрении продукта на всю сеть, нужно обязательно тестировать в полях. Каждую итерацию, каждую законченную функциональность мы проверяем в реальных пиццериях и постепенно в код продукта вносим правки, учитывая реальное положение дел. В первых итерациях тестирование в пиццериях проводилось для проверки технических решений. Мы проверяли гипотезы, подтверждающие работоспособность системы. Это были сравнительно краткосрочные запуски, не более четырёх часов. Мы избегали тестирования при пиковой нагрузке в обеденные и вечерние часы и при любой непонятной ситуации сразу же приостанавливали тест. Убедившись в работоспособности нашего продукта (т.е. что он ничего не ломает и не падает), мы решили провести тестирование помасштабнее. На этот раз особенно не переживали, что что-то сильно рухнет. Наши цели шли дальше — хотели собрать данные, показывающие, как система улучшает показатели пиццерии и проверить систему на реальных нагрузках, в пятницу, в обеденные пики. Нам необходимо было убедиться, что: система действительно помогает сократить время от момента, как кухня приготовит заказ, до момента, как курьер отправится с заказом в путь. Без нашей системы курьеры сами выстраивают маршрут, проверяют различные компоновки, иногда спорят об очерёдности. Система назначит поездки эффективнее и беспристрастнее; алгоритмы Яндекса нам помогут строить оптимальные маршруты поездок. Оперативная информация о дорожной обстановке поможет системе выстраивать поездки так, чтобы курьеры как можно быстрее привозили пиццу клиентам. Поэтому мы устроили трёхнедельный тест, да ещё и в трёх городах одновременно! Задумка была в том, что такое продолжительное тестирование позволит собрать достоверные метрики, отфильтровать случайные «всплески» показателей. Кроме того, тестирование в разных пиццериях позволяет сравнивать влияние различных факторов. Например, географических: наличие сложных участков дорог, объездов, пешеходных зон и тому подобное. При каждом тестировании мы неизбежно сталкивались с одним и тем же сценарием: утро, открывается новая смена, часа два-три все осваиваются, интенсивность заказов ещё низкая. Дело движется к обеду и в нашу сторону начинает расти поток негатива со стороны курьеров. И тут главное понимать, в чём причина гнева и как с ним работать. Первая причина: люди не любят что-то новое. «Давайте работать так, как мы работали раньше, — говорят они. — С накладными на берёсте было лучше! Отключите всё это сейчас же и верните как было!» Как говорится, новые ботинки всегда жмут. Вторая причина, конечно, несовершенство нашей модели. Любой просчёт, любая ошибка в системе крайне остро воспринимается курьерами. Но это понятно: ошибки наши, а в итоге страдают они. Порой даже материально.  В такие моменты важно быть рядом. Как можно больше находиться на связи с курьерами, менеджерами, управляющими. Важно постоянно объяснять людям в процессе тестирования, что происходит и как это работает. Тогда снимется боль непонимания в моменте. Практически все тесты мы проводили в тех городах, где был кто-то из нашей команды. Мы активно отвечали на вопросы курьеров в чате и общались с ними на местах.  На этот раз «эффект присутствия» нашей команды ощущался только в одной пиццерии. Помните старую рекламу: «Одно яйцо мы намажем зубной пастой Blend-A-Med, а другое — обычной зубной пастой»? Забегая вперёд скажу, что в этой пиццерии курьеры гораздо быстрее перестроились на работу с нашей системой и в целом оказались лояльнее и меньше хитрили.  Прошло три дня негатива, постоянных разборов ситуаций и разъяснений до переломного момента, когда самый проблемный и недовольный курьер в чате вдруг написал остальным: «Ребята! Я понял, как это работает! Сейчас я вам всё объясню». Постепенно лояльность к нашему продукту начинает расти. И курьеры, и менеджеры начинают оценивать пользу нашей системы. Так появляются наши «ранние последователи» — те, кто ещё до начала массового внедрения системы оценили её достоинства и которые поддерживают идею Небесного логиста. Заинтересованные курьеры стали приходить в личку с вопросами о нюансах работы системы. Некоторые даже приносили свои идеи, например, по оптимизации маршрута. Часть из этих идей уже была в бэклоге, но обращения курьеров — это сигнал о том, что задаче хорошо бы поднять приоритет. Некоторые были для нас новыми, и мы будем их прорабатывать.  «Ранние последователи» помогают продвигать идею среди других курьеров. И это уже про лояльность к системе. Вот приходит к нам курьер и говорит:«Э, а чо это заказ ушёл к Васе, я был первый в очереди! Система ваша фигня!». А мы ему: «Дорогой наш человек! Заказ пришёл в 10 часов 36 минут к тебе и ждал две минуты, когда ты его примешь. А ты, видимо, в телефон-то и не смотрел, вот заказ тебя и не дождался и в 10 часов 38 минут ушёл от тебя к Васе. А Вася его сразу и взял в доставку». И курьер как-то сразу преисполняется уважением к системе: «О как, оказывается, всё устроено!». Система становится понятной и прозрачной и в итоге курьеры принимают правила игры. Тем не менее, остаются курьеры, которые по своим убеждениям продолжают действовать по-своему. Мы в Додо категорически против любых средств наказания, штрафов и подобного. Здесь наша задача — построить работу курьеров с системой так, чтобы действовать по правилам было бы выгоднее и проще, чем пытаться её обойти. Например, отказался от предложения системы везти заказ — переходишь в конец очереди курьеров. Просто и логично. Но перед этим система ещё попросит указать причину отказа. А при закрытии смены покажет все причины менеджеру. До начала трёхнедельного тестирования мы рассчитывали, что курьеры будут действовать по правилам и мы сможем собрать репрезентативные метрики.  Даже если система работает неоптимально, мы должны получить данные. Но тут нас ждал облом. Курьеры часто отказывались везти так, как говорит система. Люди не машины, у них есть свои мысли и жизненный опыт. Когда он не совпадает с тем, что говорит система, возникает внутреннее несогласие. Курьеры считали компоновку нерациональной, поездки неудобными, а разработчиков криворукими ПТУшниками. Они придумывали разные ухищрения и ждали, пока этот заказ увезёт кто-то другой. А время-то идёт, а пицца-то лежит! И в итоге это оборачивалось проседанием доставки аж до двадцати минут! Конечно, ни о какой репрезентативности данных в таком случае речи уже не идёт, увы. Нам на наглядном примере показали, как важна лояльность. Помимо метрик нам помог журнал событий. Он показывал список действий с заказом, и отдельно — список действий курьеров. В отличие, например, от логов, которые выполняют чисто техническую функцию, журнал событий фиксирует события бизнес-логики. Так можно очень быстро выявить все попытки фрода. Мы восстанавливаем события курьеров, восстанавливаем события приготовления заказов, анализируем очередь курьеров и разбираем ситуацию, чтобы понять, как сработали правила назначения заказов. По большому счёту мы не смогли проверить гипотезу, потому что данные, которые получили во время теста, оказались нерелевантными по нескольким причинам: в первую неделю тестирования в системе автоназначения были баги, которые влияли на работу курьеров и показатели пиццерии; курьерам понадобилось время на принятие системы; нам не удалось добиться чистоты эксперимента: иногда система формировала поездки совсем неоптимально, и тогда даже лояльные курьеры отказывались брать такие заказы. Но мы собрали фидбэк от курьеров, проанализировали его, выделили стратегические пути улучшения. И это бъёт в две цели: и бэк сможем улучшить, и лояльность повысим. Кроме того, мы проверили систему под реальной нагрузкой. Помимо ожидаемых пиков, мы ещё и попали на два Дня города, и даже на перекрытие части зоны доставки из-за съёмок фильма! В те моменты, когда все звенья цепочки работали слажено, было видно, что автоназначение уменьшает время, которое заказ находится на тепловой полке. Это даёт нам возможность перейти к следующему этапу — автоматизации работы кухни, чтобы заказы готовились непосредственно к прибытию курьера в пиццерию.  Важный момент, который показал тест: из-за объединения нескольких заказов в поездку время доставки увеличилось. Значит, нам надо работать над тем, чтобы заказы стали группироваться оптимальнее. Также мы будем перерабатывать систему мотивации курьеров, чтобы никто из них не был несправедливо обделён и чтобы не возникало желания игнорировать систему. В очередной раз мы убедились, что тестирование в полях даёт нам много чего: мы получаем возможность проверить, совпадают ли реальные процессы с тем, как мы их заложили в системе; получаем множество тест-кейсов, на выдумывание которых у тестировщиков и разработчиков потратилось бы много сил и средств. Мало того, что их придумать надо, так ещё и потом воспроизвести в виде автоматизированного теста! фидбэк, инсайты; кортизол, адреналин и эндорфин в неограниченных количествах! Что ещё почитать: наша продакт‑оунер Наталья Гараханова написала статью о том, как проходили первые тестирования Небесного логиста.