Всё на костылях, но мы видим, что это работает

Разговор с Ильёй Красильщиком о первых запусках «Лавки».

Это — короткая версия подкаста «Запуск завтра», в котором наш товарищ Самат Галимов говорит с Ильёй Красильщиком из «Лавки». Если есть время — послушайте полную версию, наполненную кул стори и потёкшими ананасами:

В этой статье

  • Как Илье удалось запустить «Яндекс.Лавку» с нуля без опыта в торговле.
  • Что нужно было посчитать, чтобы продукты оказались в ассортименте.
  • Как прошли испытания Хамовниками. 
  • Как жила система, сделанная на костылях.
  • В целом — о том, как гуманитарий строит полноценный торговый бизнес внутри Яндекса с помощью данных и экспериментов.

👉 Речь идёт про запуск «Лавки» в 2019 году. С тех пор много воды утекло. Текст существенно сокращён и отредактирован, чтобы вам было удобно читать, дорогие. Если хотите погрузиться в историю «Лавки» от первого лица, слушайте оригинал.

Кто такой Илья Красильщик

  • Нет высшего образования. Отчислен с пятого курса РГГУ, потому что перестал туда ходить, но стал ходить в «Афишу». 
  • В 21 год стал главным редактором журнала «Афиша».
  • Работал издателем проекта «М…а». 
  • Потом был безработным
  • И теперь запустил сервис по доставке продуктов внутри «Яндекса», хотя у него не было ни опыта в ретейле, ни опыта в сервисах.

Что такое «Лавка» 

Девиз проекта — «Заменим магазин у дома электронным сервисом». В «Лавке» человек заказывает обычные продукты и товары для дома, а курьер доставляет их со склада за полчаса. Вроде просто, да непросто.Подробнее: lavka.yandex.ru

Особенности «Лавки»

Представьте себе продуктовую сетку. Из чего она состоит от начала до конца? Нужно спрогнозировать, сколько тебе нужно продуктов и каких.

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

Скорее всего, они привезут товары не на точки продаж, а на распределительный центр: что-то отправляется на хранение, что-то ложится в морозильную камеру, что-то — в холодильную камеру. Часть работает по технологии pick-by-line — это когда товары приезжают и сразу же распределяются по «Лавкам». 

Дальше грузовички по расписанию везут эти товары по «Лавкам». Расписание должен кто-то составить и следить, чтобы грузовички по нему работали. 

Грузовички приезжают. На «Лавке» товары кладутся в холодильную камеру, в морозильную камеру, на тёплую полку. «Лавка» вся размечена, там есть приложение «Яндекс.Полка», по которому сборщики получают заказы и собирают товары в пакетики по некоторой технологии. У нас там есть требования по скорости: положить один товар занимает примерно 10 секунд. 

А дальше начинается то, что к тому моменту умела «Яндекс.Еда» (с которой мы дружили и во многом просили помощи): принять заказ, отправить курьера, курьер возьмёт, привезёт и т. д. 

Сложности

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

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

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

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

Разработка и запуск

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

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

Разработка была не нашей. То есть я не мог сказать «делайте это»: это не моя разработка, мне надо ходить и уговаривать. Разработку нужно было «делить» с «Яндекс.Едой». 

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

В тестовой версии мы запускались в Хамовниках. Там главный офис «Яндекса» на «Красной Розе», соответственно, в Хамовниках живёт очень много сотрудников «Яндекса». Поэтому ты можешь просто написать во внутренних системах: «Мы запускаем сервис. Хотите потестировать его — пожалуйста, давайте».

Из сотрудников «Яндекса» мы набрали тестовую группу на 120 человек: этого более чем достаточно, чтобы тестировать сервис такого уровня.

И вот наступает 30 апреля. В нашей точке начинают появляться курьеры. И мы думаем: «О, это чудо! Они появляются!» И тут мы понимаем, что их начинает появляться очень много, потому что из этой группы 100 человек многие решили сразу потестировать сервис. 

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

Один день мы как-то пережили, во второй что-то починили. Начинаются майские праздники, мы все сидим на точке все майские праздники. 

В итоге приложение работает чудовищно, но доставки за 10–15 и даже 20 минут — это для наших тестовых пользователей очень удобно, они никогда в жизни такого не встречали. И мы видим, что это работает.

Ужасы тестового запуска

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

База, естественно, в этот момент ломается, потому что ты ничего не «пропикал» на сканере, ты просто собрал заказ. Физические остатки начинают разъезжаться. Потом заказы начинают задваиваться. Потом в базу прилетают неправильные задания. Потом у тебя ломается интеграция с «Едой». 

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

Начинается проблема с продуктами: помимо того, что у тебя технически не очень, тебе ещё надо уметь хранить продукты. У тебя начинает что-то гнить, ты не знаешь почему.

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

По итогам первого теста мы приняли решение продлить тест ещё на две недели. «Лавка» ушла на неделю на исправление радикальных багов. Через неделю мы вернулись, и всё стало сильно лучше.

Нагрузочное тестирование

Ещё мы устраивали нагрузочное тестирование. Мы говорили: «Дорогие друзья, только с 7 до 8 вечера вы все можете заказать продукты со скидкой». И в этот момент мы обрушивали на себя заказы и пытались понять, можем это вывезти или не можем мы это вывезти.

О зонах доставки

Размер зоны доставки определялся на глаз: ставишь точку в «Яндекс.Картах» и по карте отмеряешь расстояние, примерно семь минут на велосипеде. Иногда делаешь пять, иногда думаешь «Хочу захватить ещё» и делаешь 10. Потом из-за этого начинаются проблемы, и ты страдаешь. 

Первые полгода мы рисовали зоны сами. Рисовать карты приятно, это похоже на компьютерную стратегию: только это реальные дома, в них живут реальные люди. И потом ты запускаешься и пишешь об этом в какой-то районной группе. Тебе человек пишет: «О господи, вы в моём дворе в один дом доставляете, а в соседний, который через дорожку, не доставляете». И ты заходишь в интерфейс и добавляешь домик. Говоришь: «Попробуйте теперь». И у человека ощущение чуда.

Маршрутизация курьеров

Примечание ведущего подкаста Самата Галимова

Вообще задача маршрутизации курьеров — это классическая задача computer science. В программировании это называется «классическая задача коммивояжёра», когда тебе нужно объехать сколько-то городов оптимальным способом. Оптимально — это, например, потратив меньше всего бензина или меньше всего времени.

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

Есть много разных оптимизаций на этот счёт. Но, в общем, чтобы гарантировать правильное решение, нужно перебрать все возможные варианты. Для 15 точек назначения, для 15 городов таких вариантов 43 миллиарда. Для 16 городов их там больше 20 000 миллиардов. Это совершенно безумные числа, поэтому все придумывают разные оптимизации, так называемые эвристики: хитрые алгоритмы, которые позволяют это число сильно уменьшить.

Предсказание нагрузки на точки

Есть проблема: в зависимости от числа заказов в каждой «Лавке» нужно разное число курьеров и сотрудников. Это нужно уметь предсказывать. Но сейчас для нас это сюжет в развитии. 

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

Например, у тебя есть «Лавка», которая делает сколько-то сотен заказов в день. Но если разбить это, у тебя может быть час, в который делается 20 заказов, и тут несколько человек решили ещё заказать, и их получилось не 20, а 40. Это малые числа, поэтому там статистика не очень работает. 

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

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

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

Инфраструктура

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

Кто отбирает ассортимент 

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

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

Категория «Похмелье»

У нас раньше была категория «Похмелье». Потом шутка затянулась, мы её убрали.

Поскольку наши технологии не очень доросли к этому моменту, у нас был человек, который вставал в 7 утра в субботу, ручками включал категорию «Похмелье», а потом в полночь в воскресенье выключал категорию «Похмелье». Многие требовали продления категории «Похмелье» на понедельник, но мы решили, что в понедельник нет, мы не готовы. 

Полная версия

Полная версия рассказа с именами и фамилиями ответственных, кулуарными спорами, руганью по поводу помидоров и откровениями о том, как всё держится на костылях, — в подкасте.

Ведущий подкаста:

Самат Галимов

Редактор подкаста:

Юля Яковлева

Продюсер подкаста:

Павел Боровков

Звукорежиссёр:

Нина Мамотина

Дизайнер обложки

подкаста:

Пётр Сутупов

Редакторы конспекта:

Сервис «Чистовик», Максим Ильяхов

Корректор «Кода»:

Ира Михеева

Вёрстка статьи:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
TypeScript — как JavaScript, но может больше
TypeScript — как JavaScript, но может больше

Способ избежать проблем JavaScript в больших проектах.

easy
130 тысяч рублей за работу бэкенд-разработчика. Что это значит?
130 тысяч рублей за работу бэкенд-разработчика. Что это значит?

Что нужно делать, чтобы получать столько же.

easy
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг

Для всех, кто вырос, проходя восьмибитного Марио.

medium
NFT — новые модные токены. Зачем они нужны и не развод ли это?
NFT — новые модные токены. Зачем они нужны и не развод ли это?

Объясняем на Аллегровой.

easy
Прокрастинация у программистов и что с ней делать
Прокрастинация у программистов и что с ней делать

Как не откладывать на потом то, что можно закодить сегодня

easy
WebP — что это за формат, как устроен, зачем нужен и почему он так всем не нравится
WebP — что это за формат, как устроен, зачем нужен и почему он так всем не нравится

Изображения легче, а качество — то же

easy
Зачем устанавливать Ubuntu
Зачем устанавливать Ubuntu

3 причины попробовать.

easy
Роман Халкечев, руководитель отдела аналитики в Яндекс.Еде и Лавке
Роман Халкечев, руководитель отдела аналитики в Яндекс.Еде и Лавке

Часть 2: о Яндекс.Еде и Лавке, аналитических задачах и оптимизации бизнеса на основе данных.

easy
Почему в школе до сих пор изучают Pascal
Почему в школе до сих пор изучают Pascal

Паскаль. Турбо Паскаль!

easy
[anycomment]
Exit mobile version