Разработка
Как создать приложение с механикой Uber?
Советы от эксперта по развитию стартапов и growth hacking Минира Шаха по созданию жизнеспособного и масштабируемого MVP, который позволит вам проверить свою идею с минимумом затрат.
Советы от эксперта по развитию стартапов и growth hacking Минира Шаха по созданию жизнеспособного и масштабируемого MVP, который позволит вам проверить свою идею с минимумом затрат.
Хотите создать приложение вроде Uber? Если да, то я могу посоветовать вам подумать ещё раз, потому что уже существует более 2,000 подобных приложений.
Знаете ли вы, что в 2015 Роб Сэдоу увидел огромную проблему в индустрии перевозок:
- 85% работающих людей самостоятельно ездили на работу на автомобиле каждый день.
- При этом они выбрасывали 6.2 тонн углекислого газа.
Роб хотел заполнить этот пробел и запустил свое приложение. Спустя четыре месяца после запуска у него было более 20 тысяч поездок через приложение и он получил 5.2 миллиона долларов в качестве инвестиций.
Многие люди до сих пор не слышали о приложении Scoop, но, очевидно, существуют похожие проблемы, которые «приложения по требованию» могут решить. К сожалению, многие предприниматели не знают, как создавать такие приложения и игнорируют их преимущества.
Что вы узнаете из этой статьи:
- Функции и технологии, необходимые для создания MVP.
- Как реализовать эти функции.
- Создание идеального бэкенда для вашего приложения.
- Выбор маркетинговой стратегии для вашего MVP.
Приложение, похожее на Uber, в самой основе должно позволять пользователям заказывать поездки и совершать безналичные платежи. Вся система должна предоставлять взаимодействия в реальном времени между сервером и приложением и обрабатывать платежи автоматически после завершения поездки.
Кроме этого, у экономически жизнеспособного продукта должен быть возврат средств и оценка водителей.
Давайте взглянем на важные для MVP функции и их создание:
- Первая функция — отслеживание в реальном времени и оповещения. Ее создание требует оптимизации кода для повышения сетевой производительности, программирование сокетов и связь с различными API Google-карт.
- Приложение должно позволять пользователям регистрироваться со смартфона. Детали аккаунта пользователя должны храниться в отдельной базе данных с правильными настройками безопасности.
- Чтобы вызвать такси, приложение использует Google-карты, чтобы позволить пользователю выбрать место на карте. Когда пользователь подтверждает запрос, оповещение отправляется к ближайшему водителю. Расстояние и ожидаемое время прибытия можно легко получить при помощи Google Map API.
- При бронировании поездки нужно отправить пуш-уведомление. Серверный компонент можно создать самим или использовать сторонних поставщиков. Для MVP приложения мы предпочитаем SNS Amazon, так как он легковесный недорого стоит.
- Отправка уведомлений также требует SSL-соединения, которое может стать самой сложной частью.
- Braintree предоставляет SDK для проведения платежей в приложении. Интеграция этих SDK позволит вам автоматически совершать платежи, выставлять счет и делать возвраты.
Чтобы выставлять счет за поездку, приложение может использовать отслеживание движения.
Вкратце: ваш первый MVP-продукт должен позволять пользователям запрашивать сервис (поездку), отправлять пуш-уведомления, обрабатывать платежи в реальном времени и использовать API Google-карт для определения локаций. Это все нужно делать на масштабируемом и надежном бэкенде.
Конечно, это был только краткий обзор, на создание приложения потребуется много усилий. Вам нужны будут разработчики со следующими навыками:
- Приложения: Objective-C, Java, Swift
- Бэкенд-сервисы: Node.js и PHP
- Базы данных: MongoDB и MySQL
Предположим, что вы создали приложение при помощи лучших технологий, и оно такое хорошее, что оказывается на верхних позициях в алгоритмах рекомендаций. Но потом вы можете понять, что вам нужно совершить пивот для выживания. Но у вас уже нет бюджета и вы не можете совершить изменения, чтобы занять свою нишу на рынке.
Поэтому вам не нужна точно такая же технология, как у Uber, чтобы протестировать сервис и приобрести пользователей. Вам нужен продукт с минимумом функций, чтобы понять, движетесь ли вы в верном направлении, а затем уже развиваться. В начале существования у Uber не было такой отлаженной архитектуры — они создавали её по мере роста.
Какой стек технологий подходит для MVP?
Простое приложение, созданное на основе следующих технологий, будет способно справляться с тысячами пользователей и позволит масштабировать структуру:
- Высокопроизводительные нативные приложения для пользователей на языках вроде Objective-C, Java и Swift.
- Хорошо оптимизированный стек веб-сервисов на PHP и/или node.js.
- Хорошая база данных на MySQL + MongoDB будет способна легко справляться с нагрузками
В 2011 Twitter полагался на простой стек MySQL, чтобы обрабатывать 250 миллионов твитов. В этом случае MySQL и MongoDB смогут справиться с любым неожиданным ростом.
Но разработка приложения полна рисков…
Поэтому мы стремимся к созданию MVP и правильным методологиям управления. Вот что вы должны сделать для грамотного планирования и реализации планов по разработке:
- Разделите проекты и задачи по приоритетности.
- Убедитесь, что задачи правильно распределены дизайнерам, разработчикам и менеджерам проекта.
- Создайте дедлайн по каждой задаче.
- Создайте список из пяти приоритетов для каждого сотрудника.
- Будьте в курсе прогресса проекта, проблем и итераций.
- Поговорите с командой разработчиков и будьте активной частью их процесса.
Создание идеального бэкенда для приложения
Мы создали сотни приложений, некоторые из которых получили миллионы пользователей за месяц. Команды, которые работали с нами, часто паниковали, а мы проводили ночи, исправляя архитектуру, которая должна была справляться с огромным количеством пользователей.
Это было в 2011, стартапы редко думали о масштабируемости бэкенда и функций на фазе MVP. В то время даже Uber не мог справиться с ростом количества пользователей.
Но затем вышел Node.js…
Отслеживания локации
Чтобы создать такую функцию, вам нужно сосредоточиться на получении и оптимизации данных.
- Знаете ли вы, что приложение Uber соединяется с сервером каждые четыре секунды для предоставления информации в реальном времени? В зависимости от того, насколько точно вы хотите отследить локацию автомобиля, вы можете изменять частоту соединения.
- Приложению нужно постоянно сообщать примерное время прибытия, GPS-положение, вычислять самую короткую дистанцию и другую требуемую информацию. Для этого приложение использует следующие API: API направлений Google-карт, API матрицы расстояний, геофенсинг, API Google Place и API геокодирования Google-карт.
- Самая важная часть создания опыта в режиме реального времени: полудуплексный сокет, который может переносить информацию между серверами и приложениями. Эти протоколы так важны, потому что они помогают сократить расходы на связь. В отсутствие сокетов порт должен открываться и закрываться при получении запроса. В отличие от HTTP-протоколов, сокет, связанный с сервером, всегда оставляет порт открытым, чтобы облегчить обмен информацией.
- Учитывая всё это, вашим веб-сервером должен быть Nginx. Другой популярный сервер Apache не очень хорошо подходит для обмена информацией в режиме реального времени.
Обработка платежей
Braintree — хороший инструмент для проведения платежей в таком приложении, и дальше я покажу вам, почему:
- Если сумма ваших транзакций составляет меньше 50 тысяч долларов, Braintree не будет брать с вас плату.
- Braintree обрабатывает автоплатежи, возвраты, а также платежи, повторяющиеся раз в месяц/неделю/две недели. Если вы хотите добавить функцию разделения счета, Braintree позволит вам внедрить эту функциональность.
- “Но я хочу создать собственный платежный шлюз…” Убейте эту мысль сразу же. Для стартапа невозможно создать собственную платежную систему: это требует больших затрат и работы со сложными технологиями. Мы рекомендуем использовать уже существующую систему.
- “Но что насчет безопасности данных?” Многие платежные шлюзы совместимы с PCI. При регистрации аккаунта в системе вас попросят заполнить PCI SAQ A-EP форму. Это ваша проверка безопасности данных и согласие на их обработку.
Вы должны обязательно убедиться, что выполняете свою часть проверки безопасности данных. Когда в вашем приложении будет 20 тысяч транзакций, за вами будет наблюдать VISA. Поэтому убедитесь, что разработчики не просто интегрировали API платежной системы, а встроили в приложение SDK. В обратном случае информация может быть недостаточно защищена.
Вам нужно:
- Убедиться в использовании SSL-шифрования
- Никогда не хранить информацию о кредитных картах локально
- При возможности использовать Braintree iFrames
Бронирование поездок
Механизм бронирования поездок может работать двумя способами:
- Когда пользователь заказывает поездку, запрос идет к ближайшему водителю с самым высоким рейтингом. Он получает уведомление и может ответить на него или проигнорировать запрос. В случае отказа запрос идет к следующему ближайшему водителю.
- Когда пользователь заказывает поездку, запрос отправится ко всем доступным водителям. Поездку получит первый ответивший на уведомление водитель.
Создание бэкенд-сервисов при помощи PHP и Javascript
Идеально — не всегда правильно. Вы можете создать целый стек на node.js, но это выльется в дополнительные затраты, которые могут стать огромными для стартапа. Идеальным решением для такого приложения станет создание веб-сервисов на основе PHP и Javascript.
Полный бэкенд на Node.js потребует использование двух-трех серверов MongoDB. Создав некоторые из серверов на PHP, вы сократите затраты за счет использования MySQL.
Таким образом, два-три сервера MongoDB и применение MySQL и PHP/Node.js создадут идеальный бэкенд для вашего приложения.
Node.js очень важен для создания приложений, которые будут работать в реальном времени:
- Для управления функциями в режиме реального времени он отправляет асинхронную задачу в цикл событий с функцией вызова, а затем выполняет остаток программы.
- Работа ускоряется за счет использования realtime-вебсокета, работающим с TCP.
Затем, для создания веб-приложения и REST API, вам нужно будет создать два отдельных приложения на Laravel. Так вы сможете без проблем создавать будущие обновления без необходимости изменять веб-приложение.
Создание масштабируемой архитектуры
Uber начинали с простого стека LAMP (Linux, Apache, MySQL и PHP). Но этот стек привел к проблемам с производительностью и множественной диспетчеризацией. Им пришлось быстро создавать что-то новое, чтобы не возникло проблем с масштабированием. И вот здесь нам и нужен будет Node.js.
Простая масштабируемая архитектура будет выглядеть примерно так:
Понять её очень просто. Мы отделили друг от друга три компонента: сервисы для хранения и управления данными о локации, real-time-логику и бизнес-логику.
Бизнес-логика — это всё, что связано с платежами, выставлением счетов, отправкой СМС. Этот сервер также управляет сторонними SDK и API. Real-time-логика — это всё, что связано с данными режима реального времени, отслеживанием и оповещениями.
90% входящих данных в таких приложениях — это информация, связанная с локацией. Такие данные должны храниться на серверах MongoDB, чтобы веб-сервисы имели доступ к этой информации только по необходимости.
Такая архитектура также предупреждает полное падение системы. Представьте, что ваша сторонняя система платежей не работает. Ваша система будет постоянно вызывать цикл, чтобы получить ответ. Поездка уже будет закончена, но водитель не сможет получить информацию о платеже или взять другой заказ. С разделением логики обе системы будут работать независимо. И падение одной из них не вызовет падения всей системы.
На данный момент наше приложение имеет необходимые функции, оптимизировано для производительности и масштабирования. Теперь ваш будущий рост зависит от пользователей, которых вы привлечете, и от установленных KPI. Вы вряд ли увидите, что пользователи делают внутри приложения. Как тогда это можно понять? Как убедиться, что вы привлекаете нужных пользователей? Как вы узнаете, что пользователь удалил приложение?
Инструменты для маркетинга приложения
Чтобы понять поведение пользователя, сначала вам нужно…
Сегментировать пользователей и установить KPI
Деление пользователей на сегменты позволит вам лучше понять их поведение. Например, вы можете наблюдать рост количества поездок в два раза, но этот рост будет происходить за счет двух из четырех пользовательских групп. С этой задачей вам может помочь Upsight SDK.
Upsight позволит вам создать сегменты пользователей, понять их черты и понять, как разные факторы влияют на ключевые KPI. Такими показателями могут быть среднее количество пользователей в день или месяц, средняя выручка с пользователя, общее количество поездок на сегмент/пользователя.
Сообщения об ошибках
Для этого можно использовать Crashlytics. Каждый раз при возникновении ошибки вы увидите отчет с детальной аналитикой. Как показали наши недавние исследования, Crashlytics использовался в 90% самых популярных приложений.
Поддержка пользователей в приложении
Магазины приложений часто создают разрыв между пользователями и разработчиками. Встраивание поддержки с помощью ZenDesk поможет сократить этот пробел. Его преимущества:
- ZenDesk автоматически собирает информацию об устройстве, которая в другом случае потребует обмена сообщениями с недовольным пользователем.
- У ZenDesk также существует приложение для команд поддержки пользователей.
Единственным недостатком в ZenDesk может стать присутствие заявок в службу поддержки. Поэтому некоторые предпочитают Intercom, но это абсолютно субъективно.
Growth hacking — получение отзывов и оценок
Просить пользователя оставить отзыв или оценку очень важно. Мы часто видим попытки привлечь пользователя после завершения некоторого количества событий. Это часто раздражает пользователя, а сердитый пользователь оставляет отзыв чаще довольного.
Чтобы получить хороший отзыв, используйте Apptentive. Инструмент использует алгоритм для определения настроения пользователей и предлагает им оставить отзыв в правильный момент, чтобы получить хорошие оценки.
Сократить число удалений приложения
Uninstall.io — инструмент аналитики, который позволяет разработчикам понимать важные сигналы, которые приводят к большому количеству удалений приложения. Uninstall.io:
- Идентифицирует проблемы, с которыми сталкиваются пользователи в приложении, или раздражающие функции или взаимодействия, которые приводят к удалению приложения.
- Идентифицирует рекламные кампании, которые дорого обходятся, но не привлекают пользователей.
- Находит пользователей, удаливших приложение, и выбирает канал для ретаргетинга таких пользователей.
A/B тестирование
Что делать, если вы не можете выбрать одну из двух функций и хотите протестировать их максимально быстро, не разозлив своих пользователей? При помощи Optimizely SDK вы можете разделить своих пользователей на две части, каждая из которых получит свою функцию. Вы можете собирать информацию о том, какая функция работает лучше, а какая не работает, и использовать эти знания для создания стратегии развития продукта.
Добавление элемента виральности
Вспомните, как вы в первый раз получили сообщение от знакомого о бесплатной первой поездке на Uber.
Чтобы влиять на решения, основанные на доверии, мы советуем использовать Appvirality для реферального маркетинга. Панель аналитики Appvirality предоставляет основанный на данных подход для направленного маркетинга при помощи инвайтов, кликов, установок и доходов, приходящихся на конкретный канал.
Последовательный маркетинг
«Капельные» кампании — важная часть создания рынка поездок по требованию, который должен расти и приобретать новых пользователей. Специальные инструменты позволяют легко настраивать email-кампании. В зависимости от целевой аудитории, вы можете отправлять письма для повторного вовлечения, сообщать об обновлениях и делиться историями клиентов, чтобы мотивировать получателей письма.