Стоит ли делать мобильное приложение

Часто заказывают мобильные приложения, даже не проверив, что этот бизнес-процесс нужен будущим клиентам. Как результат — работал в мусорку.

А так как я занимаюсь именно заказной разработкой мобильных приложений, в портфолио остаются лишь картинки.

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

И вот вы проверили на 10-20 заявках, получили прибыль и бежите сломя голову тратить 300 - 500 тысяч рублей, чтобы проверенную модель реализовать уже в мобильном приложении, ведь 2-3 продажи, это доказательство, все 100% гарантия же.

Я бы не делал на 2-3 продажах какие-то выводы, это крайне мало, вдруг их всего возможно только 5 в месяц.

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

Разберем на примере

Разберем на часто встречаемой задаче: раздаче заявок курьерам. Тут есть 2-е подзадачи: проводить анкетирование и прием на работу и рассылка заданий прошедшим прием на работу.

Итак с рекламы пользователь переходит в сообщения сообществу по работе курьером и рассказывает что за работа, какие условия, как все будет происходить, что возить и прочее. Бот предлагает написать «Да», если пользователя все устраивает и заполнить небольшую анкету. Отлично у нас есть новая заявка приема на работу, уведомим администратора, так же сообщением из группы. Администратор просматривает профиль и анкету нового сотрудника и пропускает или утверждает его командой «утвердить и id пользователя». После этого бот уведомит новоиспеченного курьера что он принят на работу и скоро появятся новые заявки.

Администратор постит новые задания командой боту «задание и далее его текст» и все прошедшие утверждение получают его. Дальше само собой можно и нужно додумывать логику приемки в работу этого задания…

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

В роли серверной части я использую Firebase (облачный PaaS сервис от Google, который берет деньги по факту потребления услуги).

Мы будем использовать Cloud Functions для ответа серверу ВК, что же ответить пользователя и Realtime Database для хранения данных.

Считаем затраты

За Realtime Database с нас берут за скачиваемый трафик за каждый гигабайт 1$ и 5$ за хранение каждых 5Гб в базе данных. За Cloud Functions 0,4$ за 1 миллион вызовов функции.

Ну и давайте прикинем сколько 1 000 пользователей нам даст в затратах. Допустим анкету на 1000 символов он оставит и будет 300 (10 в день) команд в месяц писать. Администратор будет раздавать 100 заданий в день (3000 команд в месяц).

Итого на 1000 пользователей:

  • 1 Мб в хранилище, а у нас 1$ за 1 Гб
  • трафик вообще будет смешным, т.к. это максимум статусы текущего состояния пользователя, учитывать не стоит
  • 303 000 вызовов функции, при этом оплата 0,4$ за миллион

Следовательно заплатили бы вы меньше 1$, но Firebase предоставляет еще и бесплатный лимит на месяц, за который платить не нужно:

  • Cloud Functions 2 млн. вызовов в месяц бесплатно
  • Realtime Database 1 Гб хранилища и 10 Гб трафика бесплатно

Именно поэтому на мой взгляд Firebase идеален для стартапов, он берет деньги исключительно за потребление ресурсов, вы всегда можете вывести сумму, которую тратите на каждого пользователя и учитывать это в вашей Unit-экономике.

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

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

// событие входящего сообщения // message - ключ-значение входящего сообщения // session - ключ-значение хранилища пользователя // по результату необходимо вернуть объект // actionMessage - ответное сообщение пользователю // newSession - новые ключ-значения хранилища пользователя // userAction - событие для другого пользователя // user_id - id пользователя события // userAction - сообщение пользователю события // newSession - ключ-значение хранилища пользователя события // job - сообщение активным пользователям onAction(message: { [key: string]: any }, session: { [key: string]: any }): Promise<Core.ActionPromise> { const messageText = message.text; const messageTextUpperCase = message.text.toUpperCase(); const user_id = message.from_id; const isAdmin = (user_id === ChatBotComponent.adminID); const commands = messageText.toUpperCase().split(' '); const command = commands[0].toUpperCase(); const param = commands[1] && commands[1].toUpperCase(); return new Promise((resolve, reject) => { if (isAdmin && command === 'УТВЕРДИТЬ') { const actionMessage = `Сотрудник утвержден.`; const userAction: Core.UserAction = { user_id: param, actionMessage: `Вы приняты на работу, ожидайте новых заданий.`, newSession: { state: 4, active: true } }; resolve({ actionMessage, userAction }); } else if (isAdmin && command === 'ЗАДАНИЕ') { const actionMessage = `Задание отправлено.`; const job = param; resolve({ actionMessage, job }); } else if (!session.state) { // Стартовое сообщение от бота if (messageTextUpperCase === 'ДА') { // После команды Да ждем анкету сотрудника const actionMessage = `✏ Опишите ваш опыт работы курьером.`; const newSession = { state: 2 }; resolve({ actionMessage, newSession }); } else { // Приветствие нового сотрудника const actionMessage = `Добрый день.\nМы набираем исполнителей на работу курьером. Если вы хотите работать у нас, напишите "да" и мы предложим вам заполнить анкету.`; resolve({ actionMessage }); } } else if (session.state === 2) { // Принимаем анкету и уведомляем админа const actionMessage = `Ваша анкета принята, ожидайте результата.`; const newSession = { anketa: messageText, state: 3 }; const userAction: Core.UserAction = { user_id: ChatBotComponent.adminID, actionMessage: `✉ Новая анкета: ${messageText}\nДля приема на работу отправьте утвердить ${user_id}` }; resolve({ actionMessage, newSession, userAction }); } else if (session.state === 3) { // Анкета принята, ждите const actionMessage = `Ваша анкета уже была принята, ожидайте результата.`; resolve({ actionMessage }); } else if (session.state === 4) { // Ожидание новый заданий const actionMessage = `⏳ Новых заданий пока для вас нет.`; resolve({ actionMessage }); } }); }

Самое главное на мой взгляд это ряд преимуществ:

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

Исходники описанного сценария в статье прилагаю.

Тестируйте, запускайте, успехов Вам!

1515
31 комментарий

Пойду посмотрю на сварку, чтоб глаза не так болели после просмотра кода.

35
Ответить

Ладно на хабре, но стартаперы то должны знать что говнокод - это последняя проблема (если вообще проблема 🙄).

2
Ответить

такого уровня код долны учить писать в школах :(

Ответить

Все эти тарифы за потребление ресурсов могут влететь в копеечку. Будет у вас ошибка в коде или курьеры начнут раз в секунду обновлять данные и получите в конце месяца счет на $$$$. Проще сначала свой сервер за фиксированные $5 в месяц поднять на VPS

9
Ответить

Проще сначала свой сервер за фиксированные $5

В том и дело, что не проще, особенно если ты лишь мобильный разработчик. Ну а если дойдет до того, что приложение будет расти и пользоваться спросом, то как минимум нужна дополнительная пара рук, чтобы пилить бэкенд, заниматься бд и админить этот самый сервак. Даже если найти человека который будет заниматься всем этим за 1500$ в месяц, использовать готовый baas по типу firebase, думаю, выйдет если не дешевле, то не сильно дороже. Firebase не очень выгоден только когда речь о реально больших количествах данных, хотя есть много сервисов с миллионной аудиторией, которые будучи стартапами запускались на firebase, но так и не слезли с него, потому что выгода от своих серваков не столь значительна.

Ответить

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

2
Ответить

Есть книга "Спроси маму" - про то, как проводить customer development интервью.  

Можно как угодно прототипировать, замерять интерес, хоть экраны нарисованные показывать и собирать заявки на "попробовать приложение",

Firebase, авторизация - это все сильно позже.

1
Ответить