Стартап - дело тонкое, никогда нельзя быть точно уверенным, что он взлетит. Поэтому у бизнеса возникает потребность быстро и с меньшими усилиями выпустить минимальную жизнеспособную версию продукта (MVP).
Но сколько времени нужно на MVP? Месяц, два, три? Год? Всё зависит от проекта, но, в нашем понимании, на MVP должно уходить не больше 3 месяцев. Но что, если можно разработать MVP за 1.5 недели? Расскажем на примере нашего нового сервиса Outlytics, как быстро релизить стартапы.
Правильная подготовка
Любой более-менее значимый IT проект начинается с этапа аналитики бизнес и технических требований: как их лучше связать друг с другом, какие фичи поставить в приоритет и т.д.
Разработка стартапов - отдельный вид искусства со своими законами и нюансами. Сейчас мы расскажем про подход в программировании, который поможет очень сильно срезать временные затраты.
Дизайн
Грамотно выстроенные процессы взаимодействия команды разработки и дизайна - большая часть успеха проекта. Дизайн должен быть не только красивым и удобным, но также реализуемым в рамках бюджета и срока проекта.
Мы изначально понимали - front-end будет использовать библиотеку готовых компонентов. Наш любимый вариант - Material UI. Дизайнеру необходимо было понимать, какие есть компоненты, как они кастомизируются, взаимодействуют друг с другом и т.д.
Благодаря такому подходу мы смогли за неделю реализовать front-end под ключ: вёрстка, серверная логика, интеграции.
BaaS
BaaS (Back-end as a Service) - это облачный сервис, который предоставляет всю серверную "магию": управление базами данных, аутентификация пользователей, уведомления (пуш, email, sms) и т.д. Нам остаётся только разработать дизайн и написать front-end с клиентской логикой.
Какой BaaS выбрать?
На рынке много решений. Самое популярное в мире - Firebase. Мы в компании любим open source и self-hosted решения, поэтому наш выбор пал на Appwrite. У него хорошая документация, много SDK под разные языки программирования, приятный интерфейс и крутая NoSQL надстройка над MariaDB.
Задачи BaaS в Outlytics:
- Работа с пользователями: регистрация, аутентификация, сохранение данных
- Управление базой данных: запросы на регистрацию, подписки на сервис, формы обратной связи
- Хранение документов вроде политики конфиденциальности
Hasura
Данные по аутстафф рынку России мы решили хранить в отдельной базе данных, чтобы разграничить слой back-end'a приложения и парсеров. Конкретная СУБД, которую мы выбрали - PostgreSQL.
Обращаться к базе данных с фронтенда - плохая идея. Нам нужен был дополнительный интерфейс для взаимодействия. Продолжая философию BaaS или Backendless программирования, мы выбрали Hasura для автоматического создания GraphQL API.
Потребовалось немного больше работы, чем просто задеплоить сервис. Нам нужны были агрегированные данные, которые можно было бы получить только с помощью достаточно сложных кастомных нативный SQL запросов.
Но и здесь мы не стали отходить от принципов MVP, "не пошли в лоб", часами продумывая и тестируя запросы к СУБД, а визуально накидали необходимые манипуляции с датасетом в Metabase и просто скопировали исходный код :D
Единственное, что нам нужно было изменить - это добавить работы с переменными Hasura для возможности фильтрации.
Codeless
Заходя дальше в дебри оптимальных решений, мы перешли от Backendless к Codeless подходу - разработке приложений под ключ вообще без использования кода.
Для админ-панели мы использовали Budibase, у которого в частности есть интеграция с Appwrite. Примерно час конфигурации, перетаскивания блоков, тестирования, и наша полноценная админка готова.
Прочее
Конечно, на проекте есть логирование и баг-трекинг. Его мы реализовали при помощи sentry-like Glitchtip, который полностью совместим с Sentry.
Техническую поддержку клиентов мы реализовали через Chatwoot.
Итог
За 1.5 недели мы смогли:
- Разработать дизайн
- Подготовить бэкенд
- С нуля создать клиентское приложение
- Написать парсеры
- Сверстать админку
- Задеплоить вспомогательные сервисы
Резюмируя
Как быстро разработать MVP?
- Проведите хорошую аналитику, поймите что вам нужно реализовать, как это сделать и какие задачи в приоритете
- Наладьте работу между командами разработки
- Используйте готовы технические решения. Не пишите код с нуля там, где этого можно не делать