2020

"Меняю километры на рубли"

или о том, как создавалась биржа рекламы на автомобилях Jata.ru

Jata ru.jpg

Что такое Jata.ru ?

Jata.ru — это биржа рекламы на автомобилях. Любых. На легковых, грузовых и даже на городских автобусах и «маршрутках».

Кому это нужно? Кто пользуется Jata.ru?

Jata.ru нужна, как известным брендам, так и совсем молодым компаниям (рекламодатели).

С помощью данной биржи можно продвигать свой бренд, сообщать о грандиозных распродажах, об открытиях торговых центров и акциях от застройщиков, рекламировать концерты звезд и т.д. и т.п.

Но самое главное в том, что любой автовладелец может зарабатывать в месяц в среднем около 5 000 руб. - 7000 руб. Для этого водителю необходимо разместить рекламные стикеры на кузове своего автомобиля и просто ездить по своим обычным маршрутам. Никаких дополнительных усилий не потребуется.

Ежемесячная прибавка в размере 5 000 руб. - 7 000 руб. к бюджету будет весьма кстати

Согласитесь, для многих семей в нашей стране ежемесячная прибавка в размере 5 000 руб. - 7 000 руб. к бюджету будет весьма кстати. В частности заработанные деньги позволят окупить среднестатистические расходы на коммунальные услуги, электричество и интернет.

Скриншот с сайта Jata.ru

Мне стало немного яснее. Но все же, как это все работает в жизни?

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

Если же Вы водитель, то все еще проще. В своем личном кабинете Вы принимаете предложения от рекламодателей, утверждаете сумму выплат и приезжаете в сервис-зону Jata.ru.

Ваше авто обклеивают стикерами. Выглядеть оно будет примерно так:

Вид машин с оклейкой

Тут логика проста - чем бОльшая площадь обклейки, тем больше будет итоговая сумма выплат. Площадь обклейки (по сути это и есть тариф) Вы выбираете сами.

Абсолютно всё, что касается сервиса Jata.ru: сами стикеры, их наклейка, использование личного кабинета - для водителя бесплатны.

Перед выездом на свой первый маршрут устанавливаете на смартфон мобильное приложение Jata Drive
и не забываете раз в месяц получать свою выплату.

Скриншот приложения

Сейчас стало все понятно. А что разрабатывали именно Вы?

Регистрацию, авторизацию, личный кабинет пользователя.

Чат между пользователями и администрацией jata.ru

API проекта под мобильное приложение и фронтенд на AngularJS

Приложение реализовано с учетом поддержки нескольких доменов (CORS, поддержка сессий пользователей)

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

Разработали ключевой функционал мобильного приложения.

Полностью спроектировали, создали и протестировали систему gps-трекинга.

Оказали существенную помощь с подбором кадров в уже постоянную команду клиента.

Какие задачи были особенно сложными?

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

Начнем с первой задачи - логика приоритетов различных маршрутов. При выполнении задачи учитываем, что необходимо сделать поиск на основе расширения PostGIS для базы данных PostgreSQL.

Чтобы оценить сложность задачи внимательно изучите кусочек требований клиента, приведенный ниже:

В самом топе показываем результаты поиска по следующей логике:

а) Если вбит конкретный адрес с фиксированной координатой, то приоритетным оказывается тот пользователь, маршрут (или несколько маршрутов) которого лежит ближе всего к одной из точек его маршрута (расстояние от объекта до ближайшей точки маршрута лежит в радиусе 300м от объекта поиска). Далее показываются пользователи с маршрутом типа "Курсирование в рамках района", если объект поиска лежит внутри этого района.

б) Если результат поиска по карте - несколько объектов с фиксированными координатами, то показываем сначала тех пользователей, маршруты которых содержат наибольшее количество объектов в радиусе 300м. от объекта поиска. Далее показываются пользователи с маршрутом типа "Курсирование в рамках района", если объект поиска лежит внутри этого района (сортировка также по наибольшему количеству объектов внутри района).

в) Если объект результата содержит бесконечное множество координат (пр. улица, площадь, район или область), то приоритетнее всего маршруты типа "Заданный маршрут", если район поиска полностью лежит внутри района передвижения. Далее показываются пользователи с маршрутом типа "Курсирование в рамках района", если имеет область пересечения с ним.

г) Низший приоритет всегда имеют маршруты типа "Случайное перемещение", их показываем всегда в конце таблицы независимо от поискового запроса.

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

В данном блоке рекламодатель и владелец рекламного места могут мониторить ежедневные перемещения ТС и просматривать фото ТС. Данные будут обновляться в конце дня.

Так же:

Показываем сколько времени прошло с момента обклейки ТС (в формате N дней либо N месяц K дней)

На карте строим маршрут, показывая на нем ломаную перемещения (можно собирать данные каждые N минут, либо в конце дня подгружать все разом). Так же показываем точки с маркером времени через каждый километр. На точке начале маршрута так же показываем маркер времени.

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

Показываем соответствие маршрутов в %, сравнивая реальные перемещения и маршруты в разделе "Мои Маршруты". В случае заданного маршрута смотрим совпадение линий (% считаем как отношение километров).

В случае с курсированием по району и случайным перемещением соответствие считаем как отношение времен передвижения (берем время передвижения внутри района). Если одно ТС обладает сразу двумя типами маршрутов, то соответствие маршрутам берем через среднее арифметическое.

Показываем не только пробег за день, но и время передвижения. Для рекламодателя показываем месячный бюджет этой рекламной компании, владельцу ТС начисляем эту сумму каждые 30 дней.

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

И где же здесь Не кидаем?

Как и многие наши клиенты проект Jata.ru достался нам достаточно сильно потрепанным после плотного взаимодействия с рынком, к сожалению, нечестной веб-разработки.

Jata.ru поменяла полностью последнюю команду разработчиков, но запуститься своими силами так и не смогла...
Более того, недобросовестные разработчики выложили в открытый доступ код по проекту (сильного вреда это не нанесло, но все равно как минимум неприятно).
Аудит проекта показал, что ожидаемый инвестором функционал реализован всего на 15%.
Перед нами была поставлена задача - всего за 3 месяца запустить биржу. Большим подспорьем оказалось ТЗ:

скрин ТЗ
ТЗ Jata.ru

О любом из приведенных выше ТЗ можно сказать следующее:

ТЗ нельзя назвать общим, но все же определенной детализации, проработки ему серьезно не хватало.

Клиент с недоверием относился к любым обещаниям, предоплатам и в принципе ко всему рынку веб-разработки в целом. Его можно понять, т.к. инвестор потерял больше 400 000 тысяч рублей за полгода попыток запустить проект с разными командами.

Мы же удивили инвестора, попросив в качестве предоплаты всего 1/12 от оценочной стоимости всего проекта, и объяснив клиенту, весьма далекому от IT, что такое Scrum, как мы работаем и почему у нас есть все шансы при плотной работе с обеих сторон через 3 месяца сделать MVP (минимально жизнеспособный продукт).

Перед стартом работ были сформированы и утверждены списки задач, разбитые по спринтам (спринты - это двухнедельные итерации с заранее утвержденным выходным результатом работ) в Трелло.

В процессе работы над спринтом задачи дополнялись деталями, комментариями, у них изменялся рабочий статус ("задача взята в спринт", "требует уточнения", по задаче есть "бага", "высший приоритет", задача выполнена и "зарелизена"):

Скриншот из системы управления Trello

Все, что мы говорили - было простым и ясным. Когда ты знаешь, что ты делаешь - ты можешь это объяснить очень понятным языком.

Однако одних объяснений недостаточно, ниже вы увидите примеры наших еженедельных промежуточных отчетов:

Ежедневный отчёт
Ежедневный отчёт

Подтвердив свои финансовые гарантии на проект, мы взялись за Jata.ru и через 3 месяца первые автомобили биржи вышли на тестовые маршруты.

Это была победа!

Пусть совсем незаметная по меркам рынка IT в целом, но весьма значимая для нас и Jata.ru - мы дали путевку в жизнь еще одной смелой бизнес-идее и смогли ответственным подходом доказать, что честная веб-разработка и сильная методология работ существуют. Причем не по отдельности, а вместе. Вместе с командой НеКидаем.

5 интересных фактов о создании проекта Jata.ru:

1. Неправильный подбор команды обошелся инвестору проекта в 400 000 руб.
2. Всего 3 месяца понадобилось команде НеКидаем, чтобы сделать MVP (минимально жизнеспособный продукт). Это позволило основателям привлечь новый раунд инвестиций.
3. Более чем на 100 часов разработчики мобильного приложения и geo-трекинга превратились в настоящих тестовых пилотов на дорогах Санкт-Петербурга. Такая тщательность в тестировании позволила существенно увеличить лояльность рекламодателей к сервису Jata.
Почему?
Потому что теперь рекламодатели могут быть абсолютно уверенны в том, что отслеживание перемещений водителей на предмет отклонения от заранее утвержденного маршрута всегда доступно в режиме реального времени. Тем самым полностью исключается возможность недобросовестного поведения со стороны водителей.
4. Потрачено более 50 часов на поиск решений для задач по логике приоритетов различных маршрутов и мониторинга передвижения транспортных средств.

Ниже Вы видите один из этапов мозгового штурма тимлида НеКидаем с ведущим разработчиком проекта:

Мозговой штурм тимлида НеКидаем

После того, как решение для задач было найдено, практически вся команда во главе с техническим директором доводила до ума разработанное решение в реальных, "полевых" условиях - на дорогах Санкт-Петербурга.
Для этого за рулём личных автомобилей разработчики НеКидаем провели проверку на предмет корректности получаемых данных, отчетов и отклонений от маршрутов.

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

.

Вы можете видеть на скриншоте выше, что наши тестовые автомобили исколесили вдоль и поперек весь Санкт-Петербург и ближайшие пригороды.

Каждый автомобиль проехал более 2 500 км. по тестовым маршрутам г. Санкт-Петербурга. А суммарный пробег составил более 15 000 км.

5. Более 35 часов мы потратили на подбор команды, которая бы ежедневно трудилась уже непосредственно в штате Jata.

Для этого нами было разослано 62 тестовых задания и проведено 18 собеседований.