Dodo Pizza — международная компания — работаем в 13 странах и не планируем останавливаться. Большая часть пиццерий расположена в регионе Евразия: Россия, Казахстан, Беларусь, Кыргызстан, Узбекистан. Это уже большой действующий бизнес, мы лидеры по количеству пиццерий. Этот бизнес надо только поддерживать и развивать вглубь, потому что здесь бизнес и IT работают вместе над понятными фичами.
- Основная часть разработчиков сосредоточена на развитии бизнеса в Евразии.
- Разработчики работают в командах.
- Команды разделены по продуктам.
- Внутри каждого продукта несколько команд.
- Каждый продукт прокачивает свои метрики: ресторан ускоряет обслуживание клиентов в зале, доставка увеличивает LTV и средний чек в приложении и на сайте.
И тут (внезапно) приходит бизнес и говорит: «Хотим запускаться в Нигерии», в той самой 13-й стране, в которой работают уже 2 пиццерии. До 2019 года запуск был редким — 1 страна в год. Команда разработки, которая сопровождала запуск, постоянно менялась. Фокуса на ускорении при таком подходе не было.
При этом «выстрелит» или нет новая страна — непонятно. Кто будет запускать страну? Из какого продукта придётся взять команду? Команде-«счастливчику» придется отвлекаться от своей киллер фичи, вспоминать как разворачивать систему и столкнуться с определенными сложностями. Разберемся, с какими именно.
Трудности запуска для бизнеса
Открытие новой страны — сюрприз (может быть). Иногда в предпринимательстве появляются возможности, которые просто нельзя упускать, даже если не готов. Например:
- появился сильный партнёр, который готов взять на себя риски;
- из региона уходит сильный локальный игрок;
- партнёр искал, искал, искал и вдруг нашёл помещение мечты;
- после международной командировки поняли, что больше нельзя откладывать и надо срочно запускать страну.
Мы стараемся планировать открытия заранее, но иногда жизнь вносит свои коррективы.
Единичные запуски. При запуске одной страны в год, нет смысла держать выделенную команду. Команда разработки, которая запускала прошлую страну, уходила пилить другую киллер-фичу.
Когда приходит очередь открывать новую страну, все чек-листы устарели, а команда, которая запускала прошлую страну, может помогать только урывками. Фокуса на ускорении запуска системы при таком подходе не было. Запустили и ладно — через год вернёмся :)
Расфокус. Из-за единичных запусков команде разработки, которая будет заниматься новой страной придётся отрываться от киллер-фич для Евразии ради сомнительной выгоды в Европе или Африке. Новая страна, первая пиццерия, инвестиции окупятся через 1-2 года — многое может пойти не так.
Много компонентов, огромная система и много связей — нет выстроенной системы запуска и экспертов. Запуск новой страны, с точки зрения Dodo IS, это не просто копипаст кода или нажатие одной волшебной кнопки. Это отдельный проект со своими локальными особенностями. Это 3-4 месяца на запуск (иногда и дольше).
В каждой стране нужна своя экспертиза, например, по системе фискализации чеков. Чтобы интегрироваться с локальными системами, нужно знать особенности в адресных системах. Например, в Словении фамилия клиента — часть адреса, что нужно учитывать в клиентских сервисах.
Подобных особенностей много, а у нас в команде точно нет всех знаний по ним. Значит, будем отвлекать людей из другой команды, которые владеют экспертизой — зависимости, долго.
Технические трудности
Dodo Pizza появилась в апреле 2011 года. В июне 2011 началась разработка Dodo IS. В то время никто даже не думал, что скоро мы будем запускать пиццерии в других странах, потому что нужно было быстро (очень-очень быстро) поддерживать растущий бизнес в России. Например, первая касса ресторана появилась в системе за 2 недели разработки, так как без неё нельзя было открывать ресторан в первой пиццерии.
Не было времени всё хорошенько продумать и заложить масштабируемость и country-agnostic компоненты в архитектуру системы. Меньше всего мы думали, что код, который сейчас пишем, будет использоваться где-нибудь в Словении или США. Поэтому за годы бурного роста накопилось много технического долга, который сейчас замедляет запуск.
Развернуть сайт и бэк-офис Dodo IS — это долго. Нельзя просто так взять и прописать в конфигах Nginx домен для новой страны и развернуть систему по кнопке. А жаль.
Кроме того, у каждой страны своя специфика. Нужно дать партнёру продукт, который будет подходить к конкретной стране, а не просто «общую Dodo IS». Начиная с адаптации форматов адресов, телефонов, типов улиц и населённых пунктов, организаций, заканчивая более глобальными адаптациями. Добавим к этому много ручных операций и копипаста по коду: enumы, конфиги, скрипты.
Переводы на язык страны. Мы все любим Excel: строить таблицы, красить строки, писать сложные формулы, ссылаться на данные из другого документа. Это то, для чего он придуман.
В Excel мы выгружали партнёру строки с терминами, он переводил (без контекста и картинок), мы загружали Excel с переводами обратно и повторяли упражнение. Это не то, для чего создан Excel. Да, и в ресурсах, к сожалению, были не все проекты и строки — код приходилось править.
Пример файла с переводами.
Кроме того, после запуска страны появляются новые фичи в системе — команды для Евразии не перестают писать фичи, пока мы страну раскатываем. Для этих фич нужны переводы и снова в Excel. Долго, дорого, неудобно. Без разработчиков не справиться.
Кассы и налоги. Касса ресторана и касса доставки — это компоненты Dodo IS. Без них ничего нельзя продать ни в ресторане, ни на доставку. Кассы необходимо адаптировать для новой страны, а код в монолите и он тянет за собой множество зависимостей. Получается, кроме бизнес-проработки (налоги, ставки, требования к чеку), необходимо аккуратно написать логику для новой страны, так, чтобы не сломалась печать чеков в России.
Мобильное приложение. Мы не умели запускать его сразу с открытием страны: не хватало экспертизы, времени, всего. Партнёру приходилось ждать иногда по полгода (иногда дольше), чтобы мы запустили приложение уже после открытия страны. Неприятно.
Примечание. На все страны одно приложение — ситуация как с кассами. Запуская приложение в Румынии, важно «не зацепить» другие страны.
Запуск — это ещё и поддержка. Лендинги, звуки для оповещений на кухне, ошибки в переводах — все эти маленькие неприятности обычно проявляются в первые пару месяцев. Поэтому после запуска страны важна ещё и поддержка.
Как решили бизнес-проблемы
В такой ситуации мы были в мае 2019 года. А 2020 год обещал быть жарким — мы хотели запустить сразу 4 страны. Надо было что-то делать, чтобы не облажаться.
Мы выделили новый независимый продукт — «запуск новых стран» — и поставили амбициозную цель — запуск страны «по кнопке». С кнопкой мы могли бы:
- разворачивать систему как есть;
- проверять, что все сценарии работают: заказы принимаются и готовятся, чеки печатаются, отчёты строятся;
- отдавать систему партнёрам, бизнес-девелоперам, маркетологам и всем остальным для донастройки под конкретную страну.
Команда. Цель невозможно достичь без команды. Поэтому в мае 2019 года команда MyLittleCoders согласилась стать командой открытия стран на 100% времени. Мы выделили открытие в новый продукт: метрика «скорость запуска» есть, команда есть, бэклог по ускорению полон задачами через край. Всё сошлось — пора действовать.
Логотип команды MyLittleCoders (MLC)
Story Map. Долгосрочная стратегия понятна: ускоряться, искать людей, перенимать компетенции. Нужно было научиться «запускать страну под ключ» самостоятельно, не отвлекая другие команды.
Мы начали с запуска Нигерии, за 3 месяца до открытия. Нигерия стала тестовой страной, с которой начали системно выстраивать чёткий процесс запуска. И вот как мы это делали.
Помимо основной цели – запустить пиццерию в октябре, мы записывали вещи, которые отнимают больше всего времени, чтобы вернуться к ним после запуска. После запуска построили story map и по наблюдениям отметили вещи, которые занимают больше всего времени.
Фрагмент story map запуска новой страны.
Как решили технические проблемы
Мастер начальной настройки страны. Анализ story map показал, что часть этапов можно автоматизировать, что значительно ускорит запуск. Поэтому первым существенным улучшением стал мастер начальной настройки страны или Country Wizard.
После покупки нового iPhone настройки со старого телефона переносятся за пару кликов — 3 экрана и новый телефон готов к работе. Мы хотели сделать для Dodo IS что-то похожее.
- Запускаешь мастер начальной настройки страны.
- Говоришь: «Запускаю Нигерию».
- Выбираешь язык, валюту, вводишь маску телефона, типы улиц и типы населенных пунктов.
- Вводишь логин и пароль для временного пользователя (для первого входа в систему).
- Next, next, next и готово — заходишь в свежеразвёрнутую копию системы для Нигерии и создаёшь маркетологам и бизнес-девелоперам их персональные учётки.
В ходе работы концепция поменялась. Изначально мы хотели добавить все-все настройки системы в Country wizard (РО продукта хотел и грезил, команда была сдержанно-оптимистична). Но у нас уже была внутренняя админка, дублировать которую в мастере настройки оказалось бессмысленно. Тогда мы оставили в нём только тот минимум настроек, без которых система просто не могла запуститься. Продукты, меню, цены поставщиков и тару можно донастроить уже потом.
Почему система не может запуститься без такого количества параметров? Исторически сложилось, что такие параметры необходимы для разработки Dodo IS. Развязать такие зависимости и сделать их опциональными для запуска — отдельная задача для команды.
В итоге, всё получилось прекрасно. Вместо множества мест, где надо что-то править мы:
- проходим 1 мастер начальной настройки;
- получаем свежий дамп системы;
- отдаём его ребятам из инфраструктуры для раскатки.
Два дня (а не месяц как раньше) — и система готова к работе.
Пример настройки параметров доставки через мастер начальной настройки.
Чек-листы запуска. Не всегда ускорения можно достичь только за счёт разработки и автоматизации. Чек-листы запуска тому пример. Иногда достаточно по порядку описать что и за чем надо сделать, куда нажать, кого пнуть, какой скрипт накатить.
Поэтому связка «аналитик-разработчик» скрупулезно описала весь процесс. В результате у нас есть большой документ с цифрами и пунктами: что сделать до запуска, что во время, а что после.
Фрагмент чек-листа запуска.
Переработка старых чек-листов — увлекательный процесс. Разработчики по очереди проходили руками по чек-листам, открывали и настраивали тестовые страны, собирали боли и улучшали чек-листы. И так несколько раз. Бонус такого подхода — глубокое погружение ребят в саму систему.
Настройки страны из одной точки. Собрать все настройки из Country wizard недостаточно. Важно, чтобы система и её компоненты также читали эти настройки из одного хранилища. Иначе получаются забавные ситуации. Например, когда менеджер офиса показывает правильную валюту (для Нигерии найра), а витрина кусочков предательски показывает рубли. Каждый сервис считал своим долгом завести собственные настройки. Приходилось проходить 7-8 мест в системе, чтобы все наконец показывали правильную валюту.
Хотелось править настройки в одном месте и дальше применять уже по всей системе. В реальности мы столкнулись с тем, что нужно вносить изменения практически в каждый компонент в системе. Изменения небольшие, но компонентов очень много.
Через титанические усилия команды, 100500 строк удалённого копипаста и щепотки магии программирования теперь система берёт настройки из единого хранилища. «Хвосты» ещё остались, но бОльшую часть настроек удалось централизовать. Теперь можно задавать маску телефона или формат адреса или другие настройки для целой страны в одном месте.
Примечание. История о том, как мы долго выпиливали копипаст и переводили систему на использование сервиса справочников, заслуживает отдельной технической статьи. Если интересно, напишите в комментариях.
Переводы. Вместо Excel хотелось простой и понятной системы для локализации, чтобы:
- не надо было ничего выгружать в сторонние файлы;
- получать оповещения, что добавилась новая строка для переводов;
- было видно какие строки и в каком языке ещё не переведены.
Мы поискали сервисы для локализации, пообщались с поддержкой и остановились на сервисе Crowdin. Простой, с разграничением ролей — подошёл как влитой. Особенно понравилась фича in-context: когда открываем сайт или бэк-офис на специальном окружении и правим строки прямо в интерфейсе. Так сразу видно где и что конкретно исправляем — удобно.
Crowdin in-context редактирование.
Crowdin подключили сначала в бэк-офис, постепенно подключая монолит, потом отпиленные сервисы, а потом сайт. Не всё сразу заработало, но сейчас достаточно добавить новые строки для перевода, чтобы партнёры увидели и сами перевели.
Больше никакого Excel.
Вся локализация упростилась: партнёр теперь может делать переводы заранее и без помощи разработчиков. Так что, когда мы готовы разворачивать Dodo IS и сайт, переводы обычно готовы.
Раньше переводы были в коде — бизнес-процесс перевода были вынужденно связаны с разработкой и релизами. За счет сервиса Crowdin получилось сделать независимыми эти 2 процесса. Сейчас мы стараемся все новые сервисы, лендинги и везде, где есть что-то для переводов, подключать сразу к Crowdin.Это сильно упрощает жизнь и даёт партнёру возможность делать переводы в своём темпе, а нам разворачивать систему в своём.
Бонусом поставили язык системы английским по умолчанию. Раньше система по умолчанию использовала русский язык, что не подходит международным партнёрам и их сотрудникам. Теперь, если какие-то переводы отсутствуют в системе, партнёр увидит английские тексты. Так обычно бывает сразу после разворачивания системы.
Что в итоге
С июля 2019 проделали огромную работу — выстроили систему запуска и добавили структурности всему процессу. Мы настраиваем систему через мастер, партнёр самостоятельно переводит интерфейсы и не зависит от разработчиков.
Весь путь раскатки новой страны детально описан. Сейчас путь занимает 2-3 недели, вместо 3 месяцев раньше. Через неделю после старта работает сайт и бэк-офис. Они пока не заполнены данными, но уже могут принимать заказы.
Планы
Добавить ещё примерно столько же — всё, что выше даже не половина работы. Теперь нас ждёт новый вызов — постепенно шаг за шагом, страна за страной улучшать эту систему. Например:
- постепенно расширить «пакет запуска», добавляя туда новые фичи, например, «Сайт работа в Додо» или «Сайт для тайных покупателей»;
- добавить поддержку мультиязычности на сайте и в приложении;
- ещё больше упростить мастер начальной настройки страны;
- дописать систему плагинов для касс, чтобы привлекать местных аутсорсеров для разработки модуля печати чеков под конкретную страну.
Приложение. С января 2020 года к нам присоединилась мобильная команда Легионеры (3 человека). Планируем «раздать долги» — запустить приложение во всех странах, и научиться запускать новые страны сразу с приложением.
Кассовая интеграция. Теперь это самый долгий этап запуска страны — планируем ускорять. Кассы (логику печати чеков) планируем отпилить от монолита, вынести в отдельный сервис и сделать там плагинную архитектуру. Так мы сможем привлекать сторонние команды для разработки плагина под конкретную страну. Например, аутсорсинговая компания в Польше сделает кассовую интеграцию для Польши, написав соответствующий плагин. Это позволит ещё больше ускориться.
Напоследок
Запустить страну это полдела — теперь нужно ещё и поддерживать существующих партнёров (которых только что стало на одного больше):
- писать трекинг заказа в UK;
- адаптировать адресную систему;
- «допиливать» систему «напильником» под региональные особенности;
- помогать выходить на азиатский рынок.
Кроме того, есть много гипотез, запросов на разработку от уже действующих международных партнёров. Эти запросы могут быть неинтересными для Евразии, где рынок уже сформировался, но актуальными для Европы, где мы ещё только начинаем расти.
Именно поэтому мы собираем новую команду под регион ЕМЕА. Эта команда будет адаптировать систему под локальные рынки, создавая ту самую уникальность, отличающую бизнес в UK от бизнеса в Нигерии. Мы ищем в команду опытных разработчиков. Если интересно открывать мир, запускать новые пиццерии на карте и решать не рутинные задачи — ждем вас в команду. Напишите мне на d.pavlov@dodopizza.com — буду рад пообщаться:)
Примечание. В посте Катя Ландырева подробнее описала, что вас ждет чуть и почему круто работать в нашем продукте.
Desavian
Блин, вам бы еще пиццу вкусную делать — цены б не было… половину конкурентов точно бы задвинули. А так, масштабирование без развития оно в долгосрочной перспективе все равно сваливается в штопор.
Levitanus
Ну о вкусах не спросят. Я вот люблю Papa John's, жена — Papa Carlo
А Додо получается по "кухне" как раз где-то посередине
riskov
Интересно :) А что имеете ввиду под «развитием»?
dmitry-pavlov Автор
Desavian Добрый день!
Поделитесь, пожалуйста, опытом. Где заказывали в последний раз? Что не понравилось?
Desavian
А как-то постоянно получается что мимо проходишь или компанией собрались и иногда хочется проверить вдруг что поменялось =) А так вообще Лобня и Сергиев Посад, в Москве только несколько раз пробовал. Причем я не могу сказать что пицца плохая или ингридиенты просроченные, разумеется нет. Просто сам формат пиццы говорит «ну ок, но следующий раз попробую только чтобы убедиться что все также». Если интересует мое мнение — соотношение теста и ингридиентов хромает, причем хромает не в какой-то одной пиццерии, а, судя по всему, глобально, потому что нельзя сказать что вот пепперони невкусная, а песто — зашибись. Да, это пицца, тесто и ингридиенты, да, она сытная, но если надо тупо набить брюхо — пицца за 500 рублей не вариант, за 500 рублей уже хочется чтобы было «вкусненько», потому что 500-700 рублей это уже стоимость нормального ресторанного блюда. Вот и получается что конкретно претензий из серии «вот там плохо» нет, а пицца просто «ок».
з.ы. система отзывов о качестве в этом случае не работает… потому что тухлых креветок не кладут, а писать отзыв «ну в принципе ок, но не особо вкусно» всем лень. Ну наймите технолога хорошего, сделайте чтобы корка не засыхала в камень мгновенно, соус придумайте какой-нить фирменный(НЕ ТОМАТНЫЙ, БЛИН, томатный и обычный раньше был нормальный) и добавляйте его везде куда можно. Не будет изюминкой айти сторона у пиццы =) Потому что айти на зубах скрипит.
galqiwi
Да ну, додо — самая вкусная пиццерия в моей округе. На порядок лучше, чем доминос под окном.