Files
career-ops-vbleroy/reports/037-mts-goodok-2026-07-07.md
redlineoandClaude Sonnet 5 6d3b25db44
Release Please / release-please (push) Failing after 15s
CodeQL Analysis / Analyze (go) (push) Failing after 2m30s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 2m50s
Fix person/gender agreement errors in resumes and cover letters
Correct stray 3rd-person/masculine verb forms describing the candidate
(should be 1st person feminine) in output CVs and cover-letter drafts,
and regenerate the PDF snapshots that still carried the old text.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 11:20:30 +03:00

183 lines
26 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.
# Оценка: МТС — 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-14.pdf (обновлён 2026-07-15 — исправлено согласование рода/лица в Summary)
**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.*