О проекте

Foodfox — сервис быстрой доставки еды из локальных ресторанов. Представлен сайтом, приложением для iOS и приложением для Android. Бета-запуск проекта произошел в конце 2015, а в апреле 2016 сервис был запущен официально.

Foodfox решает проблему отсутствия у многих хороших ресторанов собственной доставки. Главные особенности сервиса:

  1. Посетителю предлагается выбор только из ближайших ресторанов (2-2,5 км)
  2. Собственные курьеры
  3. Представлены только лучшие рестораны, разного ценового уровня.

На данный момент проект работает почти по всей Москве, подключено около 600 объектов (данные на март 2017 года).

Сотрудничество

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

Создатели проекта обратились к нам по рекомендации. Работу мы начали осенью 2015 года. Со стороны Foodfox на тот момент были основатели: Максим, Сергей и Илья. А с нашей стороны — три разработчика и менеджер для координации. Количество наших программистов на проекте периодически меняется в зависимости от текущих потребностей заказчика.

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

Пользовательская часть проекта

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

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

  • Название
  • Тип кухни
  • Ценовой уровень
  • Примерное время доставки
  • Расстояние

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

Затем пользователь ждет доставки, получает заказ и наслаждается вкусным блюдом.

Административная часть проекта

Первая ключевая функция админки — это управление ресторанами.

В списке ресторанов выводится основная информация: адрес, категории, среднее время приготовления и режим работы.

У каждого ресторана есть меню. На странице меню редактируются доступные блюда.

Вторая важная функция админки — управление заказами.

На странице списка заказов каждая из строчек показывается соответствующим цветом в зависимости от текущего статуса. Как и в случае со списком ресторанов, можно вести поиск по всем основным параметрам.

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

Помимо описанных страниц, административная часть содержит следующие разделы:

  • промокоды
  • статические страницы
  • курьеры
  • категории ресторанов
  • категории меню
  • карта
  • настройки проекта

На карте показываются все заказы и рестораны.

Рабочий процесс

О том, как на Foodfox устроены рабочие процессы, мы расспросили Олю Иванову — нашего основного программиста на этом проекте в 2016 году.

— Расскажи про команду проекта.

Команда у нас крутая. Из тех, с кем я больше всего сейчас общаюсь, это Роза — менеджер продукта, Илья — технический директор, Андрей — тимлид и Эльдар — тестировщик.

— От кого поступают задачи?

В начале проекта задачи поступали напрямую от основателей проекта, а позже появилась Роза, и теперь все задачи мы обсуждаем с ней.

— В каком формате идет общение?

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

— Как часто вы созваниваетесь по Skype?

Когда разработка проекта только начиналась, требовалось регулярно показывать результат основателям проекта — Максиму и Сергею, поэтому аудиоконференции проходили раз в два-три дня. Во время звонка мы демонстрировали и обсуждали группы реализованных фич, а также бизнес-логику задач, которые еще предстояло сделать. Теперь же звонков практически нет, потому что задачи проверяет тестировщик и менеджер проекта, а большинство задач подробно описаны и не нуждаются в пояснении.

— Каков твой рабочий режим?

У меня нет ярко выраженного рабочего режима. Иногда работаю как обычный человек — часов с одиннадцати до восьми вечера, иногда начинаю только вечером, и пишу код до рассвета. Главное — чтобы задача была выполнена, и чтобы ты в обычное рабочее время был на связи, мог что-то пофиксить быстро, все такое.

— Как выглядит жизненный цикл задач?

Задача назначается на разработчика, разработчик выполняет задачу, деплоит на тестовую площадку. Далее происходит ревью кода и после этого задача тестируется на площадке. Затем, когда все круто, код идет в продакшн.

— Какой сервис используется для работы с задачами?

В начале проекта по инициативе Evercode Lab использовался Trello. После появления Розы для работы с задачами стали использовать таск-трекер Asana. Теперь большую часть работы с таск-трекером выполняет Роза, мне лишь остается читать заголовки и описание задач, выполнять их и передавать в тест, поэтому я пользуюсь только страницей “My Tasks in Foodfox”.

— Используется ли какая-то документация или задачи описываются в карточках?

Задачи описываются в карточках.

— Какие самые интересные/запоминающиеся задачи тебе приходилось делать на проекте?

На этом проекте мне нравится большинство задач. Больше всего запомнилось то, чем я на этом проекте занималась впервые — клиентской разработкой на ангуляре. Запомнилось, потому что освежила в памяти, что такое ничего не понимать, просто смотреть в монитор, потом в окно, потом биться головой об стол, а потом все начинает работать, потому что кэш, опечатка или что-то в этом духе. Все-таки фронтенд не мой конек. 🙂 Но это только плюс проекта: можно выйти из зоны комфорта, изучить новое, а потом вернуться обратно в уютненький бэкенд.

Технические особенности

Проект пишется на Symfony2 и AngularJS.

На бэкенде задействован обычный набор бандлов, выделить можно FOSRestBundle для API и AliceFixturesBundle для фикстур. AliceFixturesBundle произвел очень хорошее впечатление.

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

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

Помимо этого в проекте используются elasticsearch, redis и rabbitMQ. А также огромный пласт работы выполнен для интеграции с ресторанами через разные доступные сервисы.

Команда

От Evercode Lab над проектом работали:

  1. Начало разработки:

    • Сергей Лунев
    • Артем Анашев
    • Оля Иванова
  2. Этап развития продукта:

    • Оля Иванова
    • Михаил Голодяев
    • Сергей Волобуев
    • Дмитрий Константинов

Заключение

На момент публикации кейса мы работаем вместе с Foodfox уже полтора года. Эта компания, за которой мы наблюдаем с самого рождения. И команда проекта раз за разом показывает, что они знают своё дело и действительно строят отличный сервис. Приятно, что в этом есть и наш вклад.

Отзыв заказчика

Мы обратились к Роману и Evercode Lab на самой ранней стадии разработки Foodfox.

Команда Evercode Lab помогла нам с разработкой первой версии API для мобильных приложений, интерфейса администратора и частью фронтенда. Вся команда и Роман в том числе всегда делились своим опытом и видением, давали обратную связь, старались привнести дополнительную ценность в продукт.

Все организационные вопросы решались легко. Если возникали какие-либо проблемы, Evercode Lab делали всё возможное, чтобы разрешить их быстро и безболезненно.

И в итоге, полтора года спустя, мы до сих пор сотрудничаем.