183 lines
26 KiB
Markdown
183 lines
26 KiB
Markdown
# Оценка: МТС — Middle Flutter Developer [GOODOK]
|
||
|
||
**Дата:** 2026-07-07
|
||
**Архетип:** Mobile Developer (Flutter) — secondary archetype
|
||
**Балл:** 3.6/5
|
||
**URL:** https://job.mts.ru/vacancy/678924882003626027
|
||
**PDF:** output/cv-romanova-valeriya-mts-goodok-2026-07-07.pdf
|
||
**Legitimacy:** Proceed with Caution
|
||
|
||
---
|
||
|
||
## A) Резюме роли
|
||
|
||
| Параметр | Значение |
|
||
|---|---|
|
||
| Архетип | Mobile Developer (Flutter) |
|
||
| Domain | МТС GOOD'OK — сервис замены стандартных гудков на мелодии/шутки/музыкальные каналы при входящем звонке |
|
||
| Function | Build |
|
||
| Seniority | Middle, 3-6 лет опыта |
|
||
| Формат работы | Гибрид или удалённо, Москва, гибкое начало дня (8:00-10:00), 8-часовой рабочий день |
|
||
| Размер команды | Не указан |
|
||
| Оформление | Не указано явно |
|
||
| Зарплата | Не указана |
|
||
| TL;DR | Middle Flutter-роль с прямым совпадением по ключевым технологиям (BLoC, Clean Architecture, кросс-платформенная разработка), явным remote-опционом — из пяти оценённых сегодня МТС-вакансий единственная с реалистичным шансом на отклик, но не без разрывов (уровень, тестирование Flutter, локальные БД). |
|
||
|
||
## B) Совпадение с CV
|
||
|
||
| Требование JD | Совпадение в CV |
|
||
|---|---|
|
||
| Глубокое знание Dart (async, Future, Stream, async/await) | ⚠️ Правдоподобно (коммерческий Flutter-опыт с ноября 2024), но конкретные async-паттерны не детализированы в CV — не заявлять глубину явно, честно обозначить как область для технического интервью |
|
||
| Жизненный цикл виджетов (Stateless/Stateful, initState, dispose) | ⚠️ Аналогично — общий Flutter-опыт есть, детали не в CV |
|
||
| CustomPainter, анимации (AnimationController, Tween) | ❌ Не упомянуто в CV — пробел |
|
||
| BLoC/Cubit или Riverpod | ✅ Прямое совпадение — "Flutter, BLoC, Service Locator (DI), чистая архитектура" |
|
||
| Dio/http с interceptors | ⚠️ Не упомянуто явно в CV (только "REST API" в сети) — вероятный смежный опыт, не подтверждённый явно |
|
||
| Локальные БД (Hive, Isar, SQLite) | ❌ Не упомянуто в CV — пробел |
|
||
| Unit/widget-тестирование (mocktail/mockito) | ❌ В CV указано тестирование только для Vue-стека (Vitest, Playwright) — для Flutter тестирование не подтверждено |
|
||
| Git | ✅ Прямое совпадение — Git, GitLab, Feature Branching |
|
||
| Портирование Android → iOS, релиз в App Store | ✅ Сильное прямое совпадение — "Здесь Сотрудник" и "Здесь Чат": адаптация билдов под iOS, перепривязка Firebase push-токенов, сборка и отправка на проверку в App Store |
|
||
| Разработка новой функциональности, багфиксы, рефакторинг | ✅ Прямое совпадение — 20+ багов исправлено в «Здесь Аптека», редизайн кнопки «Избранное», диагностика и фикс бага постраничной загрузки |
|
||
|
||
**Пробелы:**
|
||
1. **CustomPainter/анимации** — не hard blocker для большинства Flutter-задач, но explicit требование в JD. Стратегия: честно уточнить на собеседовании реальную глубину, не заявлять неподтверждённое.
|
||
2. **Локальные БД (Hive/Isar/SQLite)** — вероятно nice-to-have в контексте приложения-звонилки (кэш настроек), но явно перечислено в must-have. Стратегия закрытия: указать готовность быстро освоить (кандидат отмечает в CV "быстро осваиваю... любые UI-киты"), плюс общий опыт с БД через MongoDB (хакатон).
|
||
3. **Flutter-специфичное тестирование (mocktail/mockito)** — в CV подтверждено только тестирование Vue-стека. Смежный опыт (Playwright E2E, Vitest) показывает тестовую культуру в целом, но не конкретные Flutter-инструменты. Честно обозначить как область роста.
|
||
4. **Уровень (Middle 3-6 лет)** — у кандидата ~8 месяцев именно Flutter-опыта (с ноября 2024), хотя общий коммерческий стаж ~1.5-2 года через параллельную работу над тремя продуктами. Формальный разрыв заметен именно для чисто Flutter-специализации.
|
||
|
||
## C) Уровень и стратегия
|
||
|
||
**Уровень в JD:** Middle, 3-6 лет.
|
||
**Естественный уровень кандидата для архетипа Mobile (Flutter):** Junior-Middle переходный — сильный кросс-платформенный опыт (единственный кандидат в отделе, кто довёл 2 приложения от Android-only до iOS-релиза), но формальный стаж именно во Flutter короче, чем в Vue.
|
||
|
||
**План "продать senior без обмана" (здесь — "продать полноценный Middle"):**
|
||
- Вести с уникальным differentiator: самостоятельное портирование двух приложений с Android на iOS "с нуля" (перепривязка Firebase push, сборка, прохождение App Store review) — это операционная зрелость, которую редко доверяют кандидату с коротким стажем.
|
||
- Явно называть BLoC/Cubit, Service Locator (DI), Clean Architecture — прямое совпадение с JD-терминологией.
|
||
- Честно обозначить: глубокая экспертиза в анимациях/CustomPainter и Flutter-специфичном тестировании — области роста, не сильная сторона на сегодня.
|
||
|
||
**План "если понизят уровень":**
|
||
- Учитывая явный технологический разрыв в тестировании/анимациях, вероятный исход — предложение по нижней границе Middle-вилки или встречное предложение Junior+.
|
||
- Принять при условии компенсации выше таргета (100 000–120 000+ ₽/мес на руки) — рыночные данные показывают, что даже нижняя граница Middle Flutter в Москве (152 800–176 000 ₽/мес) с запасом покрывает таргет.
|
||
- Договориться о пересмотре через 6 месяцев с чёткими критериями (например, самостоятельное владение анимационным слоем интерфейса).
|
||
|
||
## D) Компенсация и спрос
|
||
|
||
Зарплата в вакансии не указана.
|
||
|
||
Рыночные данные (WebSearch, RU, июль 2026):
|
||
|
||
| Источник | Данные |
|
||
|---|---|
|
||
| Middle Flutter Developer (общий обзор, медиана) | ~260 000 ₽/мес |
|
||
| Middle-грейд (детализация по грейдам) | 152 800 – 176 000 ₽/мес |
|
||
| Москва (опытные Flutter-специалисты) | ~120 000 – 150 000 ₽/мес на входе, до 300 000+ ₽/мес для более опытных Middle |
|
||
| Контекст рынка | Flutter к 2026 году утратил репутацию "технологии для прототипов" — крупные банковские и госприложения написаны на Flutter, зарплаты выравниваются с нативной разработкой |
|
||
|
||
**Оценка:** Даже нижняя граница диапазона Middle Flutter в Москве (152 800 ₽/мес) превышает верхнюю границу таргета кандидата (120 000 ₽/мес на руки) при условии, что цифра близка к net. Оформление и точная gross/net-структура не указаны в JD — уточнить у рекрутера при отклике.
|
||
|
||
## E) План персонализации
|
||
|
||
| # | Раздел | Текущее состояние | Предлагаемое изменение | Почему |
|
||
|---|--------|--------------------|--------------------------|--------|
|
||
| 1 | Summary | Общий акцент на dual-track Vue3 + Flutter | Вести с мобильной разработкой (Flutter, BLoC, кросс-платформенный релиз) как основным треком под эту вакансию, Vue — как дополнительный | Роль полностью про Flutter/мобильную разработку |
|
||
| 2 | Опыт — заголовок роли | «Frontend/Flutter-разработчик» | Показать «Flutter-разработчик» как ведущую роль под эту вакансию | Точное совпадение заголовка повышает keyword-match |
|
||
| 3 | Портирование iOS | Указано в проектах "Здесь Сотрудник"/"Здесь Чат" | Вынести в топ буллетов, явно называя Firebase push-токены, App Store review | Прямое совпадение с "интеграция backend-сервисов", "рефакторинг и устранение уязвимостей" |
|
||
| 4 | BLoC/Clean Architecture | Указано в скиллах | Добавить конкретный проектный контекст (какие модули на BLoC) в буллеты «Здесь Аптека» | Прямое совпадение с "BLoC/Cubit паттерны" |
|
||
| 5 | Ключевые слова | Flutter, BLoC уже есть | Добавить явно "Dart", "async/await", "widget lifecycle" в Skills-секцию (только там, где честно применимо) | ATS-совпадение по формулировкам вакансии |
|
||
|
||
## F) План собеседований
|
||
|
||
| # | Требование JD | История STAR+R | S | T | A | R | Reflection |
|
||
|---|---|---|---|---|---|---|---|
|
||
| 1 | Портирование, интеграция backend-сервисов | Портирование «Здесь Сотрудник» и «Здесь Чат» с Android на iOS | Оба приложения изначально только под Android | Адаптировать билды под iOS, обеспечить работу push-уведомлений на обеих платформах | Перепривязала Firebase-токены, собрала iOS-билды, спроектировала app-иконки, отправила на проверку в App Store | Оба приложения успешно прошли ревью и вышли в App Store | Кросс-платформенный релиз требует не только кода, но и понимания процесса ревью — операционная зрелость сверх формального стажа |
|
||
| 2 | Разработка и адаптация UI-элементов | Редизайн кнопки «Избранное» («Здесь Аптека») | Кнопка была маленькой и неудобной для нажатия | Улучшить эргономику без выделенного дизайнера в команде | Самостоятельно спроектировала и внедрила увеличенную кнопку | Улучшенная эргономика интерфейса | Готовность закрывать дизайнерский пробел — ценно для команды без штатного UI/UX |
|
||
| 3 | Рефакторинг и устранение уязвимостей/багов | Диагностика бага «Избранное» (пагинация) | Жалобы пользователей на не открывающийся раздел | Найти причину без готового отчёта QA | Диагностировала: все товары грузились одним запросом; реализовала постраничную загрузку | Жалобы прекратились | Проактивная диагностика продакшн-проблем до эскалации |
|
||
| 4 | Работа с состоянием (BLoC/Cubit) | Общая архитектура «Здесь Аптека» на Flutter/BLoC | Приложение росло, требовалась предсказуемая архитектура состояния | Применить BLoC/Service Locator для разделения бизнес-логики и UI | Использует BLoC/Cubit и Service Locator (DI) в рамках Clean Architecture | Поддерживаемая, тестируемая архитектура для растущего приложения | Понимание Clean Architecture как принципа, а не просто набора библиотек |
|
||
| 5 | Багфиксинг в проде | 20+ багов, включая проблемы с фильтрами поиска и адаптивностью | Многочисленные UI-баги, часть — не дошедшие до жалоб пользователей | Найти и исправить проактивно | Самостоятельно нашла и исправила более 20 багов | Снижение числа пользовательских жалоб | Проактивный QA-инстинкт — находит баги до эскалации, а не только реагирует на тикеты |
|
||
| 6 | Git | Feature Branching + обучение коллеги (РМК) | Хаотичные релизы, "зависшие" фичи | Внедрить Git Flow, обучить команду | Обучила коллегу с 11-летним стажем, внедрила процесс | Команда перешла на стабильные еженедельные релизы | Организационный вклад значим не меньше кода |
|
||
|
||
**Рекомендуемый кейс:** Портирование «Здесь Сотрудник»/«Здесь Чат» Android → iOS целиком — самое прямое совпадение с "разработка кросс-платформенных приложений", "интеграция backend-сервисов" и демонстрирует операционную зрелость (полный цикл до App Store review).
|
||
|
||
**Вопросы-ловушки:**
|
||
- «У нас требуется опыт с CustomPainter и сложными анимациями — есть?» → «Прямого опыта с CustomPainter пока нет — работала в основном с готовыми виджетами и стандартными анимациями. Готова углубиться, но честно предупреждаю на входе, чтобы не терять время обеих сторон».
|
||
- «Как тестируете Flutter-код?» → «На Flutter-проектах пока не внедряла unit/widget-тесты с mocktail/mockito — тестовая культура у меня развита на Vue-стеке (Vitest, Playwright E2E), готова перенести этот опыт на Flutter».
|
||
- «У вас 3-6 лет требуется, а Flutter в резюме — с ноября 2024» → «Именно Flutter — около 8 месяцев, но за счёт параллельного ведения 3 продуктов (2 Flutter-приложения + web) общий коммерческий опыт больше, и уже есть полный цикл кросс-платформенного релиза (Android → iOS → App Store)».
|
||
|
||
---
|
||
|
||
## Vibe команды
|
||
|
||
Судя по формулировкам JD, явно указан гибкий график начала рабочего дня (8:00-10:00) — конкретный, а не декларативный сигнал гибкости. Отдельно упомянут корпоративный психолог и массаж — нетипичный для российского рынка сигнал заботы о благополучии сотрудников, стоит отметить как позитив. Прямых упоминаний участия в архитектурных решениях/RFC или менторства нет — недостаточно данных в JD, стоит уточнить на собеседовании, а не выдумывать позитивный вайб. Формат "гибрид или удалённо" без уточнения конкретной политики (сколько дней в офисе при гибриде) — частично конкретно, стоит уточнить у рекрутера при отклике.
|
||
|
||
## G) Posting Legitimacy
|
||
|
||
**Assessment:** Proceed with Caution
|
||
|
||
| Сигнал | Наблюдение | Вес |
|
||
|---|---|---|
|
||
| Свежесть / Apply-кнопка | `check-liveness.mjs` вернул "uncertain — content present but no visible apply control found"; WebFetch-извлечение отдельно отметило: "Vacancy is archived; similar positions available" | Concerning |
|
||
| Качество описания | Конкретный технический стек (Dart async, BLoC/Cubit, Dio, Hive/Isar/SQLite, mocktail/mockito), реалистичные для Middle-уровня требования, конкретный продукт (GOOD'OK) | Positive |
|
||
| Зарплата | Не указана | Neutral |
|
||
| Company Hiring Signals | Общих сигналов о сокращениях в этой конкретной команде/продукте не найдено; общий контекст МТС — точечное сокращение штата в конце 2024, не относящееся напрямую к текущей вакансии | Neutral |
|
||
| Reposting | Не проверялось по `scan-history.tsv` (URL получен напрямую из pipeline.md) | Neutral |
|
||
| Role Market Context | Middle Flutter — типично закрываемая роль (4-8 недель); продукт GOOD'OK — зрелый, давно существующий сервис МТС, не стартап с неопределённым скоупом | Positive |
|
||
|
||
**Context Notes:** Формулировка WebFetch "vacancy is archived; similar positions available" в сочетании с "uncertain" от `check-liveness.mjs` — заметный, но не окончательный сигнал. Job.mts.ru — нестандартный для парсеров корпоративный ATS, и оба независимых сигнала могли не распознать активный элемент отклика на JS-отрисованной странице, а не факт закрытия вакансии. Рекомендуется кандидату при отклике сначала открыть ссылку вручную в браузере и убедиться в наличии активной формы отклика.
|
||
|
||
---
|
||
|
||
## Извлечённые ключевые слова
|
||
|
||
Flutter, Dart, BLoC, Cubit, Riverpod, Service Locator, Dependency Injection, Clean Architecture, CustomPainter, AnimationController, Tween, Dio, http, interceptors, Hive, Isar, SQLite, mocktail, mockito, widget lifecycle, StatelessWidget, StatefulWidget, RenderObject, Git, кросс-платформенная разработка, iOS, Android, Firebase, App Store, GOOD'OK, гибридный формат, удалённая работа
|
||
|
||
---
|
||
|
||
## Рекомендация
|
||
|
||
**Балл 3.6/5 — ниже канонического порога 4.0/5 (AGENTS.md, Ethical Use), в диапазоне 3.5-3.9 ("нормально, но не идеально").** Согласно правилу, отклик допустим только при наличии конкретной причины и требует явного решения кандидата — не рекомендуется как приоритетный отклик, но и не входит в категорию "настоятельно не рекомендуется".
|
||
|
||
1. Сильнейшее совпадение среди всех пяти оценённых сегодня вакансий: прямое совпадение по BLoC/Clean Architecture и уникальный differentiator (единственный кандидат с завершённым циклом портирования Android → iOS → App Store review).
|
||
2. Формат работы (гибрид/удалённо) проходит по location-политике без ограничений.
|
||
3. Компенсация по рынку (даже нижняя граница Middle Flutter в Москве) с запасом покрывает таргет кандидата.
|
||
4. Разрывы: Flutter-специфичное тестирование, анимации/CustomPainter, локальные БД — не hard blockers, но потребуют честного разговора на техническом интервью.
|
||
5. Признаки возможной архивации вакансии (см. Block G) — рекомендуется проверить актуальность вручную перед вложением времени в отклик.
|
||
|
||
---
|
||
|
||
## Cover Letter Draft
|
||
|
||
> Draft generated at evaluation time. Complete via `/career-ops cover mts-goodok` to fill in angles, confirm research, and generate the PDF.
|
||
> Gaps flagged below — address them during the cover flow.
|
||
|
||
---
|
||
|
||
**Opening** *(placeholder — refine with your "why this role" angle)*
|
||
Заинтересовала позиция Middle Flutter Developer в команде МТС GOOD'OK — у меня есть завершённый цикл кросс-платформенного релиза (Android → iOS → App Store), который напрямую релевантен задачам портирования и интеграции backend-сервисов.
|
||
|
||
**Profile introduction**
|
||
Flutter/Frontend-разработчик с коммерческим опытом на Flutter (BLoC, Service Locator, Clean Architecture). С ноября 2024 года веду мобильное приложение «Здесь Аптека» и самостоятельно портировала два внутренних приложения («Здесь Сотрудник», «Здесь Чат») с Android на iOS в «Здравсервис» — аптечной сети из ~1200 точек.
|
||
|
||
**Key achievements** *(selected from cv.md — exact wording preserved)*
|
||
- **Адаптировала билды под iOS**: перепривязала токены Firebase push-уведомлений на iOS и Android для двух приложений.
|
||
- **Собрала iOS-сборки и отправила приложения на проверку в App Store.**
|
||
- **Исправила порядка 20 багов**, включая сложный кейс с замыканием реактивной переменной в глобальном классе биндинга клавиш.
|
||
- Использует **BLoC, Service Locator (DI) и чистую архитектуру (Clean Architecture)** в мобильном приложении «Здесь Аптека».
|
||
|
||
**Problems I will solve** *(placeholder — requires company research + your input)*
|
||
> To be completed: какие задачи по развитию GOOD'OK сейчас приоритетны (портирование, интеграция backend-сервисов, рефакторинг), и как вы бы к ним подключились?
|
||
|
||
**Closing**
|
||
Буду рада обсудить вакансию. На связи в будни (13:00-14:00, после 18:00) и в выходные — предлагаю сначала согласовать удобное время созвона в Telegram (@vbleroy) или VK (vk.com/vbleroy).
|
||
|
||
---
|
||
|
||
**Gaps flagged:**
|
||
- CustomPainter/анимации, локальные БД (Hive/Isar/SQLite), Flutter-специфичное тестирование (mocktail/mockito) — не подтверждены в cv.md, честно обозначить как область роста.
|
||
- Формальный уровень (Middle 3-6 лет) vs ~8 месяцев именно Flutter-опыта — компенсируется операционной зрелостью (полный цикл релиза).
|
||
- Признаки возможной архивации вакансии (см. Block G) — проверить вручную перед вложением времени в подготовку письма.
|
||
|
||
**JD keywords to mirror** *(extracted for ATS + human read)*
|
||
Flutter, Dart, BLoC, Cubit, Service Locator, Clean Architecture, Firebase, App Store, кросс-платформенная разработка
|
||
|
||
---
|
||
*Run `/career-ops cover mts-goodok` to complete angles, confirm company research, and generate the PDF.*
|