Как перестать ждать бэкенд и начать жить.

Всем привет! За годы в Android-разработке я заметил одно: где бы ни работал — фронт и бэк всегда живут по своим законам. Каждый уверен, что делает всё правильно, но на стыке этих миров рождается хаос.      Я решил системно разобрать, как устроено взаимодействие между фронтом и бэком в реальных командах — от огромных проектов с централизованным бэком до компактных фичевых групп. А в конце покажу, как подход BFF помогает навести порядок и вернуть скорость, не теряя качество.      1. Крупные проекты с централизованным бэком   Плюсы

  • стабильность и предсказуемость API-контрактов;
  • высокая экспертиза у команд, которые отвечают за свои сервисы;
  • единые стандарты и контроль качества.      Минусы
  • долгое согласование и утверждение контрактов;
  • длительная разработка, ведь бэк часто обслуживает несколько команд и задачи выстраиваются по приоритету;
  • медленные интеграционные тесты между сервисами, особенно перед релизом;
  • при любом продуктовом изменении приходится повторять те же шаги заново.      2. Небольшие проекты или фичевые команды (фронт и бэк в связке)   Плюсы
  • быстрая проработка API и решений;
  • короткий цикл согласований и реализаций;
  • гибкость при внесении изменений.      Минусы
  • высокая изменчивость API (ловушка “потом решим”);
  • на каждую фичу нужен выделенный бэкенд-ресурс;
  • низкая погружённость фичевых бэкендеров в общую экосистему;
  • зависимость от других сервисов всё равно никуда не исчезает.      3. Почему нет “серебряной пули”      Как ни крути, идеального подхода нет. Централизованный бэк даёт стабильность, но замедляет развитие. Фичевые команды двигаются быстро, но страдают от хаоса и дублирования решений.      Поиск баланса — это как борьба с ветряными мельницами.   Но есть архитектурный подход, который может помочь — BFF (Backend for Frontend).      4. Backend for Frontend      BFF — это промежуточный слой между клиентом и основным бэкендом.   Для каждого типа клиента (мобильное приложение, веб, смарт-ТВ и т. д.) создаётся свой backend-слой, адаптированный под нужды этого клиента.      Что делает BFF:
  • агрегирует данные из разных сервисов;
  • форматирует и упрощает ответы;
  • скрывает лишнюю бизнес-логику;
  • сокращает количество запросов на клиенте.      5. Важные ограничения и договорённости      Чтобы BFF не превратился в “мини-бэкенд”, стоит ограничить его зону ответственности:
  • без состояния, без базы данных, кешей и сложных зависимостей;
  • только получение данных, маппинг и отдача клиенту;
  • разработка — на Kotlin для Android - это в большинстве нативный язык, для iOS - он похож на Swift.      6. Что это даёт      Плюсы:
  • фронт-команда сама определяет свои API-контракты и меньше зависит от централизованного бэка;
  • можно распределять нагрузку: если iOS ушли вперёд по фичам — они могут подготовить BFF, а Android догонит;
  • разработчики прокачивают новые навыки, лучше понимают логику бэка и структуру данных.
  • бэк делает только свои сервисы и не готовит ответы для фронта, какие-то api аггрегаторы и не брейнштормит за нейминг поля в ответе
  • бэк может абстрагироваться от проблем парсинга фронта, т.к  фронт сам себе будет генерить тот формат, который ему нужен.      Минусы:
  • фронтам нужно базово обучиться микросервисной разработке;
  • требуется понимание интеграций с другими сервисами;
  • без опыта сложно сразу разобраться с инфраструктурой (балансировка, rate-лимиты, логирование);
  • важно не размывать ответственность — мобильные разработчики не должны превращаться в полноценных бэкендеров.   Оптимально — 80% мобильная разработка, 20% работа с BFF.      7. Вывод      BFF — не серебряная пуля, но это инструмент, который помогает сделать команды мобильной разработки автономнее и ускорить доставку фич пользователю.   Главное — помнить, что цель не заменить бэк, а снизить трение между фронтом и бэком, сохранив при этом техническую дисциплину.