От приложения на планшете к цельному устройству
Эвотор — умные онлайн-кассы для малого бизнеса. Базовая функция — фиксировать продажу и выдавать чек. Но предприниматели могут гораздо больше: привлекать клиентов, автоматизировать поставки, вести учёт, настраивать аналитику, следить за бизнесом удалённо.
Я пришёл в компанию летом 2016 года. Сперва мы разработали единое устройство, на котором продавец фиксирует покупки и ведёт учёт, затем сделали отдельное приложение для товароведов. В результате построили централизованную систему, собирающую данные о продажах со всех касс страны.
Лаунчер и главный экран
Мы начинали с планшета на Android, подключённого к принтеру чеков. Прототип, не заточенный на работу продавца с потоком покупателей. Первая задача — совместить собственные модули кассы (продажа, товары, алкоголь, сотрудники, настройки) со сторонними приложениями из магазина.
Я спроектировал лаунчер, где все модули стали крупными плитками — хотя под капотом оставались частью одного приложения. Лаунчер бесшовно совмещал наши программы с тем, что клиент ставит из магазина.
Для разработчиков приложений я написал дизайн-гайд и описал UX-сценарии встраивания в нативный интерфейс терминала — как приложения должны выглядеть и вести себя, чтобы кассир не замечал границы между «нашим» и «сторонним».
Подключение устройств
К кассам подключают весы, сканеры штрихкодов, пинпады, дисплеи покупателя, денежные ящики. Каждое устройство со своим протоколом, драйверами и капризами. Техническая команда реализовала HAL — Hardware Abstraction Layer. Все устройства регистрируются в общем хранилище, разработчики сами пишут драйверы и публикуют их в магазине.
Моя задача — спрятать всю эту техническую сложность от владельца бизнеса. Я спроектировал UX и UI подключения так, чтобы машина сама разруливала конфликты и определяла тип устройства. Когда сканер или весы подключаются к кассе, система видит это и подсказывает, что нужно для начала работы. А если удаётся определить тип — делает всё автоматически. Я писал тексты интерфейса, рисовал иллюстрации и доводил решение до релиза, чтобы ни один аспект не потерялся по дороге.
Получился аналог plug-n-play для коммерческой экосистемы на Android. Механизм защитил от конкуренции за ресурсы кассы и от подделки фискальных чеков.
Старт работы
Чтобы касса работала стабильно и собирала данные о продажах, нужен целый список условий: надёжный интернет, свежая ОС, правильные дата и время, исправный фискальный чип и модуль печати, регистрация в налоговой, аккаунт Эвотора. Клиент проходит эти шаги как по чеклисту.
Неочевидная сложность — предусмотреть реакцию кассы на неисправность каждого пункта. Если касса сбоит, предпринимателя штрафует государство, а наши инструменты аналитики теряют смысл. Поэтому до написания кода мы построили полную карту состояний и возможных переходов — все ветвления, все сценарии отказа.
Эта карта помогла разработчикам спроектировать архитектуру, а мне — держать систему под контролем в будущем, когда появлялись новые модели устройств с новыми точками отказа. Я верстал прототипы, описывал краевые ситуации и поведение в нестандартных случаях. Времени на разработку всегда было мало, но я не давал команде скатываться в простые для реализации, но неудобные решения — всегда предлагал компромиссы, где пользователь не замечает недоделанности части сценариев. По сути — идеальная механика создания MVP.
Оферта
Оферта — документ, который защищает клиента и нас в спорных ситуациях. Юристы пишут его в doc, но клиенты соглашаются на кассах и в браузере. Нужен механизм, который всегда показывает актуальную версию и выглядит опрятно на любой платформе.
Я придумал, что терминалы и веб будут показывать один и тот же HTML-документ, адаптированный под интерфейс кассы для удобного чтения. В URL хранится дата публикации, в конце — ссылка на предыдущую редакцию, а относительная ссылка всегда ведёт на свежую версию. Написал на Python скрипт конвертации doc → HTML с автоматической типографикой.
- Единый HTML-документ для касс и браузера
- Дата публикации в URL
- Ссылка на предыдущую редакцию в конце
- Относительная ссылка, всегда ведущая на актуальную версию
- Автоматическая конвертация из doc с типографикой
Отключение продукта «Свой магазин»
Когда Эвотор был концептом, его продавали как программу на планшете в комплекте с принтером чеков. Клиент подключал планшет к принтеру по Bluetooth, запускал программу и торговал. Но законы менялись постоянно, и поддерживать устаревший прототип параллельно с основными продуктами стало неподъёмно. Решили вывести его с рынка.
Я спроектировал весь процесс отключения: подготовил скрипты для поддержки и партнёров, описал интерфейс заглушки, согласовал условия с юристами. Мы предупредили клиентов, перевели часть на новые модели со скидкой, подключили колл-центр, мониторили претензии в течение месяца. Это не про дизайн экранов — это про проектирование процесса, в котором ни один клиент не чувствует себя брошенным.
Центр уведомлений
До 2016 года между нами и клиентами стояли ЦТО — центры технического обслуживания. Они устанавливали, чинили и настраивали кассы за деньги, зарабатывали на консультациях и были не заинтересованы в упрощении. Им было выгодно, чтобы всё оставалось сложным. Когда вышел закон, отменивший их монополию, мы начали строить прямые каналы общения с клиентами.
Одним из таких каналов стала сама касса. Я спроектировал центр уведомлений — место, где мы оповещаем о нововведениях, изменениях закона и продвигаем сервисы. Продвигаем таргетированно: владелец кофейни видит подборку приложений для кофейни, касса с большим оборотом наличных — предложение мобильной инкассации.
Клонирование кассы
Кассы ломаются. Когда от поломки бизнес простаивает и теряет деньги, нужна максимально быстрая замена. Но есть жёсткое ограничение: фискальный накопитель намертво привязан к серийному номеру кассы. Подменная касса должна получить номер сломанной, при этом нужна защита от дублей и продуманный сценарий возврата из ремонта.
Для оператора весь процесс — заполнение онлайн-формы и перезагрузка. Вся сложность переложена на алгоритмы. Под капотом серийный номер старой кассы зашивается в новую, переносятся данные о продажах. В аналитике клиент видит прежнюю кассу со всеми продажами — без настроек и миграций.
Если старая касса возвращается из ремонта и выходит в онлайн, система распознаёт её, сбрасывает данные и присваивает новый номер. Кассу можно использовать как новую.
Характеристики товаров
Обувь, одежда, любой товар с большим ассортиментом — нужны атрибуты и гибкий контроль остатков по размеру и цвету. Клиент загружает сотню моделей обуви, у каждой 10 размеров и 5 цветов. Касса помогает кассиру за секунды найти нужный товар среди этого изобилия и подсказывает, сколько осталось на складе.
За кадром
Система обновлений. Новые способы оплаты. Автоматическое взвешивание товаров. Настройки, которые не требуют настройки. Резервное копирование. Адаптация интерфейса под разные модели устройств. Быстрая настройка кассы с компьютера. Дизайн новых моделей кассы. Перепродажа кассы без боли — и ещё пара сотен мелких, но не менее интересных задач, которые не поместились в этот рассказ.
Спасибо
Руководство: Илья Линник, Надежда Авданина
Дизайн: Александр Дейков
Разработка: Арсений Сафин, Андрей Кузнецов, Антон Неделько, Олег Мозговой, Владимир Дегтев, Алексей Фиалко, Константин Довнар, Юрий Волокитин, Кирилл Хаустов
Редактура: Наталья Киреева
Юрист: Владимир Петров
Партнёры: Артём Горленко, Дмитрий Савельев
Также: Александр Жалнин, Денис Михайлов, Александр Мартынов, Саша Волкова, Катя Будашкина