Files
career-ops-vbleroy/reports/064-unknown-kmp-mobile-2026-07-07.md
T
redlineo d295c7f139
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s
init
2026-07-13 10:14:00 +03:00

22 KiB
Raw Blame History

Оценка: Компания не указана (анонимная вакансия через Runello-бот) — Fullstack разработчик Android/iOS (Kotlin Multiplatform)

Дата: 2026-07-07 Архетип: Mobile Developer — ближе всего к архетипу «Mobile Developer (Flutter)» из modes/_profile.md, но фактический стек вакансии — нативный Kotlin Multiplatform + SwiftUI, а не Flutter/Dart. Это НЕ прямое совпадение ни с одним из трёх целевых архетипов кандидата (Frontend Vue.js / Mobile Flutter / Fullstack Vue+Node). Балл: 1.8/5 Legitimacy: Proceed with Caution URL: https://t.me/s/runello_rus_mobileappdevelopment/3170 PDF: not generated (порог 3.0 не достигнут) Verification: unconfirmed (WebFetch-only, без Playwright — превью Telegram-канала, дата публикации не извлекается)


A) Резюме роли

Параметр Значение
Архетип Mobile Developer — нативный Kotlin Multiplatform (Android/iOS), не Flutter
Domain mobile
Function build
Seniority Не указан в посте (стек предполагает минимум Middle)
Формат работы Удалённо, глобально (#remote #global)
Размер команды Не указан
Оформление Не указано — компания скрыта, отклик только через Runello-бот
TL;DR Мобильная fullstack-роль (Android+iOS) на нативном стеке Kotlin Multiplatform + Jetpack Compose + SwiftUI + Ktor + Kodein — принципиально другой технологический стек, чем Flutter/Dart у кандидата.

Vibe команды: недостаточно данных в JD для оценки — текст поста содержит только хэштеги #mobile #android #remote #global, никаких сигналов об ownership, автономии, менторстве или гибкости. Стоит уточнить на собеседовании, если кандидат решит откликнуться.

Важное замечание по компании: пост из Telegram-канала «Mobile App Development Job Offers» — это канал-агрегатор бота Runello (подтверждено WebSearch: Runello — легитимный AI-агрегатор вакансий, ежедневно парсит тысячи вакансий и подбирает под профиль, не требует регистрации/личных данных для просмотра). Реальный работодатель в самом посте не назван — это стандартный паттерн анонимизации агрегатора: имя компании раскрывается только после отклика через бота. Название канала («Mobile App Development Job Offers — Telegram») — это НЕ работодатель, это сам канал, как и было указано в задаче.

B) Совпадение с CV

Прочитан cv.md. Требования JD против точных строк CV:

Требование JD Совпадение в CV Комментарий
Android + iOS mobile разработка ✅ частично — «Флаттер-разработчик... Начала как Flutter-разработчик»; «Здесь Аптека» (Flutter, Android/iOS); «Здесь Сотрудник» и «Здесь Чат» — портирование Android → iOS (Flutter) Опыт мобильной разработки под обе платформы РЕАЛЬНЫЙ, но через Flutter/Dart, а не нативный Kotlin/Swift
Kotlin, Kotlin Multiplatform (KMP) ❌ отсутствует Ни Kotlin, ни KMP не упомянуты в CV ни разу. Dart и Kotlin — разные языки с разным синтаксисом и экосистемой; знание одного не даёт рабочего знания другого
Jetpack Compose (нативный Android UI) ❌ отсутствует В CV — Flutter Widgets (свой UI-движок), не Jetpack Compose. Концептуально оба декларативны (как и Vue 3 Composition API кандидата), но синтаксис и API — разные
SwiftUI (нативный iOS UI) ❌ отсутствует Работа с iOS у кандидата — «Собрала iOS-сборки и отправила приложения на проверку в App Store» — это операционная часть релиза Flutter-приложения, не написание SwiftUI-кода
Ktor (Kotlin backend/networking) ❌ отсутствует CV указывает Node.js/Express/MongoDB на «ознакомительном уровне» — не Ktor и не Kotlin-backend
Kodein (DI-фреймворк для Kotlin) ⚠️ смежный опыт CV: «Service Locator (DI)» во Flutter-стеке — тот же паттерн (Dependency Injection), но другая реализация/язык
Kotlin Serialization ❌ отсутствует Не упоминается
Clean Architecture (подразумевается для KMP-проектов такого масштаба) ✅ прямое совпадение CV: «чистая архитектура (Clean Architecture)» — явно указано в разделе Mobile
REST API / WebSocket интеграции ✅ совпадение CV: «REST API, WebSocket/WSS», внедрила WebSocket в РМК

Пробелы и стратегия закрытия

  1. Kotlin / Kotlin Multiplatform — hard blocker. Это ядро вакансии, и в CV нет ни одной строки про Kotlin. Смежный опыт (Dart/Flutter) даёт общее понимание мобильной разработки, но НЕ даёт рабочего знания синтаксиса Kotlin, KMP-модулей (expect/actual), Gradle-мультиплатформенной сборки. Закрыть за счёт «может продемонстрировать смежный опыт» — нет, честно нельзя выдавать Flutter-опыт за готовность к Kotlin-проекту.
  2. Jetpack Compose / SwiftUI — hard blocker для нативной части. Аналогично: декларативный UI-паттерн знаком (Vue 3 Composition API, Flutter Widgets), но конкретные фреймворки — нет. Портфолио-проект, закрывающий пробел, отсутствует (согласно modes/_profile.md, у кандидата пока нет публичного портфолио).
  3. Ktor / Kotlin Serialization — nice-to-have относительно основного блокера, но тоже отсутствуют полностью.
  4. Конкретный план закрытия: Единственная честная фраза для сопроводительного — подчеркнуть опыт релиза мобильных приложений на две платформы (Firebase push-токены Android/iOS, отправка в App Store, DI и Clean Architecture как паттерны, а не как конкретные Kotlin-инструменты), и явно обозначить готовность переучиваться на Kotlin/Swift. Это НЕ быстрый прыжок — реалистично требует нескольких месяцев практики, а не одного «быстрого проекта» или заученной фразы для интервью.

Вывод по Block B: переносимые навыки (архитектурные паттерны, релиз-процесс, DI, REST/WebSocket) есть, но основной технологический стек вакансии (Kotlin Multiplatform, Jetpack Compose, SwiftUI, Ktor) у кандидата отсутствует полностью. Это не Flutter-вакансия — путать кросс-платформенность Flutter с нативной Kotlin Multiplatform было бы искажением фактов.

C) Уровень и стратегия

  1. Уровень в JD: не указан явно, но набор технологий (KMP + Compose + SwiftUI + Ktor + DI-фреймворк) обычно предполагает Middle/Middle+ по нативному мобильному стеку. Естественный уровень кандидата для этого архетипа: по Kotlin/KMP — фактически Junior/начинающий (нулевой коммерческий опыт с языком), несмотря на Middle-уровень в Flutter/Vue.
  2. План «продать senior без обмана»: здесь неприменим — нельзя продавать Middle+ уровень по стеку, которого нет в опыте. Честная позиция: «мобильный разработчик с опытом релиза production-приложений на Android+iOS (Flutter), сильными архитектурными паттернами (Clean Architecture, DI) и готовностью перейти на Kotlin Multiplatform» — то есть позиционирование как «смежный найм», не «готова прямо сейчас».
  3. План «если понизят уровень»: принять junior/стартовый грейд по Kotlin-треку разумно, если компания даёт реальный план роста и компенсация не ниже минимума кандидата (100 000 ₽/мес на руки). Договориться о пересмотре через 3-6 месяцев адаптации к стеку, а не сразу требовать Middle-условия за незнакомый язык.

D) Компенсация и спрос

Зарплата и оформление в самом посте не указаны — компания анонимна, условия раскрываются только после отклика через Runello-бот. Ниже — только общий рыночный контекст (WebSearch, 2026):

Показатель Значение Источник
Медиана зарплаты мобильного разработчика в РФ ~320 000 ₽ на руки ENIGMA AI
Middle Android Developer (медиана) ~270 000 ₽; диапазон 160 000–290 000 ₽ checkroi.ru
Премия за навык Kotlin Multiplatform +15-20% к вилке Middle; до +25% при KMP + нативный UI ENIGMA AI
Формат Удалённая работа доминирует, компании открыты к найму из регионов ENIGMA AI

Специфика РФ: gross/net не указаны в посте — уточнить обязательно при отклике (net ≈ gross × 0.87 как ориентир). Оформление (ТК РФ / ГПХ / самозанятость) неизвестно.

Оценка по компенсации: приведённые цифры рынка для Middle Kotlin-разработчиков теоретически перекрывают минимум кандидата (100 000 ₽/мес на руки), но так как это медианы для опытных Kotlin-специалистов, а кандидат вошла бы в эту роль без опыта в Kotlin — реалистичный оффер скорее будет ближе к junior-вилке или ниже медианы. Балл по этой оси — нейтральный из-за отсутствия конкретных данных по самой вакансии.

E) План персонализации

Рекомендация: не адаптировать CV под эту вакансию. Стек кандидата (Flutter/Dart, Vue 3) фундаментально отличается от требуемого (Kotlin Multiplatform, Jetpack Compose, SwiftUI, Ktor). Любая адаптация summary/буллетов под эту JD потребовала бы переформулировок, создающих ложное впечатление о владении Kotlin — это прямо запрещено правилом «Keywords get reformulated, never fabricated» (CLAUDE.md).

Если кандидат всё же решит откликнуться (например, из интереса к переходу в Kotlin-стек), единственное уместное изменение — явно указать в сопроводительном письме готовность к обучению и перечислить переносимые паттерны (Clean Architecture, DI, релиз на две платформы), не выдавая их за экспертизу в конкретных Kotlin-инструментах.

F) План собеседований

Так как оффер не соответствует стеку кандидата, банк историй здесь ограничен переносимыми паттернами, а не Kotlin-специфичными кейсами:

# Требование JD История STAR+R S T A R Reflection
1 Опыт релиза на Android + iOS Портирование «Здесь Сотрудник» и «Здесь Чат» с Android на iOS Оба приложения были только под Android Нужно было адаптировать под iOS и выпустить в App Store Перепривязала Firebase push-токены на обе платформы, собрала iOS-билды, спроектировала app-иконки, отправила на проверку в App Store Оба приложения успешно прошли ревью и стали доступны на iOS Узнала специфику App Store review и различия в push-инфраструктуре iOS/Android — процесс релиза похож на то, что требуется в KMP-проекте, даже без Kotlin
2 Clean Architecture / DI Service Locator (DI) + Clean Architecture во Flutter-приложении «Здесь Аптека» Приложение росло, нужна была поддерживаемая структура кода Спроектировала слои по Clean Architecture, внедрила DI через Service Locator Код стал проще тестировать и расширять новым разработчикам Поняла ценность архитектурных границ независимо от конкретного языка — тот же принцип применим к Kodein в Kotlin
3 REST API / real-time коммуникация Внедрение WebSocket-оповещений в РМК Не было видимости, сколько аптек онлайн в реальном времени Нужно было решение с минимальной задержкой Внедрила WSS-оповещения с отметкой прочтения Впервые видно статус ~1200 аптек в реальном времени Реал-тайм коммуникация через WebSocket переносится на любой стек, включая Ktor
4 Быстрое обучение новому стеку Переход из ИБ-образования в frontend/Flutter разработку без профильного опыта Не было бэкграунда в коммерческой разработке Прошла профильный курс, взяла на себя Flutter-проект Стала штатным разработчиком, ведёт 3 продукта одновременно Показывает способность быстро закрывать технологические пробелы — прямой аргумент для перехода на Kotlin

Рекомендуемый кейс: портирование Android → iOS приложений — единственная история, максимально близкая к теме вакансии (кросс-платформенный релиз), хотя и без Kotlin.

Вопросы-ловушки:

  • «У вас есть опыт с Kotlin/Kotlin Multiplatform?» → честный ответ: нет коммерческого опыта, но есть опыт кросс-платформенной мобильной разработки (Flutter) и архитектурных паттернов (Clean Architecture, DI), которые переносятся на новый стек; готова инвестировать время в обучение.
  • «Почему решили сменить стек с Flutter на нативный Kotlin?» → не отвечать шаблонно про «интересные технологии» — дать конкретную причину (если решит откликнуться), иначе этот вопрос обнажит слабую мотивацию.

G) Легитимность публикации (Posting Legitimacy)

Tier: Proceed with Caution

Сигнал Оценка
Качество описания Текст обрезан («интегра…») в Telegram-превью, но конкретный список технологий (Kotlin, KMP, Jetpack Compose, Ktor, Kodein, Kotlin Serialization) выглядит как реальная выдержка из JD, не как спам-шаблон. Terse-формат — типичная особенность Telegram-превью, а не сигнал подделки.
Компания Не названа — стандартная анонимизация агрегатора Runello (подтверждено WebSearch: легитимный AI job-matching бот, не требует регистрации/личных данных для просмотра вакансий). Отсутствие имени компании само по себе не является red flag для этого канала, но не позволяет проверить репутацию работодателя напрямую.
Repost-проверка По data/scan-history.tsv — вакансия встречается один раз (строка с этим URL, first_seen: 2026-07-07), признаков повторной публикации нет.
Рыночный контекст роли Роль (KMP + Android/iOS, remote) соответствует активному и реальному сегменту рынка — есть конкретные зарплатные данные по KMP-специалистам в РФ (см. Block D), что говорит в пользу реальности такого найма в принципе.
Свежесть Не подтверждена — дата публикации поста не извлекается из WebFetch-превью, Playwright недоступен в этом режиме.

Итог: нет признаков мошенничества или фейковой вакансии, но отсутствие названия компании и невозможность проверить свежесть/детали без перехода в бота — по правилу «default to Proceed with Caution при недостаточных сигналах» присваиваем именно этот tier, не «High Confidence».


Итоговая рекомендация

Балл 1.8/5 — значительно ниже порога 4.0/5 (AGENTS.md/CLAUDE.md). Настоятельно рекомендуется не откликаться. Основная причина — не компенсация и не локация (удалённо, без конфликта с политикой кандидата), а фундаментальное несовпадение технологического стека: вакансия требует нативной Kotlin Multiplatform + SwiftUI разработки, а профиль кандидата — Flutter/Dart + Vue 3. Кросс-платформенная модель Flutter — это смежный, но иной навык, чем нативная Android/iOS разработка на Kotlin/Swift; система не должна (и не будет) представлять эти навыки как эквивалентные.

Если кандидат заинтересована в переходе в нативный Kotlin-стек как в стратегическое направление карьеры — это отдельное решение, не отражённое в текущем CV/modes/_profile.md, и его стоит явно обсудить и зафиксировать в config/profile.yml/modes/_profile.md, прежде чем система начнёт продвигать такие вакансии выше.


Извлечённые ключевые слова (ATS)

Kotlin, Kotlin Multiplatform, KMP, Android, iOS, Jetpack Compose, SwiftUI, Ktor, Kodein, Kotlin Serialization, Fullstack, мобильная разработка, cross-platform, дизайн-система, пользовательский интерфейс, remote, global, мобильное приложение, native mobile development, DI (Dependency Injection), Clean Architecture