Добавить в корзинуПозвонить
Найти в Дзене

Команда мобилки из семи человек, разнесены по пяти городам и часовым поясам. Архитектурное решение раньше занимало две недели и два неудобны

Меня зовут Маша, 33, тимлид Android-разработки в московском B2B-стартапе «ТрейдНоут». Мы делаем мобильное приложение для торговых представителей FMCG-сегмента (Coca-Cola, Henkel, Mars, Wrigley, региональные дистрибуторы), 22 человека в компании, MRR 17 миллионов. В команде я с зимы 2024, до этого 4 года в Tinkoff (тогда ещё Tinkoff) на Android-платформе. Моя команда мобильной разработки - 7 человек, распределённая по России и СНГ. Я в Москве, Артур senior Android в Минске (UTC+3), Денис middle Android в Бишкеке (UTC+6), Олег senior iOS в Уфе (UTC+5), Катя middle iOS в Воронеже (UTC+3, как я), Никита middle Android в Москве, Лера junior fullstack в Москве. Разница часовых поясов между крайними точками - 3 часа. Муж Даня, 34, frontend в одной из московских e-commerce-компаний. Детей нет. В апреле в компании встал большой архитектурный вопрос: переходить ли на Kotlin Multiplatform (KMP) для шаринга бизнес-логики между Android и iOS. Сейчас две отдельные кодовые базы, дублирование бизнес-л
Оглавление

Меня зовут Маша, 33, тимлид Android-разработки в московском B2B-стартапе «ТрейдНоут». Мы делаем мобильное приложение для торговых представителей FMCG-сегмента (Coca-Cola, Henkel, Mars, Wrigley, региональные дистрибуторы), 22 человека в компании, MRR 17 миллионов. В команде я с зимы 2024, до этого 4 года в Tinkoff (тогда ещё Tinkoff) на Android-платформе.

Моя команда мобильной разработки - 7 человек, распределённая по России и СНГ. Я в Москве, Артур senior Android в Минске (UTC+3), Денис middle Android в Бишкеке (UTC+6), Олег senior iOS в Уфе (UTC+5), Катя middle iOS в Воронеже (UTC+3, как я), Никита middle Android в Москве, Лера junior fullstack в Москве. Разница часовых поясов между крайними точками - 3 часа.

Муж Даня, 34, frontend в одной из московских e-commerce-компаний. Детей нет.

В апреле в компании встал большой архитектурный вопрос: переходить ли на Kotlin Multiplatform (KMP) для шаринга бизнес-логики между Android и iOS. Сейчас две отдельные кодовые базы, дублирование бизнес-логики около 40% (модель данных, валидации, сетевой слой, парсеры). KMP - современный подход, но решение на 2-3 года вперёд с большими последствиями: если зайдём и не выйдет, переход обратно стоит 3-4 месяца.

Решение принципиальное, надо обсудить со всей командой мобильной разработки. Каждый на этом проекте 2+ года, у каждого мнение, основанное на личном опыте.

Как мы раньше принимали такие решения

До этого момента у нас было два больших архитектурных решения за последний год: переход на Coroutines в полном Android-стеке (октябрь 2024) и выбор фреймворка для тестов на iOS (январь 2025).

Оба решения принимались похожим образом:

  1. Я как тимлид готовила обзорный документ на 3-5 страниц.
  2. Назначала zoom-звонок на 1.5-2 часа на всю команду.
  3. На звонке давала презентацию 30 минут, потом обсуждение.
  4. Если не решили на первом звонке - второй через 5-7 дней.

Проблемы этого подхода:

  • Звонок в 11:00 МСК = 14:00 у Дениса в Бишкеке. Самый разгар дня, но он часто на встречах с инфра-командой и пропускает.
  • Звонок в 17:00 МСК = 19:00 у Олега в Уфе. Семья ужинает. Он периодически отказывался.
  • Артур не любит zoom как формат - он медленно говорит, на нём плохо проходят его аргументы, потому что в группе обсуждение идёт быстро.
  • Денис всегда молчит на звонках, потом письменно в чат через 2 дня присылает «я подумал, у меня другое мнение». Уже поздно.
  • Я как тимлид модерирую разговор, теряя при этом время на собственные раздумья.

В среднем такие решения занимали 2-3 недели с двумя 1.5-часовыми звонками. Часто выходили без полного консенсуса, кто-то «согласен, но с оговоркой», и эти оговорки потом всплывали через месяц как архитектурные сомнения.

Архитектурный вопрос про KMP

Контекст для тех, кто не в Android-разработке: Kotlin Multiplatform (KMP) - технология JetBrains, позволяющая писать общую бизнес-логику на Kotlin и использовать её как в Android (нативно), так и в iOS (через сгенерированный фреймворк). Это решает дублирование логики, но требует от команды Android-разработчиков умения собирать iOS (нужно держать макбук, понимать xcode, ловить специфические iOS- ошибки в собранном коде). Это шаг с серьёзными последствиями.

Альтернативы:

  • Остаться как есть, дублировать логику (текущая позиция, привычно)
  • Flutter (всё переписать на Dart, отказаться от нативной разработки)
  • React Native (то же что Flutter)
  • KMP только для бизнес-логики, UI остаётся нативный
  • KMP + Compose Multiplatform (включая UI)

В мае 5 я сидела за документом 5 страниц, готовила обзор. И поняла, что 2-часовой звонок этой команды о KMP закончится тем, что Денис промолчит, Олег скажет «я не за KMP вообще», Артур долго объяснит свои сомнения, и мы выйдем без решения через 2 недели и второй звонок.

В этот же вечер коллега по экс-Tinkoff Карина мне прислала ссылку на NeuroVerdict. Она там работает с апреля как тимлид, сказала «у нас распределённая команда, мы перешли на async-формат через этот сервис, скорость решений увеличилась в 3-4 раза».

Я зарегистрировалась 5 мая, попробовала на одной несложной задаче - сравнение библиотек для shimmer-анимаций. Получила 5 ответов + синтез за минуту, по делу. Поняла, как работает «расшаренные ссылки».

Что я сделала с KMP

Я подготовила не один документ для звонка, а 3 разных промпта в NeuroVerdict:

Промпт 1: «Сравнение KMP vs Flutter vs React Native vs дублирование кода для команды из 4 Android + 2 iOS + 1 fullstack. Бизнес-логика финтех/торговая, нужны интеграции с банками и платежами. Дать trade-offs, риски и реалистичные оценки сроков внедрения».

Промпт 2: «KMP в продакшене 2024-2026: реальные кейсы крупных компаний, метрики производительности iOS-сборки, известные сюрпризы на iOS-стороне, проблемы с интеграцией существующих iOS-библиотек».

Промпт 3: «Финансовая оценка перехода на KMP для команды текущего размера: время полного внедрения, рост скорости разработки новых фичей после внедрения, риски на инфраструктуре».

По каждому 5 моделей дали ответы + модератор синтезировал. Каждый ответ имеет кнопку «Поделиться» - URL вида neuroverdict.ru/shared/ [token], открывается без авторизации.

6 мая утром я в командный чат:

Команда, по KMP - давайте по-новому.
Я приготовила 3 промпта в neuroverdict, 5 моделей по каждому.
Не созваниваемся, не презентую. Прочитайте у себя в комфортный час.
Каждый из вас комментирует в треде в свой пик внимания.
Дедлайн на коллективное решение - четверг 11:00 МСК.
Если будут разногласия после этого - короткий звонок 30 минут в пятницу.
Ссылки:
[3 расшаренных URL]

В этот же день я уехала в Питер на конференцию (была заранее запланирована, не имела отношения к проекту). Команда сама.

Что произошло за 3 рабочих дня

Артур в Минске утром среды (10:30 по моему времени, у него тоже 10:30): «Я обычно медленно собираю мысли, мне нужно вечером. Сейчас выскажусь по первому впечатлению. Perplexity дал бенчмарки по KMP-проектам в продакшене Cash App, Netflix, ВКонтакте - убедительная база. Adoption растёт. Не вижу базовых рисков. Я за».

Вечером того же дня (по своему) Артур развёрнуто: «Прочитал внимательно. Меня смущает один момент в ответе Gemini - он сказал что Compose Multiplatform на iOS пока неустойчив. Это критично - мы тогда не сможем шарить UI, только бизнес-логику. С точки зрения объёма - бизнес-логика у нас примерно 60% дублирования, UI 80%. То есть KMP без Compose даст эффект в 60% от потенциального. Это всё равно много, но не "ура". Я за KMP только для бизнес-логики на старте». Подробное мнение, которое в звонке он бы не сформулировал так чётко.

Денис в Бишкеке к 11:00 утра четверга по своему (по моему уже 14:00, я отвечала ему через полчаса): «Я обычно молчу на звонках, тут проще. Согласен с Артуром, KMP только для бизнес-логики на старте. Дополнение - я смотрел Compose Multiplatform недавно для pet-проекта, на iOS пока неустойчив, проблемы с системными элементами (диалоги, кейборды). Через 1-1.5 года будет стабильнее. Голос за поэтапный подход: бизнес-логика сейчас, UI через 1.5 года, когда Compose Multiplatform созреет».

Олег в Уфе вечером среды (для него вечер) обстоятельно: «Я против KMP по одной причине - найм. На рынке senior iOS-разработчиков не очень много в принципе. KMP-разработчиков на iOS - ещё меньше. Если кто-то из меня или Кати уйдёт через год - замена будет 2-3 месяца дольше, потому что нам нужен будет не "iOS-разработчик", а "iOS-разработчик с KMP-опытом". Это аргумент против. Не "никогда", а "пока рынок не созрел"». Сильное возражение, которое он бы на звонке не успел развернуть.

Катя в Воронеже утром четверга (10:00 по нашему): «Я перечитала ответы. Меня зацепил Grok: "у вас команда 4 Android + 2 iOS + 1 fullstack, KMP даёт максимальный выигрыш когда команда симметричная или iOS-сильнее. У вас Android доминирует. Шаринг кода - симметричное решение для асимметричной команды. Возможно стоит подумать про обратное: на iOS написать тонкую обёртку над Android-логикой, вынеся бизнес-слой в backend". Это перевернуло мой взгляд. Я не уверена что это правильно для нас, но я хочу обсудить серьёзно». Категорически новый ракурс.

Никита в Москве к четвергу: «За KMP только для бизнес-логики на старте. Поэтапный подход - 2-3 месяца на инфраструктуру, 3-4 месяца на миграцию core-модулей, к концу 2026 будет работать. Согласен с Артуром и Денисом».

Лера (junior) в Москве к четвергу: «Я junior, мне сложно оценивать архитектурное решение. Но из синтеза модератора понятно, что у нас 3 за с оговорками (бизнес-логика да, UI пока нет), 1 против (Олег по найму), 1 переворачивает рамку (Катя по асимметричной команде). Это значит, что одного правильного ответа нет. Может стоит сделать спайк на 2 недели на одной фиче и проверить гипотезу?». Спокойное предложение, которое в звонке младший вряд ли бы предложил.

К 11:00 четверга у меня в треде 6 обстоятельных мнений (плюс второй комментарий Артура с углублением). У 5 из 7 человек - вариант «KMP только для бизнес-логики на старте». У Олега - возражение по найму. У Катя - предложение пересмотреть направление шаринга. У Леры - предложение спайка.

В пятницу 8 мая я подсобрала это в один комментарий: «спайк 2 недели на одной фиче (например, выбор поставщика - сложная бизнес- логика, 800-1000 строк). Если в спайке всё пойдёт быстро и без сюрпризов - идём в KMP только для бизнес-логики на старте, по плану Никиты. Если выйдут сюрпризы - возвращаемся к разговору, учитывая возражение Олега и переворот Кати». Согласовали в чате, 1 короткий звонок 30 минут на пятницу подтвердить и распределить задачи на спайк.

Через пять дней спайка

Спайк начали в понедельник 11 мая (Никита + Олег как pair). К сегодняшнему вечеру (пятница 15 мая) на фиче «выбор поставщика» переписали бизнес-слой в KMP, успели протестировать Android. iOS прогон запланирован на следующую неделю. Из того, что уже видно: интеграция с одной старой ObjC-библиотекой потребует переработки (2 дня вместо 0.5 запланированных). Остальное идёт по плану.

К концу спайка (26 мая) поймём окончательно. План пока такой: если прогон iOS пройдёт без катастрофических находок - идём в KMP для бизнес-логики, полное внедрение к концу 2026; UI остаётся нативным до созревания Compose Multiplatform (пересмотр в Q3 2027). Возражение Олега по найму учтено - команда не растёт в 2026, а если будем нанимать в 2027 - открываем позицию «iOS + KMP» с премией +15% к рынку.

Принципиальный архитектурный вопрос, который раньше у нас бы занял 2-3 недели + 2 неудобных звонка + 2-3 «несогласных с оговорками» - занял 3 рабочих дня обсуждения + 1 короткий звонок + полный консенсус всех 7 человек.

Что я для себя выписала

Расшаренные ссылки на ответы нескольких моделей - это инструмент для распределённой команды, не для одного человека. Один человек у себя в браузере открыл NeuroVerdict, прочитал 5 ответов, принял решение - это нормально. Для команды важно, что у каждого участника открыты те же 5 ответов в его удобный час, и он может комментировать прицельно: «у Перплексити в третьем абзаце вот эта цифра», «по ответу Клода я не согласен по такому-то пункту».

Это не «звонок, на котором все молчат». Это асинхронный thread, в котором каждый раскрывается в своём темпе. Артур у меня обычно молчит на звонках - в текстовом формате он дал самое сильное мнение. Денис вообще не любит speak-up - в треде он дал глубокий аналитический ответ. Лера-junior на звонке бы не предложила спайк - в треде предложила.

Раньше у меня была установка «архитектурное решение - это серьёзный звонок». Сейчас я понимаю - архитектурное решение это набор обоснованных мнений в одном поле, к которому каждый имеет доступ в свой пик. Звонок нужен для финального утверждения, не для рождения мнения.

Карина, которая мне всё это рассказала, в среду на корпоративе Tinkoff-выпускников спросила: «как KMP?». Я сказала «приняли за 3 дня вместо 3 недель, спасибо тебе». Карина улыбнулась: «ну я же говорила. У нас теперь даже спринт-планирования так делаются - расшаренный промпт по приоритетам недели, каждый предлагает в треде, скрам-мастер собирает».

Если у вас сейчас распределённая команда и регулярные архитектурные обсуждения - попробуйте расшаренные ссылки на ответы 5 моделей в NeuroVerdict. Один промпт, один URL, все участники в свой пик читают и комментируют один и тот же материал. У нас это сэкономило 2 недели + 2 неудобных звонка по KMP. На следующем большом решении сэкономит больше.