В конце декабря 2008 года меня пригласили в одну из служб такси г.Перми с целью автоматизации существующих бизнес-процессов. В целом передо мной были поставлены три фундаментальные задачи:
- Разработать программный комплекс для call центра с мобильным приложением для водителей такси и автоматизировать внутренние бизнес-процессы.
- Сделать все надо было в максимально сжатые сроки.
- Иметь собственное, а не купленное у сторонних разработчиков, программное обеспечение, которое в дальнейшем по мере развития бизнеса можно было самостоятельно масштабировать под постоянно меняющиеся условия рынка.
На тот момент я не понимал, как устроен этот рынок и его нюансы, но тем не менее очевидными для меня были две вещи. Call центр необходимо строить на базе программной АТС asterisk с открытым исходных кодом. Обмен информацией между call центром и мобильным приложением по сути является клиент-серверным решением со всеми соответствующими паттернами проектирования архитектуры будущего проекта и его программирования.
После предварительной оценки поставленных задач, сроков выполнения и затрат на реализацию проекта, согласовав все необходимые вопросы с владельцем службы такси, в январе 2009 года я приступил к работе.
Забегая вперед скажу сразу. В итоге получилась масштабируемая платформа, работающая на 60+ серверах, в 12 городах России и 2 Казахстана. Общая прибыль компании составляла 100+ млн.руб/месяц.
Этап первый. Прототип
Поскольку на тот момент у меня не было практического опыта в ip телефонии, а с asterisk был знаком поверхностно в рамках «домашних» экспериментов, было принято решение начать работу с разработки мобильного приложения и серверной части. Попутно закрывая пробелы в знаниях по остальным задачам.
Если с мобильным приложением более-менее все было понятно. На тот момент оно могло быть написано только на java для простых кнопочных телефонов, то с написанием сервера, обслуживающего мобильных клиентов, вопрос стоял несколько сложнее:
- Какая серверная ОС будет использоваться;
- Исходя из логики, что язык программирования выбирается под задачу, а не наоборот и с учетом п.1, какой язык программирования будет оптимальным для решения задач;
- При проектировании необходимо было учесть предполагаемые в будущем высокие нагрузки на сервис;
- Какая база данных сможет гарантировать отказоустойчивость при высоких нагрузках и как сохранить быстрое время отклика БД при росте количества обращений к ней;
- Определяющим фактором являлась скорость разработки и возможность быстрого масштабирования кода
- Стоимость оборудования и его обслуживания в дальнейшем (одним из условий заказчика – сервера должны находиться на подконтрольной ему территории);
- Стоимость разработчиков, которые понадобятся на следующих этапах работы над платформой;
А также множество других вопросов, связанных с проектированием и разработкой.
Перед началом работы над проектом я предложил владельцу бизнеса следующее стратегическое решение: поскольку проект достаточно сложный, его реализация займет заметное количество времени, поэтому сначала я создаю MVP версию, на которую уйдет не так много времени и средств, но которая позволит его компании получить конкурентное преимущество на рынке уже «здесь и сейчас», а также расширит его возможности как службы такси. Мне-же в свою очередь такое промежуточное решение даст время более обдуманно спроектировать конечное решение и время на технические эксперименты. При этом, реализованное программное решение не будет гарантированно правильно спроектировано и возможно в последующем будет кардинально переделано или заменено, но оно точно будет выполнять минимально необходимый функционал для «отрыва от конкурентов». Идея основателю такси понравилась, поэтому в итоге так и поступили.
Первые две недели я потратил на изучение бизнес-процессов в компании, и изучение работы такси «изнутри». Провел бизнес-анализ, где, что и как можно автоматизировать и нужно ли вообще. С какими сложностями и проблемами сталкиваются сотрудники компании. Как их решают. Как организован рабочий день у работников компании. Какие инструментами пользуются.
К концу третьей недели после начала работы и изучения интересующих вопросов в интернете, с учетом пожеланий владельца бизнеса, а также моих собственных знаний и возможностей на тот момент, было принято решение применить следующий стек:
- Сервер БД: MsSQL (бесплатная версия с ограничением файла БД до 2Гб);
- Разработка сервера, обслуживающего мобильных клиентов, в Delphi под windows, так как уже имелся windows сервер на котором будет установлена БД, а также сама среда разработки способствует быстрой разработке;
- С учетом низких скоростей интернета на мобильных телефонах в далеком 2009 году — протокол обмена между клиентом и сервером должен быть бинарным. Это позволит уменьшить размер передаваемых пакетов с данными и как следствие повысит стабильность работы клиентов с сервером;
Еще две недели ушли на проектирование протокола и базы данных. Получилось 12 пакетов, обеспечивающих обмен всеми необходимыми данными между мобильным клиентом и сервером и около 20 таблиц в БД. Эту часть работы я делал с учетом на будущее, даже если придется изменить стек технологий полностью, структура пакетов и БД должна остаться неизменной.
После подготовительных работ можно было приступать к практической реализации идеи. Чтобы немного ускорить процесс и освободить себе время для остальных задач я сделал черновую версию мобильного приложения, наброски UI, частично UX и привлек к проекту знакомого java программиста. А сам сосредоточился на разработке серверной части, проектировании и тестировании.
К концу второго месяца работы над MVP, была готова первая версия прототипа сервера и клиента.
А к концу третьего месяца после синтетических тестов и полевых испытаний, фикса багов, небольших доработок протокола и БД приложение было готово для вывода в продакшен. Что и было сделано.
С этого момента начинается самая интересная и самая сложная часть работы над проектом.
В процессе перехода водителей на новое ПО было организованно круглосуточное дежурство. Так как не все могли приехать днем в рабочее время. К тому-же административно, волевым решением основателя компании, было организовано так, что логин/пароль вводил менеджер службы такси и водителю они не сообщались. С моей стороны была нужна техническая поддержка пользователей на случай сбоев и непредвиденных ситуаций.
Закон Мэрфи говорит нам: «Все, что может пойти не так, пойдет не так». И именно не так все и пошло… Одно дело, когда я, да несколько таксистов протестировали приложение на нескольких десятках тестовых заказов. И совсем другое дело, когда 500+ водителей на линии работают в режиме реального времени на настоящих заказах реальных людей.
Архитектура мобильного приложения была простой и багов в нем оказалось заметно меньше, чем в сервере. Поэтому основной фокус работ был на серверной части. Самым критичным глюком в приложении была проблема дисконнекта от сервера при пропадании интернета на телефоне и повторном восстановлении сессии. А интернет пропадал довольно часто. Во-первых, сам по себе в те года интернет на телефоне не был достаточно стабильным. Во-вторых, было много слепых зон, где интернет просто не работал. Эту проблему мы выявили почти сразу и в течении суток устранил и обновил все установленные ранее приложения.
На сервере в основном были ошибки в алгоритме распределения заказов и не корректной обработкой некоторых запросов от клиентов. По факту выявления глюков, исправлял и обновлял сервер.
На самом деле технических проблем на этом этапе было не так уж и много. Вся сложность была в том, что почти месяц я дежурил в офисе, лишь изредка выбираясь домой. Раза 4-5, наверное. И спал урывками, так как над проектом на тот момент работал один и кроме меня никто исправить ничего не смог бы.
Месяц, это не значит, что все постоянно глючило в течении месяца и я, не переставая что-то там кодил. Просто мы так решили. Ведь бизнес уже работал и приносил прибыль. И лучше перестраховаться, и отдохнуть потом, чем терять клиентов и прибыль сейчас. Мы все это прекрасно понимали, поэтому всей командой сообща уделили максимальное внимание и время введению нового ПО в систему такси. А с учетом текущего трафика заказов, за месяц мы точно устраним все недостатки. Ну а скрытые баги, что могут остаться уж точно не будут иметь критических последствий на бизнес процесс и их при необходимости можно исправлять в рабочем порядке.
Здесь надо отметить неоценимую помощь со стороны директоров и бригадиров служб такси, которые с максимальным пониманием сложности ситуации перевода водителей на новое ПО круглосуточно работали с водителям. По факту, после завершения работ по установке новых программ на телефоны мы не потеряли ни одного водителя. И не критично увеличили процент не вывоза клиентов, который в скором времени вернули к нормальным показателям.
На этом был завершен первый этап работы над проектом. И надо заметить результат не заставил себя ждать. За счет автоматизации раздачи заказов водителям без участия человека — среднее время ожидания такси клиентом сократилось на порядок, что естественным образом повысило лояльность клиентов к службе. Это привело к увеличению количества заказов. Следом увеличилось и количество таксистов. Как следствие увеличилось и количество успешно завершенных заказов. И как результат — увеличилась прибыль компании. Разумеется, здесь я забегаю несколько вперед, так как весь этот процесс прошел не моментально. Сказать, что руководство было довольно — ничего не сказать. Мне был открыт безлимит в дальнейшем финансировании проекта.
Продолжение следует..
Автор: Denis Yakushev