eBay Motors: Ускорение с Flutter

eBay Motors: Ускорение с Flutter

В декабре 2018 года команде eBay было предложено разработать новый опыт Android и iOS для покупки и продажи автомобилей на eBay. Им была предоставлена автономия для исследования, проектирования и создания приложения eBay Motors, как они считали нужным. Однако им нужно было перейти от концепции к обоим магазинам приложений менее чем за год, и он должен был включать набор функций, которые ожидали существующие пользователи eBay. Они были взволнованы и немного напуганы этой возможностью, и они хотели превзойти ожидания.

Их команда создавала нативные приложения вместе в течение многих лет. Они знали, на что способны, и знали также, что это будет грандиозное начинание. Создание двух отдельных приложений с небольшой командой было бы почти невозможно, если бы они придерживались традиционной нативной разработки.

В прошлом они исследовали кросс-платформенные SDK и не были впечатлены. К счастью, всего за несколько недель до того, как их команда получила свое задание, был выпущен Flutter 1.0, и он подошел к кросс-платформенной проблеме многообещающим новым способом. Команда eBay следила за развитием и предварительными выпусками Flutter, и они были хорошо осведомлены об энтузиазме, который рос вокруг этой технологии. Первый стабильный релиз, а также звуковая дорожная карта Google предположили, что Flutter вполне может быть решением для их команды, чтобы обеспечить хорошую работу на обеих платформах в соответствии установленными сроками. На первый взгляд, Flutter, безусловно, подходил к разработке пользовательского интерфейса таким образом, чтобы решить многие из их проблем.

Тем не менее, они знали, что идти ва-банк на незнакомой технологии было рискованным предложением. К счастью, их менеджеру по продукту Ричарду Сайпу и дизайнеру Тай Дангу требовалось время, чтобы разработать видение продукта,поэтому у них было немного свободы действий, чтобы правильно оценить, подходит ли Flutter. Они запланировали групповые семинары, чтобы узнать о Flutter и Dart. Они подошли к этому со  скептицизмом и сделали шаг назад, чтобы определить области, где Flutter не смог удовлетворить их потребности. К их радости, технология выдержала все испытания. Вскоре даже самые скептически настроенные инженеры пришли в восторг.

Они обнаружили, что Flutter позволяет им решать интересные задачи быстрее, чем они ожидали. Опыт разработки был гораздо более приятным, и они могли быстро создать пользовательский интерфейс, который был очень согласован между iOS и Android. Их команда хотела сделать продукт высокого качества, и они знали, что автоматизированное тестирование было неотъемлемым требованием. К их удивлению, тестовая история Flutter была одной из лучших, которые они видели. После нескольких недель работы с Flutter они были уверены, что это их лучший шанс достичь своих целей вовремя.

Сделаем перемотку на девятнадцать месяцев, когда их команда могла уложиться в любой срок. Их первая бета-версия была в руках их генерального директора в течение трех месяцев после получения первых требований к продукту, а через несколько месяцев они выпустили свое приложение для общественности. Они рады быть командой, которая позиционирует eBay среди первых корпоративных компаний, использующих Flutter в производственном приложении. Их опыт продемонстрировал, как Flutter обеспечивает скорость и гибкость, даже при всех накладных расходах, присущих корпоративному продукту. Тем не менее, это было нелегко. Их команда упорно трудилась и посвятила себя достижению успеха. Попутно они обнаружили неожиданные преимущества, которые продолжают приносить дивиденды, поскольку они добавили новые функции в приложение eBay Motors. Давайте перейдем к некоторым деталям.

Нельзя просто так взять и ускорить

Первая задача состояла в том, чтобы масштабировать и взять к себе в состав остальную часть их команды. Они знали, что должны начать работать, как только их требования к продукту начнут расти. Ни у кого не было опыта работы с Dart и Flutter. Все потратили время на изучение нового стека и прошли отличный вводный курс в AppBrewery.

Более трудное, но более ценное обучение было выработкой их коллективного рабочего соглашения. Они должны были собрать две команды из разных слоев общества с разными подходами к решению проблем и объединить их в одно сплоченное подразделение. Это был трудный процесс, который заставил их отказаться от многих своих прежних убеждений о разработке приложений и заставил их пересмотреть то, что они действительно ценили в создании качественного программного обеспечения. Они вели ожесточенные дискуссии о шаблонах проектирования и архитектуре, автоматизированном тестировании и защитных ограждениях, которые были необходимы им для быстрого продвижения и инноваций, не запирая их в решениях о внедрении слишком рано. Они не могут переоценить, насколько ценным был этот предварительный процесс. Это позволило им действительно начать создавать это приложение как одна команда и дало им последовательное право голоса в работе с продуктом.

Когда они начали создавать свое приложение всерьез, они были поражены количеством совместного использования кода Flutter, которое позволило им достичь. Сегодня их хранилище состоит из:

  • 98,3% код Dart (~220k линий Dart)
  • 1.1% Скрипты, CI, различные инструменты автоматизации для жизненного цикла разработки
  • 6% делятся на Kotlin, Java, Swift и Objective-C

Этот уровень кросс-платформенного совместного использования кода намного превзошел их ожидания. Реальность такова, что они редко тратят время на размышления или работу над интеграцией конкретной платформы, а вместо этого могут сосредоточиться почти исключительно на создании функций продукта. Они обнаружили, что интеграция с API-интерфейсами устройств для использования камеры, видеозахвата, машинного обучения, геолокации, безопасного хранения и других возможностей устройств является тривиальной. Экосистема Flutter предоставляет отличные плагины для этих сервисов. В редких случаях они писали свои собственные плагины для инкапсуляции собственных сторонних SDK. К этим задачам подходили неуверенно, но все они были выполнены за несколько часов.

Имея возможность проводить большую часть нашего времени полностью погруженными в Flutter, они осознали цель кросс-платформенной разработки: все было на самом то и деле “написано за раз”. Все в пользовательском интерфейсе от макета, навигации, анимации и локализации было общим. Вся бизнес-логика, доменные модели и сетевой стек были общими. Все табличные ставки, такие как аналитика, ведение журнала сбоев и специальные возможности, были реализованы с помощью общего кода. У них даже есть общий конвейер CI! Написание программного обеспечения таким образом было огромным ускорителем и позволяло им очень быстро создавать новые функции.


.

  • September 11, 2020