Як маленька програма перетворила маленьку контору на федеральну організацію з прибутком 100+ млн.руб/месяц

Наприкінці грудня 2008 року мене запросили до однієї зі служб таксі м.Пермі з метою автоматизації існуючих бізнес-процесів. Загалом переді мною було поставлено три фундаментальні завдання:


  • Розробити програмний комплекс для call центру з мобільним додатком для водіїв таксі та автоматизувати внутрішні бізнес-процеси.
  • Зробити все треба було у максимально стислий термін.
  • Мати власне, а не куплене у сторонніх розробників, програмне забезпечення, яке надалі в міру розвитку бізнесу можна було самостійно масштабувати під умовами ринку, що постійно змінюються.

На той момент я не розумів, як влаштований цей ринок та його нюанси, проте очевидними для мене були дві речі. Call центр необхідно будувати на базі програмної АТС asterіsk з відкритим вихідним кодом. Обмін інформацією між 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, мабуть. І спав уривками, бо над проектом на той момент працював один, і окрім мене ніхто виправити нічого не зміг би.

Місяць, це не означає, що все постійно глючило протягом місяця, і я, не перестаючи щось там кодив. Просто ми так вирішили. Адже бізнес уже працював та приносив прибуток. І краще перестрахуватися і відпочити потім, ніж втрачати клієнтів і прибуток зараз. Ми все це чудово розуміли, тому всією командою спільно приділили максимальну увагу та час введення нового програмного забезпечення в систему таксі. А з урахуванням поточного трафіку замовлень, за місяць ми точно усунемо всі недоліки. Ну а приховані баги, що можуть залишитися точно не матимуть критичних наслідків на бізнес процес і їх при необхідності можна виправляти в робочому порядку.

Тут треба відзначити неоціненну допомогу з боку директорів та бригадирів служб таксі, які з максимальним розумінням складності ситуації переведення водіїв на нове програмне забезпечення цілодобово працювали з водіями. За фактом, після завершення робіт із встановлення нових програм на телефони ми не втратили жодного водія. І не критично збільшили відсоток невивезення клієнтів, який незабаром повернули до нормальних показників.

На цьому було завершено перший етап роботи над проектом. І треба помітити результат не забарився. За рахунок автоматизації роздачі замовлень водіям без участі людини — середній час очікування таксі клієнтом скоротився на порядок, що природно підвищило лояльність клієнтів до служби. Це спричинило збільшення кількості замовлень. Услід збільшилася і кількість таксистів. Як наслідок збільшилася кількість успішно завершених замовлень. І як результат — збільшився прибуток компанії. Зрозуміло, тут я забігаю дещо вперед, тому що весь цей процес пройшов не миттєво. Сказати, що керівництво було достатньо, нічого не сказати. Мені було відкрито безліміт у подальшому фінансуванні проекту.

Далі буде..

Джерело: habr.com

Додати коментар або відгук