Хабрахабр

[Из песочницы] Как маленькая программа превратила маленькую контору в федеральную компанию с прибылью 100+ млн.руб/месяц

В целом передо мной были поставлены три фундаментальные задачи:
 В конце декабря 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, наверное.

Просто мы так решили. Месяц, это не значит, что все постоянно глючило в течении месяца и я, не переставая что-то там кодил. И лучше перестраховаться, и отдохнуть потом, чем терять клиентов и прибыль сейчас. Ведь бизнес уже работал и приносил прибыль. А с учетом текущего трафика заказов, за месяц мы точно устраним все недостатки. Мы все это прекрасно понимали, поэтому всей командой сообща уделили максимальное внимание и время введению нового ПО в систему такси. Ну а скрытые баги, что могут остаться уж точно не будут иметь критических последствий на бизнес процесс и их при необходимости можно исправлять в рабочем порядке.

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

И надо заметить результат не заставил себя ждать. На этом был завершен первый этап работы над проектом. Это привело к увеличению количества заказов. За счет автоматизации раздачи заказов водителям без участия человека — среднее время ожидания такси клиентом сократилось на порядок, что естественным образом повысило лояльность клиентов к службе. Как следствие увеличилось и количество успешно завершенных заказов. Следом увеличилось и количество таксистов. Разумеется, здесь я забегаю несколько вперед, так как весь этот процесс прошел не моментально. И как результат — увеличилась прибыль компании. Мне был открыт безлимит в дальнейшем финансировании проекта. Сказать, что руководство было довольно — ничего не сказать.

Продолжение следует..

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»