Flutter-разработчик (Middle+ / Senior, Mobile + Web)

Навыки: Git, REST, ООП, Базы данных, MySQL, Linux, Django, Docker. Квалификация: Middle. Специализации: Разработчик мобильных приложений.

Flutter-разработчик (Middle+ / Senior, Mobile + Web)

О продукте

Развиваем приложение с живыми спортивными трансляциями, статистикой матчей, видео и большим объёмом данных. Продукт работает на iOS, Android и Web на общей Flutter-кодовой базе.

Ядро приложения — собственный видеоплеер поверх HLS. Вокруг него работают реклама, подписки, аналитика и различные сценарии доступа к контенту. Рядом — десятки насыщенных экранов с данными из API: матчи, турниры, команды, составы, статистика и другие спортивные данные.

Кодовой базе несколько лет: есть внутренние пакеты, собственные обёртки над сетью и хранилищем, несколько брендов из одного репозитория.

Ищем человека, который придёт развивать работающий продукт, разбираться в существующей архитектуре и постепенно улучшать её, а не начинать всё с нуля.

Уровень

Middle+ / Senior.

Ориентируемся на разработчика с 3+ годами коммерческой разработки на Flutter, который сопровождал хотя бы один продукт достаточно долго, чтобы сталкиваться не только с разработкой новых экранов, но и с:

  • релизами;
  • регрессиями;
  • production-багами;
  • чужим кодом и архитектурными решениями;
  • проблемами, возникающими только на части устройств или сетей;
  • публикацией приложений в App Store и Google Play.

Чем предстоит заниматься

Видеоплеер и стриминг

Видео — одна из ключевых частей продукта.

Нужно будет развивать и поддерживать:

  • HLS live-трансляции и VOD;
  • буферизацию и восстановление после обрывов сети;
  • повторное подключение к потоку;
  • обработку зависаний и ситуаций, когда воспроизведение остановилось без явной ошибки;
  • полноэкранный режим;
  • работу со звуком и audio session;
  • поведение приложения при уходе в фон;
  • Picture in Picture;
  • трансляцию на телевизор / casting;
  • длительное воспроизведение без утечек памяти и деградации производительности.

Важно уметь воспринимать плеер не как один виджет, а как машину состояний и переходов.

Например, понимать, в каких состояниях плеер способен зависнуть навсегда, как это определить и какой fallback или watchdog должен сработать.

Реклама и подписки

Плеер тесно связан с рекламой и монетизацией.

Нужно будет работать со сценариями:

  • показ рекламы перед или вокруг трансляции;
  • гонки между загрузкой рекламы и запуском контента;
  • ситуация, когда реклама не загрузилась;
  • зависание рекламного SDK;
  • возврат пользователя к контенту после рекламы;
  • отсутствие чёрных экранов и бесконечных загрузок;
  • различные состояния подписки;
  • восстановление покупок;
  • отключение рекламы для подписчиков.

API и данные

В продукте много экранов с большим количеством данных.

Предстоит вместе с backend-разработчиком:

  • участвовать в проектировании API под реальные потребности клиента;
  • подключать новые методы;
  • продумывать кеширование;
  • обрабатывать ошибки и недоступность сервисов;
  • уменьшать количество лишних запросов и данных;
  • корректно обновлять данные на live-экранах;
  • собирать новые экраны по макетам.

Mobile + Web

Основная кодовая база Flutter используется для:

  • iOS;
  • Android;
  • Web.

Для Web нужно будет учитывать особенности браузера, воспроизведения видео, CORS, проксирования и взаимодействия Flutter с JavaScript.

Производительность и стабильность

Отдельная часть работы — production-качество:

  • профилирование;
  • поиск лишних rebuild;
  • оптимизация тяжёлых списков;
  • контроль памяти;
  • плавная прокрутка на слабых устройствах;
  • стабильность при многочасовом воспроизведении;
  • анализ crash reports;
  • поиск проблем по логам и метрикам.

Релизы

Нужно уметь доводить задачу не до merge, а до production:

  • CI;
  • сборки;
  • flavors;
  • white-label приложения;
  • подпись приложений;
  • публикация в App Store и Google Play;
  • работа с отказами ревью;
  • исправление требований магазинов;
  • наблюдение за функциональностью после релиза.

Что важно для нас

Flutter / Dart

Уверенное знание Dart и Flutter:

  • жизненный цикл виджетов;
  • понимание Flutter rendering pipeline;
  • управление состоянием;
  • Bloc / Cubit;
  • локальное состояние там, где более сложный подход не нужен;
  • Dependency Injection;
  • слоистая feature-архитектура;
  • работа с существующими внутренними пакетами и соглашениями проекта.

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

Видео

Практический опыт работы с видео:

  • HLS;
  • live и VOD;
  • buffering;
  • network errors;
  • reconnect;
  • foreground / background;
  • fullscreen;
  • audio;
  • длительное воспроизведение.

Особенно ценим разработчиков, которые умеют диагностировать сценарии вида:

«Плеер просто остановился, ошибки нет».

Native

Не требуется быть отдельным iOS или Android-разработчиком, но необходимо комфортно чувствовать себя на уровне:

«прочитать → понять → поправить → собрать».

Желательно знать:

  • platform channels;
  • Swift;
  • Kotlin;
  • native player APIs;
  • Picture in Picture;
  • casting;
  • audio sessions.

Инфраструктура продукта

Будет полезен опыт с:

  • рекламными SDK;
  • subscriptions / in-app purchases;
  • аналитикой;
  • crash reporting;
  • remote config;
  • feature flags.

Важно понимать, как удалённо выключить, изменить или подменить функциональность без нового релиза приложения, если в production возникла проблема.

UI

Ожидаем аккуратную реализацию интерфейсов:

  • вёрстка по дизайну и спецификации;
  • адаптация под разные размеры экранов;
  • темизация через токены;
  • локализация;
  • корректная работа с насыщенными данными интерфейсами.

Будет большим плюсом

Спортивная тематика

Понимание того, как устроены:

  • матчи;
  • турниры;
  • лиги;
  • туры;
  • составы;
  • live score;
  • турнирные таблицы;
  • статистика;
  • коэффициенты.

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

Flutter Web

Опыт с:

  • Flutter Web;
  • JS interop;
  • hls.js;
  • HTML video elements;
  • CORS;
  • проксированием;
  • особенностями браузерного воспроизведения.

Видео-инфраструктура

Плюсом будет понимание:

  • streaming CDN;
  • особенностей HTTP headers;
  • DRM;
  • ограничений разных платформ;
  • Chromecast / casting;
  • Picture in Picture.

Остальное

Также приветствуется:

  • SQLite и offline cache;
  • тестирование бизнес-логики;
  • code review;
  • наставничество;
  • опыт развития больших Flutter-проектов.

Как мы ожидаем, что разработчик работает

Спокойно разбирается в чужом коде и legacy.

Не ограничивается фразой:

«У меня не воспроизводится».

А идёт дальше: смотрит логи, состояние плеера, сеть, устройство, версию ОС, метрики и crash reports.

Часть проблем со стримингом может возникать только у нескольких процентов пользователей — на конкретном Android-устройстве, версии iOS, операторе или нестабильной сети.

Поэтому важно:

  • тестировать на реальных устройствах;
  • проверять работу на плохом интернете;
  • думать о нестандартных сценариях;
  • доводить задачу до релиза;
  • следить за ней после выкладки;
  • заранее задавать вопросы по scope;
  • реалистично оценивать сроки;
  • коротко фиксировать важные технические решения в репозитории.

Тревожные признаки

Скорее всего, нам будет сложно сработаться, если:

  • весь опыт Flutter ограничивается формами и списками поверх REST API;
  • нет практического опыта с production-видео;
  • нет собственных релизов в App Store и Google Play;
  • при первом знакомстве с проектом возникает желание полностью переписать его на другой стек или архитектуру;
  • разработчик не знает, с чего начать диагностику, если воспроизведение просто остановилось без ошибки;
  • разработка тестируется только в эмуляторе;
  • задача считается законченной сразу после merge, без проверки того, как она работает у пользователей.

See also

要針對這個職缺調整履歷嗎?

目前無法檢查您與這個職缺的符合程度;請先將履歷加入個人檔案,下次即可查看。

A new version of freehire is available