Files
career-ops-vbleroy/reports/064-unknown-kmp-mobile-2026-07-07.md
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

127 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Оценка: Компания не указана (анонимная вакансия через 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](https://enigmai.ru/salary/mobile-development/) |
| Middle Android Developer (медиана) | ~270 000 ₽; диапазон 160 000–290 000 ₽ | [checkroi.ru](https://checkroi.ru/blog/zarplata-android-razrabotchika/) |
| Премия за навык Kotlin Multiplatform | +15-20% к вилке Middle; до +25% при KMP + нативный UI | [ENIGMA AI](https://enigmai.ru/salary/mobile-development/mobile-salary-2026/) |
| Формат | Удалённая работа доминирует, компании открыты к найму из регионов | [ENIGMA AI](https://enigmai.ru/salary/mobile-development/) |
**Специфика РФ:** 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