Чему доставка еды научила меня об инженерии

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

Эта запись есть на другом языке: English

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

Потом появилась SOR PIZZA — доставка еды в Душанбе, которую мы делали как технологичный бизнес. Мы писали свою CRM, систему обработки заказов, приложения для курьеров, интеграцию с телефонией, инструменты аналитики. И впервые между мной и последствиями моих решений не было никого.

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

Предметная область грязнее любой модели

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

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

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

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

Интерфейс для человека, у которого заняты руки

Свой софт для колл-центра и кухни я проектировал так же, как обычные веб-приложения. Это была ошибка.

В час пик оператор не читает интерфейс. Он говорит по телефону, одновременно вбивает заказ и слушает, что кричат с кухни. У него нет ресурса на то, чтобы «разобраться в форме».

Что оказалось важным:

  • Каждый лишний клик стоит денег. Не метафорически: умноженный на сотни заказов, он превращается в минуты задержки и в раздражённого клиента.
  • Экран должен отвечать на один вопрос. «Что делать прямо сейчас?» — а не показывать всё, что система знает.
  • Ошибку нужно предотвращать, а не сообщать о ней. Валидация после отправки формы в реальном времени бесполезна.
  • Если сотруднику неудобно, он обойдёт систему. Запишет на бумажке, договорится голосом, поправит потом. И в этот момент ваши данные перестают отражать реальность — а вслед за ними и вся аналитика.

Последний пункт для меня был самым отрезвляющим. Раньше я думал, что плохой интерфейс — это про неудобство. Оказалось, это про достоверность данных.

Телефон никуда не делся

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

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

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

Метрика вместо мнения

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

Эта цифра не спорит. Её нельзя объяснить красивой архитектурой. Если изменение в системе её не улучшило — значит, изменение было бесполезным, каким бы элегантным оно ни казалось внутри.

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

Данные, которые собираются сами

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

Пока этого нет, любое обсуждение проблемы превращается в спор мнений: «кухня тормозит» против «курьеров мало». Как только появляются отметки времени, спор заканчивается за пять минут — видно, на каком именно этапе теряются минуты.

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

Что изменилось во мне как в инженере

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

Меньше расходов. Быстрее процесс. Меньше ручной работы у сотрудника. Меньше ошибок. Если ответа нет — возможно, задачу вообще не нужно делать, как бы интересно её ни было решать.

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

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