Uber-like сервиc по вывозу мусора от Технологки

Описание проекта

Uber-like сервиc по вывозу мусора

Uber-like сервиc по вывозу мусора
Один из последних самых больших и сложных проектов: амбициозный Uber-like стартап, который осуществляет услуги по вывозу мусора в 16 штатах США. Проект был построен из пяти частей на кросс-платформенных технологиях и с применением микросервисной архитектуры за 9 месяцев.

Uber-like приложения стали популярны в последние годы, в связи с небывалым ростом количества стартапов. Такие приложения называют поколением “Uber for X”. Такое название отсылает к одноименному приложению, которое несколько лет назад стало предоставлять инновационный сервис по заказу такси и поэтому стало очень популярным.

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

Бизнес-логика

Американская компания GoTrashy обратилась к нам в феврале 2018 года с проектом под названием GoTrashy 2.0: нам было необходимо оптимизировать и заменить существующую систему GoTrashy 1.0, которая уже какое-то время работала.

Система напоминает уже известный нам всем сервис Uber, только здесь доставляется мусор грузовиками. Клиент создает заказ с фотографиями мусора, а грузовик приезжает, чтобы его вывезти. Начало проекта было довольно интересным:

  • Мы взаимодействовали с заказчиком, чтобы разработать техническую документацию и дизайн будущей системы, в то время как занимались поддержкой первой версии приложения, которое уже было опубликовано в мобильных сторах и использовалось людьми.
  • Пока мы занимались поддержкой GoTrashy 1.0, нам пришлось осуществить большой объем тестирования и изучения существующего кода от предыдущих разработчиков, которые совсем не оставили технической документации по проекту.

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

Анатомия системы GoTrashy 2.0

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

  1. GoTrashy Client app – приложение для клиентов, которые хотят вывезти мусор. Они размещают заказ, указывая тип мусора, прилагают несколько фотографий, указывают временные рамки вывоза и ждут ответа от водителей грузовиков. Исполнителя можно выбрать на основе цены, которую они запрашивают за заказ и рейтинга водителя.
  2. GoTrashy Hauler app – приложение для водителей грузовиков, в котором видно все доступные заказы в их районе работы. Через него водители отправляют заявки на заказы.
  3. GoTrashy Web Client – веб-сайт для клиентов с таким же функционалом, что и мобильное приложение.
  4. GoTrashy Onboarding Portal – портал для регистрации водителей, желающих работать на компанию GoTrashy. Через портал водители посылают копии своих документов. Также здесь можно запросить разрешение на работу в новом районе, тем самым расширив свою территорию заказов.
  5. GoTrashy Admin Console – портал для администраторов со всеми необходимыми настройками – типы пользователей, работ, мусора, а также другие метрики.

Технологии и подход

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

1. Микросервисная архитектура

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

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

Более того, мы использовали Elasticsearch для индексирования данных, поскольку стек технологий ELK (Elasticsearch, Logstash, Kibana) уже интегрирован в AWS. Это дешевле и быстрее, чем копирование данных в Postgres и дальнейшая сортировка их там. Выбранный стек технологий позволил нам настроить автоматическую миграцию данных из старой системы в AWS.

2. React Native

GoTrashy 1.0 был разработан на чистых платформах iOS и Android, поэтому нам было необходимо решить, будем ли мы продолжать такой подход или перейти к кросс-платформенному фреймворку.

Применение кросс-платформенного фреймворка нам подходило по нескольким причинам:

  • Простой UI;
  • В бизнес-логике можно было выделить общее;
  • Отстутствие ОС-центричных функций, таких как Bluetooth, камера, взаимодействие с картой.

В дополнение кросс-платформенный фреймворк имел преимущества, которые мы могли выгодно использовать для GoTrashy 2.0:

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

Приняв всё это во внимание, мы решили вести разработку GoTrashy 2.0 на React Native. Также мы решили соединить его с Expo framework, который бы позволил нам одномоментно обновлять приложения в сторах по воздуху без непосредственного взаимодействия с каждым с них.

На момент разработки в 2018 году Expo framework был довольно сырым продуктом, поэтому взаимодействие с поддержкой, настройка и тестирование отняли у нас драгоценное время. Однако мы все равно выиграли при его применении, поскольку обновление по воздуху перевешивало все неудобства.

3. Twilio

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

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

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

В процессе работы мы столкнулись с еще одним ограничением Twilio – лимит канала. После того, как работа считалась оконченной, мы не удаляли чаты между клиентом и водителем, чтобы Служба Поддержки GoTrashy могла обратиться к ним в случаях жалоб. Довольно быстро это привело к переполнению лимита. Мы справились с проблемой следующим образом:

  • Простой UI;
  • Стали логгировать сообщения чатов;
  • Стали удалять старые чаты после окончания работ.

4. DevOps

Разрабатывая GoTrashy 2.0, мы придерживались подхода DevOps. А именно:

  1. Контроль версий позволил нам откатываться на предыдущую итерацию, если это было необходимо;
  2. Автокомпиляция приложений позволила нам минимизировать время между написанием кода и поиском багов в нем;
  3. Автоматическая установка проекта в специально разработанной среде, которая позволила бы оттестировать продукт перед запуском;
  4. Автоматический и одномоментный запуск всего проекта посредством Expo framework;
  5. Настройки среды через файлы конфигурации, а не вручную;
  6. Мониторинг приложений для быстрого избавления от ошибок.

Этот проект включил в себя API сервис, три веб-приложения, две версии мобильных приложений. В процесс разработки было включено около 20 человек. Каждые 2 недели был запланированный релиз, таким образом DevOps подход справился с необходимой скоростью разработки и уровнем качества.

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

Важный функционал GoTrashy 2.0:

  • Интерактивная карта для клиентов и водителей. Карта показывает оптимальный маршрут до клиента, когда грузовик выезжает на заказ;
  • Пользователи могут отслеживать текущий статус заказа в режиме реального времени и получать уведомления об изменениях;
  • Система рейтинга для клиентов и водителей;/li>
  • Водитель и клиент могут обсуждать детали работы в отдельном чате;
  • Для того, чтобы общение в чате было комфортным, реализована фильтрация отправляемых сообщений и картинок, которые могут оказаться неприемлемыми для собеседника;
  • Встроенная система платежей позволяет пользователям проводить оплату выполненных услуг, получать компенсации за отмену работы, не выходя из приложения.

Мы зарелизили систему в августе 2018 года в AppStore и Google Play. Работа над приложением продолжалась вплоть до ноября 2018, поскольку компания решила внести ряд изменений после анализа поведения клиентов.

Результаты

На настоящий момент GoTrashy 2.0 находится в стадии поддержки. Мы помогаем клиенту с любым вопросом : большими и маленькими изменениями, новой функциональностью или доработками. Мы разработали большую Uber-like экосистему в довольно короткий срок, приступая к разработке которой мы крайне мало знали о первой версии проекта.

GoTrashy – удивительный пример стартапа, который не остановился в развитии после запуска. Компания проанализировала ошибки, допущенные в первом релизе, чтобы не допустить их повторения. Мы очень рады, что нам удалось поработать с таким проектом!

Хотите обсудить проект?

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