Тайный смысл номеров заказов в ресторанах быстрого питания

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

Задача

Сделать генерацию номеров заказов. Казалось бы, легче задачи не придумаешь 😒😒😒

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

Требования

🤯 Простота и понятность

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

🍒 Уникальность

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

⏰ Предсказуемость

Ожидая в зале и смотря на монитор с номерами заказов клиент должен иметь примерное представление, как скоро его заказ будет готов. Например, если мой номер 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-й описанный мною способ, так как он максимально близко соответствует нашим критериям.

Пишите в комментариях свои замечания и идеи по этому поводу, буду рад обсудить 🤗

Какой номер заказа лучше? 
A-12
012
12 %name%
Показать результаты
Переголосовать
Проголосовать
0
14 комментариев
Написать комментарий...
PCT URL

Автор, без обид, но это серьёзная заявка на новый мем, и заодно живое доказательство другого нетленного хита: «Если бы программисты строили дома» 😉

p.s.
«А-12» понятнее, чем «012»? Серьёзно? 🙂

Ответить
Развернуть ветку
Валентин Подкопаев
Автор

«Если бы программисты строили дома» (спойлер — программисты рас***дяи) — отличный мем, забавный и жизненный. А тут скорее статья, которой мне не хватало для решения этой задачи, поэтому пришлось самому её написать. Плюс может кто-то скажет: "Ты что дурак, что так сложно, лучше сделать вот так...". Так что не совсем понял что тут мемного?

Ответить
Развернуть ветку
Khabib96

создание проблем на пустом месте

Ответить
Развернуть ветку
PCT URL

Именно. Причём даже не самым изящным способом: аккурат как и удаление гланд через пятую точку 🙂

Ответить
Развернуть ветку
Khabib96

решение #0
-порядковый номер заказа за этот день с момента открытия кассы. совпадает с номером чека в смене.

Ответить
Развернуть ветку
Валентин Подкопаев
Автор

Специально для Вас добавил опрос 😄

Ответить
Развернуть ветку
Khabib96

все три хуже. трехзначный в контексте "очереди" не имеет смысла-никто не вывезет 999 одновременно готовящихся заказов, а параноики, воющие "ряя конь куренты узнают число чеков за смену" пойдут в жопу-конкуренты это способны выяснить и без номеров заказа, просто купив две копеечные хреновины после открытия и перед закрытием

Ответить
Развернуть ветку
Алексей

Неочень название соотносится с текстом. Название прототкрытие тайны, а текст про то какой способ выбрать...

Ответить
Развернуть ветку
Artem Sovetnikov

Да дайте уже самим номер заказа выбирать, и лояльность поднимите
Любимое число человек назовет, ему приятно
Или кассир может такой тебе номер сделать что так приятно будет!
А ещё лучше без номеров

Ответить
Развернуть ветку
Роман Анисимов

Пока Вы придумывали генерацию номеров, кто-то создал какое-то вырвиглазное и забагованное приложение, и люди им пользуются даже платно за неимением альтернатив.

Ответить
Развернуть ветку
Валентин Подкопаев
Автор

Вы имеете в виду, что долгий процесс разработки с продумыванием каждой микро фичи одна крайность, а "тяп-ляп на коленке лишь бы побыстрее" - другая?

Ответить
Развернуть ветку
Роман Анисимов

Те, кто выпускает такие штуки конвейером, знают, что лучше раньше (вовремя) выпустить рабочий прототип, а потом дорабатывать (плюс уже обратная связь будет), а не наоборот. Особенно это касается такой мелочи, как нумерация чего-либо, потому что это совсем незначительная вещь, оно того не стоит

Ответить
Развернуть ветку
Валентин Подкопаев
Автор

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

Ответить
Развернуть ветку
Khabib96

например?

Ответить
Развернуть ветку
11 комментариев
Раскрывать всегда