Кейс
Яндекс.Такси для стройки: заказчик вызывает рабочего так же, как машину — видит его на карте, следит за подъездом и платит по факту. Приложения для Android и iOS, подбор исполнителя по расстоянию, живые координаты.
Задача
Рабочего на объект ищут обзвоном: заказчик перебирает знакомых бригадиров, бригадир перебирает своих, и все это занимает часы. Сколько стоила работа и когда ее начали, потом никто точно не скажет.
Задача — свести заказчика и исполнителя так же быстро, как такси: кто свободен и ближе всех, тот и получает заказ. С той разницей, что происходит это на стройке.
Что сделали
Расчет на плохие условия
Стройка — это слабая связь, севшие телефоны и грязные руки. Три решения приняты именно из-за этого, и каждое из них видно в счете или в надежности.
Вход без мобильного интернета. Подтверждение номера идет не по СМС, а звонком-сбросом: телефон звонит пару секунд и сбрасывается, код — последние цифры номера. Это работает там, где данных нет вовсе, и стоит пару тенге вместо примерно двадцати пяти за СМС.
Подбор без фонового планировщика. Радиус поиска — это функция от возраста заказа, а не результат сработавшего таймера. Заказ, который ищет пять секунд, предлагается в трех километрах; заказ, который ищет минуту, уже не нашел никого рядом и уходит дальше. Ничего не нужно помнить между запросами, поэтому перезапуск сервера ничего не теряет.
Двойное нажатие ничего не ломает. Каждый переход в работе — одно условное обновление в базе, проверяющее статус, из которого заказ выходит. Решает база, а не чтение с последующей записью. На плохой связи два нажатия не запустят счетчик дважды и не выставят счет дважды.