Матрица компетенций: iOS

Hard skills

Skill Passport — iOS
Swift и базовая модель языкаОбосновывает выбор между struct/class, protocol с associated type, generic и type erasure для конкретной границы модуля. Диагностирует утечку или ошибку владения с Instruments/Xcode Memory Graph и объясняет причинную цепочку, а не только применяет шаблон `[weak self]`.
UI: SwiftUI и UIKitОбосновывает архитектуру сложного UI: декларативный SwiftUI, UIKit или смешанный слой с учётом жизненного цикла, доступности и производительности списка. Диагностирует конкретную проблему лишних перерисовок/Auto Layout или некорректной навигации и устраняет её с измеримым эффектом.
Жизненный цикл приложения и iOS-платформаПроектирует поведение приложения при холодном старте, deep link, push и восстановлении состояния с явным разбором конфликтов навигации. Обосновывает использование background task, notification или server-driven подхода по ограничениям времени выполнения, батареи и надёжности доставки.
Сеть и работа с APIОбосновывает контракт и стратегию клиента для конкретного API: кэширование, retry, отмена, версионирование и обработка устаревших данных. Сравнивает REST и альтернативный подход (например, GraphQL) по форме данных, сложности клиента и кэшированию; проектирует наблюдаемые ошибки без утечки чувствительных данных.
Хранение данных и кешированиеОбосновывает offline-first/online-first стратегию для конкретного сценария, включая конфликт локальных и серверных изменений. Проектирует миграцию локальной схемы или безопасную инвалидацию кеша и явно называет компромисс между актуальностью, скоростью и объёмом хранения.
Конкурентность и асинхронностьОбосновывает границы изоляции состояния в `actor`/`@MainActor` для конкретной фичи; диагностирует data race или некорректную отмену. Сравнивает structured concurrency и устаревший callback/GCD-подход для миграции существующего кода, называя риски каждого.
Архитектура, зависимости и качество кодаОбосновывает выбор архитектурного подхода (например, MVVM, TCA, Clean Architecture) под размер продукта и команды, не вводя слои «для красоты». Проектирует границы модулей и стратегию тестирования, локализует flaky UI-тест по реальной причине — ожиданию, данным или состоянию приложения.
Сборка, релиз, наблюдаемость и качество приложенияОбосновывает rollout и мониторинг релиза: какие crash-free, latency и продуктовые сигналы отслеживать, когда останавливать распространение. Анализирует crash/метрику производительности до конкретной фичи или устройства и выбирает между hotfix, feature flag и откатом с учётом влияния на пользователей.
Общее
Язык и основыГлубокое владение Swift/Objective‑C, применение VIPER/Clean Architecture, понимание конкарренси и производительности
DevOpsУправляет релизами, занимается распределением сертификатов и provisioning profile, внедряет автоматический деплой
UX/UIОптимизирует UX, проводит A/B тесты, внедряет подход «design for all»
Качество и Безопасность
ТестированиеСоздание тестовой архитектуры, внедрение автоматизированных прогонов (CI/CD)
Разработка ПО
Фреймворки и библиотекиSwiftUI, Combine, ARKit, CoreML; CI/CD; модульные архитектуры

Soft skills

Общее
Бизнес и коммуникацииКонсультирует бизнес по мобильным решениям, участвует в планировании
ЛидерствоРуководит техническими решениями, обучает команду
Skill Passport — Автономность и глубина
Автономность и масштаб задачОписывает случай самостоятельного ведения задачи масштаба, выходящего за рамки одной фичи — например, сам декомпозировал крупную задачу на подзадачи (для себя или для команды), отвечал за результат на уровне модуля/сервиса/продукта, а не отдельного тикета. Явно называет, какие решения принимал сам, а не получал в готовом виде сверху.
Глубина технических решенийЯвно называет trade-off выбранного решения — не только почему выбрал, но и что теряется по сравнению с отклонёнными вариантами, и в каком случае выбрал бы иначе. Может честно указать на ограничение собственного решения, а не подавать его как безальтернативно правильное.

Типовые задачи

Практические задачи для собеседования — доступны после регистрации

Зарегистрироваться