Разработка сложного логистического сервиса с нуля

О клиенте
Разработка сложного веб-сервиса для логистического стартапа междугородних перевозок, который сократит расходы бизнеса и простых отправителей на перевозку грузов.
О клиенте

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

У Точки-Точки нет собственного автопарка и складов. Она является посредником между отправителем и перевозчиком.

Цели
  • Разработать IT-инфраструктуру стартапа;
  • Создать работающий логистический продукт, который позволит экономить на междугородних перевозках;
Задачи
  • Спроектировать интерфейсы сервиса, продумать пользовательские сценарии и логику сервиса для всех сегментов аудитории;
  • Разработать алгоритм аукциона среди перевозчиков;
  • Разработать калькуляторы расчета цены перевозки для отправителей;
  • Разработать калькуляторы для перевозчиков;
  • Придумать и реализовать единую систему управления складами партнеров;
  • Разработать алгоритм генерации партий грузов;
  • Разработать айдентику и визуальный стиль бренда.

Филиппова Елена, account director AIR Production

— Точка-Точка — это логистический стартап, который пришел к нам на стадии MVP. В чем его концепция и суть?

У создателей проекта была идея привнести концепцию «свободного рынка» и шеринга в индустрию логистики. Это возможно с помощью IT-системы, которая соединяет потребителя и перевозчика, готового оказать услугу. У компании нет фиксированных тарифов, вместо этого цена предлагается интервальная на основе вычислений калькулятора и предложений перевозчика. Благодаря отсутствию собственных складов или автопарков финальная цена выходит ниже, чем у конкурентов.

Компания паллетирует весь поступивший груз, формирует партии, после чего IT-система распределяет их среди перевозчиков. Итоговая стоимость перевозки делится на всех отправителей.

Что было на старте:
  • Дорогая междугородняя перевозка грузов
  • Простаивание груза на собственных складах
  • Простаивание в пунктах выдачи
Что стало:
  • Сокращение издержек на перевозку в несколько раз

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

Скажем, у нас есть Татьяна из Екатеринбурга. У нее небольшое есть ИП и производство авторской керамической посуды, которую она продает через Instagram. Также она довольно часто отправляет грузы родственникам в другие города: подарки, бытовую технику и т.п. Для всех этих задач Татьяна может создать единый личный кабинет с условием, что она предоставит данные о себе как о физическом, так и о юридическом лице.

Есть еще один крупный сегмент аудитории: перевозчики. Это юридические лица, которые занимаются магистральными и прямыми перевозками. Все они зарегистрированы на сайте и верифицированы страховой компанией.

Чем сервис полезен бизнесу?
Точка-Точка снижает расходы на перевозку. Это также сказывается на цене конечного получателя груза, который не переплачивает за отправку ему заказа. Ну и для удобства есть персональный менеджер клиента, который 24/7 на связи, а еще оформление заказа с телефона. Оно занимает столько же времени, сколько на сайте.

С другой стороны, Точка-Точка позволяет перевозчикам заработать больше, дозагрузив свои транспортные средства (ТС). Более того: цена на груз устанавливается в порядке аукциона.

Так что Точка-Точка — это такой посредник между бизнесом отправителя и перевозчика.

Из чего состоит сервис?
Точка-Точка — стартап с разветвленной структурой, которая содержит интерфейсы для отправителей и перевозчиков, для комплектовщиков и для менеджеров самого стартапа.

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

Типы калькуляторов:

Как работают калькуляторы для клиентов?
Если клиент выбирает услугу «Сборный груз», то он видит актуальные цены других операторов. Для этого мы интегрировались по открытому API с калькуляторами расчета ведущих компаний по доставке.

Отправитель может рассчитать цену с помощью калькулятора Точки-Точки, и, при отображении финальной цены, сверху всплывает блок с ценами конкурентов на такой же груз. Цена конкурентов всегда актуальна и рассчитывается моментально. Это происходит так:

  • Вы вводите данные о своем грузе: тип товара, габариты, вес, ценность товара, количество мест под него, город отправки и доставки, а также вид упаковки;
  • Эти данные передаются в базу расчета Точки-Точки;
  • Параллельно запрос с этими же данными передается в базу расчета конкурентов. При этом никакая конфиденциальная информация или действия, совершенные на сайте, не уходят на сторону других компаний;
  • Дальше калькуляторы каждой компании совершают расчет, исходя из своих тарифов;
  • А вы видите точную цену от Точки-Точки и цены конкурентов без НДС и упаковки.

Описанный процесс занимает меньше 1 секунды.

Если же у отправителя нет точного понимания по характеристикам отправляемого груза, то можно зайти на отдельную страницу с сравнением цен по весу: 30 кг, 100 кг, 1000 кг, 5000 кг. Информация по ценам в этом разделе также постоянно обновляется, если у одного из операторов меняются тарифы.

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

Как работают калькуляторы для перевозчиков?
Перевозчикам важно быстро погрузить дополнительный вес, желательно уже спалеттированный (то есть упакованный и рассортированный) и начать выполнять заказ.

Чтобы распределять заказы между ними, на страницах магистральной и прямой перевозки реализованы аукционы. В случае с магистральными на странице расположен калькулятор дохода с аукционом. Для него был разработан алгоритм генерации партий в двух вариантах: на Java и на PostgreSQL. По итогам теста оказалось, что PostgreSQL отрабатывает быстрее и выдает расчет партий за 0,5 миллисекунд, а Java тратила 5-10 секунд. Подробнее о разработке алгоритма можно прочитать тут.

Что из себя представляет сам алгоритм аукциона для магистральных перевозок?
Отправитель заполняет параметры заказа, нажимает «Сформировать заказ» и видит примерный интервал стоимости перевозки его груза. Скажем от 2150 до 2800 рублей. Заказ доставляют на склад, и его принимает комплектовщик. Он проверяет данные по габаритам, весу и другим характеристикам, которые указал отправитель на сайте. После того, как заказ спаллетирован, он попадает на аукцион среди перевозчиков, имеющих ЛК на сайте, где может торговаться от нескольких минут до нескольких дней.

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

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

Какие действия предусмотрены для такого сценария?
Для таких случаев мы создали отдельный интерфейс, «Перегруз», который переключает заказ с аукционной модели на собственных перевозчиков. Этот интерфейс позволяет распределять товары вне аукциона среди перевозчиков-партнеров Точки-Точки.

Эти процессы никак не влияют на клиента: для него нет промедлений по сроку или изменений в цене. Как уже было сказано, цена в момент оформления заказа выводится интервальная. В срок доставки уже заложено время на аукцион.

Если же Точка-Точка привлекает перевозчиков вне аукционной модели, то они также знают об интервалах и укладываются в них.

Что насчет алгоритма аукциона для прямых перевозок?
Он отличается от алгоритма для магистральных. В данном случае ставки делают перевозчики, а не система. При этом для каждого груза также стоит ограничение по времени на аукционе.

Это происходит так:
  • После создания заказа информация о нем рассылается FTL перевозчикам. Рассылка идет через чат-бот и почту. В сообщении указывается время окончания торгов;
  • Перевозчик заходит в интерфейс заказа, видит предлагаемую максимальную и минимальную стоп-цену (забрать заказ без торга);
  • Он назначает водителя для груза;
  • Дальше перевозчик делает ставку либо на все паллеты, либо подбирает подходящие из заказа и делает ставку по ним;
  • Когда настает время окончания торгов, система создает партию для тех перевозчика(-ов), которые предложили лучшие условия.

Как построено хранение и обмен данных на проекте?
Площадка интегрирована с внешней общей базой данных (БД), написанной на PostgreSQL. В ней происходит расчет партий для калькулятора перевозчика согласно логике алгоритма генерации партий, реализованного там же. Не стоит забывать и о процессе работы с заказом на складе. Комплектовщики проверяют его, готовят по нему закрывающие документы, паллетируют. Пользовательские данные, информация по заказам, статусам и документам хранятся в общей БД. Чтобы эти данные отобразились в системе, они передаются по API в другие базы данных (БД сайта и БД страховой компании).

На момент разработки у Точки-Точки не было собственных складов, только партнерские. И вначале мы хотели реализовать отображение статусов следующим образом: интегрироваться со складами партнеров, у которых уже есть своя система управления складами. А затем подтягивать по API данные о действиях комплектовщика и статусе заказа на саму площадку и в общую базу данных.

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

В итоге мы пошли другим путем и создали собственную систему управления складами для кладовщика. Получился такой вот сервис внутри сервиса.

Сервис работает так:
  • Есть различные склады, которые арендует Точка-Точка;
  • Персоналу этих складов раздаются планшеты или другая техника для комплектации грузов;
  • У каждого комплектовщика есть уникальный код, с помощью которого он входит в систему на девайсе и фиксирует статусы;
  • Все действия комплектовщиков автоматически отображаются в системе управления, сохраняются в виде истории;
  • Собранная информация попадает в личные кабинеты отправителя и перевозчика.

Как происходит страховка грузов и проверка перевозчиков?
Точка-Точка интегрирована со страховой компанией, которая верифицирует перевозчиков и страхует заказы. Чтобы перевозчик мог брать грузы, а отправитель — не беспокоиться за них, на сторону страхового агентства передаются: паспортные данные, сведения о правах и т.п. На верификацию нового перевозчика и его водителей требуется обычно до 24 часов, затем он уже может приниматься за заказы.

Программы:

Какой стек применялся на этом проекте?
Верстку мы делали на Vue, а для бэкенда использовали Symfony + SONATA admin, PostgreSQL (БД) и частично Java для алгоритма генерации партий, хотя по итогу эти наработки остались не использованными.

Клиент пришел к нам на стадии MVP, без визуальной айдентики. Что мы помогли реализовать по части дизайна?
Мы разработали дизайн-концепцию проекта и логотип. Клиент пришел к нам с прототипами на Тильде. И его команду больше интересовала и интересует функциональность и удобство для пользователей, а не эстетическая упаковка. Поэтому мы предложили концепцию в строгих контрастных цветах: грифельный и красный.

Основной упор сделали на проектировании калькуляторов и различных форм: для отслеживания заказов, комплектовки и т.п. Интерфейсы калькуляторов мы тестировали на перевозчиках...

Какую методологию мы использовали на проекте?
От четкой методологии мы отказались: это архаизм, да и нет смысла ограничивать себя рамками определенных инструментов или подходов. Вместо этого взяли на вооружение принципы гибкой разработки и работы по спринтам. В этом проекте спринты длились по 4 недели. Такой длинный срок был выбран не случайно: команда Точки-Точки хотела получать какой-то готовый продукт каждый раз: калькулятор, прототип нового интерфейса и др. Успеть подобное можно было только за срок не менее 4 недель.

Верстка, дизайн, проектирование и программирование шли параллельно, так как мы работали над несколькими сервисами одновременно.

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

От спринтов мы отказались, потому что новые задачи не помещались в этот период. Здесь разработка ведется по продуктовому принципу.

За время, что мы работаем вместе, у Точки-Точки появилась собственная инхаус-команда разработки. Однако они не отказались от наших услуг. Сейчас продолжаем работать над новыми проектами компании, поддерживаем площадку.