Прямая коммуникация
С вами говорят разработчики. Спросите, почему список тормозит на старом Android или как устроен платежный модуль, и вам объяснят без посредника.
Берем Flutter-приложение под ключ: от первых экранов до публикации в App Store и Google Play. Фреймворк собирает iOS и Android из одной кодовой базы. Код компилируется в машинный, как у нативных приложений. Исходники и аккаунты магазинов остаются у вас.

Flutter — открытый фреймворк Google для мобильных приложений на языке Dart. Один код рисует одинаковые экраны на iPhone и Android. Типичный пример — это клиентское приложение к уже работающему сервису: личный кабинет, заказ и оплата, запись, программа лояльности.
К нам приходят, когда нужны оба магазина приложений без двух мобильных команд. Или когда приложение на Flutter уже есть, а развивать его некому. Если продукт почти целиком держится на камере, Bluetooth и работе в фоне, выгода общего кода там пропадает.
Принципы, по которым мы ведем проекты
С вами говорят разработчики. Спросите, почему список тормозит на старом Android или как устроен платежный модуль, и вам объяснят без посредника.
Задачи, решения по архитектуре и статус сборок под iOS и Android ведем в трекере. Не в переписке и не в голове одного человека.
Промежуточные сборки ставите на свой телефон через TestFlight и закрытое тестирование Google Play. Прогресс видно не только на демо.
Камеру, пуш-уведомления, платежи и подпись сборок закладываем в оценку на старте. На приемке они не всплывают сюрпризом.
С первого релиза у проекта одна структура, автотесты и автоматическая сборка под обе платформы.
Исходники, ключи подписи и аккаунты магазинов ваши. Проект можно передать своей команде или другому подрядчику.
Один код на iOS и Android: экран меняют один раз, обе версии выходят вместе
Код компилируется в машинный, браузера внутри приложения нет
Свой движок отрисовки: экраны выглядят одинаково на iPhone и Android
При необходимости тот же код собирается под веб и десктоп
Открытый код, развитие фреймворка ведет Google
Камере, Bluetooth, фоновым задачам и платежам нужны нативные модули
Сборка тяжелее нативной: в нее входит движок фреймворка
Новые функции iOS и Android доходят до Flutter с задержкой
Виджеты рабочего стола и дополненную реальность пишут нативно
Приложение доходит до App Store и Google Play и остается вашим: с кодом, ключами подписи и аккаунтами
Одна команда пишет экраны для обеих платформ, и бюджет не делится на две нативные команды. Порядок функций выбираем вместе по ROI.
Экран правим один раз, обновление уходит в оба магазина в один день. Это сокращает TTM, а время на проверку в магазинах закладываем в план релиза.
Ключи подписи и аккаунты разработчика оформлены на вас с первого дня. Сменить подрядчика или взять проект в штат можно без переоформления приложения, это снижает TCO.
Тяжелый экран на новом iPhone работает плавно, а на бюджетном Android тормозит. Проверяем производительность списков, анимаций и запуска на слабых устройствах до релиза.
Плагины сторонних авторов отстают от обновлений iOS и Android. Берем поддерживаемые пакеты, фиксируем версии и обновляем Flutter по плану, чтобы не копить технический долг.
В первый релиз не берем то, что можно проверить позже: планшетную верстку, веб-версию, редкие сценарии. Лишняя работа до первой публикации — потери.
Типовую задачу решает типовой продукт. К нам приходят с нетиповой — там, где коробочные решения не справились. Мы привыкли к неопределенности, поэтому думаем о рисках заранее.
Приложение выложили из аккаунта подрядчика. Сменить команду потом дорого: страница в магазине, отзывы и ключи подписи остаются у него.
Публикуем только из ваших аккаунтов в App Store, Google Play и RuStore
Ключи подписи храним у вас и описываем доступы в документации проекта
Камеру, пуш-уведомления или оплату оставили на конец. На приемке выясняется, что без нативного кода они не работают, и срок уезжает.
Составляем список нативных функций до оценки и согласуем его с вами
Самый рискованный модуль проверяем пробной версией в первых итерациях
Flutter выбрали, не проверив список функций. Через год продукту нужна работа с датчиками, и часть экранов переписывают.
Сверяем функции продукта с возможностями Flutter до оценки
Если ядро продукта нативное, предлагаем начать с пробной версии самого сложного модуля
Apple и Google каждый год поднимают требования к версиям SDK. Обновление на старой сборке магазин не примет на проверку.
Следим за требованиями App Store и Google Play и обновляем Flutter заранее
На поддержке ставим плановые обновления SDK в график
Функцию закрыли сторонним плагином, а автор его забросил. После обновления iOS или Android функция перестает работать.
Подключаем пакеты с живой поддержкой и проверяем их до установки
Перед каждым релизом проверяем плагины на свежих версиях iOS и Android
Проект на Flutter достался от прежней команды без описания. Доработки ломают соседние экраны.
Сначала разбираем код и фиксируем, какие места опасно трогать
До первых правок покрываем тестами ключевые сценарии
Технологии, с которыми работаем на Flutter-проектах
Dart
Kotlin
Riverpod
Пишем о Flutter и мобильной разработке в блоге

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

Сравниваем Flutter и Kotlin для мобильной разработки: производительность, поддержку кода, стоимость, интерфейсы и безопа...

Разбираем преимущества и недостатки каждого подхода к мобильной разработке
Разбираемся, что и зачем строим. Задаем вопросы, собираем требования, готовим документацию.
Проектируем экраны под iOS и Android, закладываем нативные модули и схему подписи сборок.
Пишем код и тесты вместе. Каждый коммит проходит ревью. Прогресс видно в работающих демо.
Весь заявленный функционал реализован. Список функций закрыт. Дальше — доводка до боевой готовности.
Проверяем сборки на реальных устройствах через TestFlight и закрытое тестирование Google Play. Правки вносим до отправки на проверку в магазины.
Публикуем приложение в App Store, Google Play и при необходимости в RuStore из ваших аккаунтов. Если магазин вернул приложение с замечаниями, разбираем их вместе.
Продукт живет и меняется. Чиним, обновляем, наращиваем. Берем ту часть, которую держать в штате вам невыгодно.
Переносим данные, гасим зависимости, ничего не теряем. Финал — тоже инженерная задача.
Разные задачи — разные договоренности. Не подгоняем вас под один контракт. Выбираем формат под зрелость продукта и ваш аппетит к риску.
Вы знаете задачу и считаете ROI. Мы составляем ТЗ, фиксируем бюджет и сроки — и держим слово. Никаких сюрпризов в счете: цена согласована до старта.
Оплата: фиксированная по смете (Fixed Price)
Кому: устоявшемуся бизнесу для оптимизации эффективности
Есть дорожная карта, но жизнь вносит правки. Рамочный договор: смета на релизы и оплата по факту за все, что вышло за согласованный объем.
Оплата: Fixed Price + T&M
Кому: для проектов с просчитанной экономикой в условиях средней неопределенности
Бюджеты, с которыми мы можем работать
Ответим в течение 1 рабочего дня
Уточним задачу и предложим формат сотрудничества
Подготовим оценку сроков и бюджета
Спросим, есть ли уже код и аккаунты разработчика в магазинах
Запустим разработку после согласования условий