Тайный смысл номеров заказов в ресторанах быстрого питания
Я разработчик мобильных приложений и сейчас работаю над системой позволяющей сделать заказ в ресторане за пару кликов и также легко его обработать. Кстати, первая версия нашего приложения уже успешно помогает небольшому кафе.
Задача
Сделать генерацию номеров заказов. Казалось бы, легче задачи не придумаешь 😒😒😒
Берем ноль и начинаем прибавлять к нему единичку, чисел на всех хватит: ты — будешь первым, следующий — будешь вторым и так далее. Но как говорил один мудрый человек: «Программисты пишут код, а инженеры делают жизнь проще». Так что соберем требования, которым должен соответствовать наш сгенерированный номер.
Требования
🤯 Простота и понятность
Номер заказа должен быть коротким, легко запоминаться и произноситься. Не должно существовать двух похожих номеров.
🍒 Уникальность
Алгоритм должен работать таким образом, чтобы номера заказов не повторялись, хотя бы в определенный период. Не должно возникать путаницы, что у одного кафе в обработке два заказа с одинаковыми номерами.
⏰ Предсказуемость
Ожидая в зале и смотря на монитор с номерами заказов клиент должен иметь примерное представление, как скоро его заказ будет готов. Например, если мой номер 5, а сейчас выдают 3-й и 4-й заказы, значит мой уже на подходе.
Также, это отдаленно напоминает геймификацию: клиент пытается разгадать тайный смысл номеров заказов и время ожидание для него пролетает незаметно.
В будущем это поможет нам рассчитывать примерное время ожидания заказа и положительно скажется на пользовательском опыте.
Существующие решения
В этом разделе я не пытаюсь критиковать чужие решения, а лишь оцениваю по собственным критериям насколько они мне подходят.
🍔 Бургер Кинг
Двойные дефисы это конечно странно, однако основная идея понятна — буквы обозначают источник заказа: мобильное приложение или терминал (какой от этого толк — не ясно), цифры идут последовательно от 01 до 99.
В целом неплохо, установленные требования более-менее выполняются, однако буквы можно было бы локализовать. Также подряд идущие числа 12, 13, …, 15 звучат очень схоже и тут могут возникнуть недопонимания.
🤡 Макдональдс
Решили не запариваться и вообще выкинули буквы, вместо них добавили бесполезный ноль. Надеюсь, третья цифра измениться, когда 100 человек в течение 5 минут сделают заказы в одном ресторане?
🍕 Додо
Снова подряд идущие числа без букв и имена. Критерий «Простота и понятность» явно страдает. Клиенту нужно обязательно указывать либо говорить своё имя. Выдающему заказы работнику нужно правильно это имя произносить.
Решения
Выбор формата
Одна буква и 2 цифры были признаны идеальным сочетанием: это привычно для клиентов, легко запомнить, и в то же время, достаточно много вариантов, чтобы не повторяться. Такая комбинация, после исключения букв
«Ё», «Й», «Щ» — похожи на своих соседей и легко перепутать,
«З», «О» — похожи на цифры
«Ъ», «Ь» — похожи друг на друга и длинные в произношении
дает нам 26 * 10 * 10 = 2600 вариантов номеров, что будет достаточно даже при большом потоке клиентов. Плюс на этом критерий о простоте и понятности можно считать закрытым.
Решение № 1. Рандом
💡 Идея: генерируем случайное число от 0 до 2599. После деления на 100, получим частное и остаток. Частное — это индекс буквы в нашем усеченном алфавите, а остаток — это двузначное число.
👨🏫 Например: случайное число = 12, частное = 0, остаток = 12. Получается номер заказа А-12.
🔬 Соответствие критериям:
✅ Простота и понятность
⛔ Уникальность — нет гарантии, что 2 случайных числа случайно не совпадут
⛔ Предсказуемость
Решение № 2. На основе текущего времени
💡 Идея: берем текущий timestamp и находим остаток от деления на 2600, получаем число от 0 до 2599. Далее следуем алгоритму из первого решения.
🔬 Соответствие критериям:
✅ Простота и понятность
⛔ Уникальность — если учитывать timestamp в секундах, то есть небольшой шанс, что 2 заказа будут сделаны в одну секунду и, следовательно, иметь одинаковый номер. Также через каждые 2600 секунд, номера заказов могут повторяться.
⛔ Предсказуемость
Решение № 3. Счётчик
💡 Идея: увеличиваем значение счётчика на 1 при каждом заказе. Обнуляем счётчик, когда тот дойдет до 2600. Далее следуем алгоритму из первого решения.
🔬 Соответствие критериям:
✅ Простота и понятность — с оговоркой, что теперь числа 12, 13, …, 15 следуют друг за другом
✅ Уникальность
✅ Предсказуемость
Решение № 4. Счётчик (улучшенный)
💡 Идея: выбираем число, которое будет являться шагом для изменения числа, главное чтобы оно не имело общих делителей с числом 100, то есть не делилось на 2 и 5. Увеличиваем значение счётчика на 1 при каждом заказе. Обнуляем счётчик, когда тот дойдет до 2600. Букву получаем путем нахождения остатка при делении счетчика на размер алфавита (26). А число рассчитываем путем умножения счетчика на выбранный шаг и нахождение остатка при делении полученного значения на 100, чтобы результат не превышал 99.
👨🏫 Например: значение счётчика = 27, остаток от деления на 26 = 1. Получается буква Б. Выбранный шаг = 9, 27 * 9 = 243, остаток от деления на 100 = 43. Номер заказа — Б-43. Далее увеличиваем счетчик до 28, остаток от деления на 26 = 2. Получается буква В. Выбранный шаг = 9, 28 * 9 = 252, остаток от деления на 100 = 52. Номер заказа — В-52.
🔬 Соответствие критериям:
✅ Простота и понятность — теперь числа 12, 13, …, 15 не встречаются в заказах идущих друг за другом
✅ Уникальность
✅ Предсказуемость — буквы сменяются при каждом новом заказе, числа идут с выбранным шагом.
Заключение
У каждого ресторана свой скрытый смысл и метод генерации номеров для заказов. Мы выбрали 4-й описанный мною способ, так как он максимально близко соответствует нашим критериям.
Пишите в комментариях свои замечания и идеи по этому поводу, буду рад обсудить 🤗
Автор, без обид, но это серьёзная заявка на новый мем, и заодно живое доказательство другого нетленного хита: «Если бы программисты строили дома» 😉
p.s.
«А-12» понятнее, чем «012»? Серьёзно? 🙂
«Если бы программисты строили дома» (спойлер — программисты рас***дяи) — отличный мем, забавный и жизненный. А тут скорее статья, которой мне не хватало для решения этой задачи, поэтому пришлось самому её написать. Плюс может кто-то скажет: "Ты что дурак, что так сложно, лучше сделать вот так...". Так что не совсем понял что тут мемного?
создание проблем на пустом месте
Именно. Причём даже не самым изящным способом: аккурат как и удаление гланд через пятую точку 🙂
решение #0
-порядковый номер заказа за этот день с момента открытия кассы. совпадает с номером чека в смене.
Специально для Вас добавил опрос 😄
все три хуже. трехзначный в контексте "очереди" не имеет смысла-никто не вывезет 999 одновременно готовящихся заказов, а параноики, воющие "ряя конь куренты узнают число чеков за смену" пойдут в жопу-конкуренты это способны выяснить и без номеров заказа, просто купив две копеечные хреновины после открытия и перед закрытием
Неочень название соотносится с текстом. Название прототкрытие тайны, а текст про то какой способ выбрать...
Да дайте уже самим номер заказа выбирать, и лояльность поднимите
Любимое число человек назовет, ему приятно
Или кассир может такой тебе номер сделать что так приятно будет!
А ещё лучше без номеров
Пока Вы придумывали генерацию номеров, кто-то создал какое-то вырвиглазное и забагованное приложение, и люди им пользуются даже платно за неимением альтернатив.
Вы имеете в виду, что долгий процесс разработки с продумыванием каждой микро фичи одна крайность, а "тяп-ляп на коленке лишь бы побыстрее" - другая?
Те, кто выпускает такие штуки конвейером, знают, что лучше раньше (вовремя) выпустить рабочий прототип, а потом дорабатывать (плюс уже обратная связь будет), а не наоборот. Особенно это касается такой мелочи, как нумерация чего-либо, потому что это совсем незначительная вещь, оно того не стоит
Я это прекрасно понимаю и поддерживаю, и поэтому наше приложение работает уже почти год. Но версия, которую, на мой взгляд, не стыдно показать, появилось недавно)
например?