Выберите текущую позицию
Укажите роль и уровень — система покажет путь развития, навыки и gap-анализ.
Путь развития
Junior
0-2 года
Ответственность: Выполнение задач под руководством старших коллег. Изучение кодовой базы, стандартов и процессов команды. Написание кода по спецификациям, исправление простых багов, написание тестов.
Ключевые навыки:
Middle
2-5 лет
Ответственность: Самостоятельная разработка фич от декомпозиции до деплоя. Участие в code review. Оптимизация производительности. Менторинг junior-разработчиков. Участие в архитектурных обсуждениях.
Ключевые навыки:
- Самостоятельно реализовал 3+ проекта
- Провёл успешные код-ревью
- Участвовал в разрешении production инцидентов
Senior
5-8 лет
Ответственность: Проектирование архитектуры компонентов и сервисов. Решение сложных технических проблем. Ведение технического долга. Code review как gatekeeper качества. Менторинг middle-разработчиков. Выбор технологий для новых задач.
Ключевые навыки:
- Самостоятельно реализовал 3+ проекта
- Провёл успешные код-ревью
- Участвовал в разрешении production инцидентов
Lead / Staff
7-12 лет
Ответственность: Техническое лидерство команды или направления. Проектирование системной архитектуры. Координация с другими командами. Формирование стандартов и best practices. Участие в найме. Планирование технического roadmap.
Ключевые навыки:
- Самостоятельно реализовал 3+ проекта
- Провёл успешные код-ревью
- Участвовал в разрешении production инцидентов
Principal
10+ лет
Ответственность: Техническая стратегия на уровне компании или домена. Кросс-организационное влияние. Решение системных проблем бизнеса через технологии. Менторинг lead-инженеров. Публичное представление компании.
Ключевые навыки:
- Самостоятельно реализовал 3+ проекта
- Провёл успешные код-ревью
- Участвовал в разрешении production инцидентов
Gap-анализ: навыки для развития
Для перехода на следующий уровень необходимо развить:
Самостоятельно реализует задачи с Apache Kafka в Play/http4s. Понимает внутреннее устройство и оптимизирует производительность. Пишет тесты с помощью ScalaTest/MUnit.
Оптимизирует connection pooling в Scala: настраивает Slick с custom HikariCP configuration, использует doobie с HikariTransactor для functional database access, реализует connection lifecycle через cats-effect Resource. Мониторит pool через JMX и Kamon.
Реализует CQRS в Scala: использует Akka Typed Persistence для event sourced aggregates, настраивает Akka Projection для read models, применяет ZIO + Tapir для typed command/query API. Реализует domain events с sealed trait hierarchies для exhaustive matching.
Реализует gRPC-сервисы на Scala через ScalaPB и Akka gRPC: unary и server-streaming RPC, обработка ошибок через Status, deadline propagation. Проектирует Protobuf-схемы с учётом эволюции, использует oneof для полиморфизма и настраивает interceptors для логирования и аутентификации.
Разрабатывает gRPC-сервисы на Scala: использует Akka gRPC или ZIO gRPC для реализации сервисов с streaming, интегрирует с Akka Streams для backpressure-aware обработки. Настраивает ScalaPB transformations для кастомизации сгенерированного кода.
Самостоятельно проектирует схемы и оптимизирует запросы с PostgreSQL. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Реализует rate limiting в Scala-сервисах: использует Akka Streams throttle для flow control, настраивает ZIO с Semaphore для concurrent limiting, реализует distributed limiting через Redis. Применяет Play Framework filters для per-request rate limiting.
Самостоятельно реализует задачи с Redis в Play/http4s. Понимает внутреннее устройство и оптимизирует производительность. Пишет тесты с помощью ScalaTest/MUnit.
Проектирует REST API в Scala-сервисах с соблюдением best practices: HATEOAS-ссылки, пагинация, фильтрация через query-параметры. Реализует content negotiation, корректную обработку ошибок через ADT и middleware для логирования в Play Framework или Akka HTTP Directives.
Самостоятельно реализует задачи с Scala Frameworks в Play/http4s. Понимает внутреннее устройство и оптимизирует производительность. Пишет тесты с помощью ScalaTest/MUnit.
Самостоятельно применяет алгоритмическое мышление в Scala: выбирает функциональные алгоритмы коллекций для трансформации данных, понимает влияние ленивого вычисления на память, оценивает компромиссы производительности параллельных коллекций. Анализирует сложность операций Spark и паттернов распределённых вычислений.
Самостоятельно применяет асинхронное программирование в Scala: файберы ZIO/Cats Effect, композиция Future, конкурентность на основе эффект-систем. Понимает компромиссы между async-паттернами на основе Future и эффект-систем в Scala-приложениях.
Применяет продвинутую систему type-параметров Scala: upper/lower type bounds ([A <: B], [A >: B]), аннотации вариантности (covariant +A, contravariant -A). Реализует type classes через implicit-параметры и context bounds ([T: Ordering]). Использует existential types и type members для абстракции, понимает ограничения type inference в сложных generic-цепочках.
Создаёт полную API-документацию для Scala-сервисов через Tapir с автогенерацией OpenAPI-спецификации: описание всех эндпоинтов, схем ошибок, примеров. Документирует Protobuf-контракты, пишет ADR (Architecture Decision Records) для ключевых архитектурных решений в проекте.
Самостоятельно применяет паттерны иммутабельности в Scala-сервисах с использованием персистентных коллекций, линз для вложенных обновлений и алгебраических типов данных для моделирования состояния. Пишет пайплайны трансформации с иммутабельным потоком данных через for-comprehensions, монадическую композицию и функциональные effect-системы. Понимает trade-offs производительности между иммутабельными и мутабельными структурами для hot paths.
Самостоятельно проектирует схемы и оптимизирует запросы с Индексирование БД. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Самостоятельно применяет практики качества кода в Scala-разработке. Пишет чистый функциональный код с уместным использованием эффект-систем и type classes. Понимает компромиссы между выразительным type-level программированием и читаемостью кода. Ревьюит код на правильную обработку ошибок, область видимости implicits и управление зависимостями сборки.
Самостоятельно проектирует схемы и оптимизирует запросы с Миграции БД. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Самостоятельно применяет многопоточность в Scala: акторы Akka для конкурентности на основе передачи сообщений, файберы Cats Effect/ZIO для легковесной конкурентности, композиция Future для async-воркфлоу. Обосновывает компромиссы между моделью акторов и конкурентностью на основе эффектов на code review.
Самостоятельно использует монады (Option, Either, Future, IO) для управления эффектами в Scala-приложениях. Понимает компромиссы между Cats Effect и ZIO для ссылочной прозрачности. Объясняет законы функторов и десахаризацию for-comprehension коллегам на код-ревью.
Самостоятельно проектирует схемы и оптимизирует запросы с Оптимизация запросов. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Уверенно использует ФП-идиомы Scala: case classes для иммутабельных данных, Option/Either для обработки ошибок, pattern matching и for-comprehensions. Понимает компромиссы между ООП и ФП стилями в Scala. Применяет принципы ФП в code review, объясняет коллегам монадическую композицию.
Работает с messaging в Scala-экосистеме: использует Alpakka Kafka с Akka Streams для reactive processing, настраивает consumer groups с committable sources, реализует at-least-once delivery через committing offsets. Применяет fs2-kafka для functional stream processing с cats-effect.
Самостоятельно применяет паттерны проектирования для Scala: паттерн type class для ad-hoc полиморфизма, cake pattern для внедрения зависимостей, трансформеры монад для композируемых эффектов, sealed trait иерархии для алгебраических типов данных. Обосновывает FP-ориентированные альтернативы паттернов.
Самостоятельно применяет ООП/SOLID в Scala: правильная композиция trait и линеаризация миксинов, дизайн case class для неизменяемых данных, sealed trait иерархии для алгебраических типов данных. Понимает компромиссы между ООП и ФП подходами в Scala — когда использовать классы vs type classes, объекты vs функции.
Самостоятельно проектирует схемы и оптимизирует запросы с Проектирование схем данных. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Проектирует и реализует стратегии версионирования API с использованием согласования контента, пользовательских media types или path-based версионирования в Scala-микросервисах. Пишет руководства по миграции и автоматизированные контрактные тесты для переходов между версиями.
Самостоятельно реализует задачи с Стратегии кэширования в Play/http4s. Понимает внутреннее устройство и оптимизирует производительность. Пишет тесты с помощью ScalaTest/MUnit.
Самостоятельно выбирает подходящие структуры данных в Scala: иммутабельный List vs Vector для последовательных данных, LazyList для отложенного вычисления, case classes для доменного моделирования. Понимает компромиссы между персистентными структурами данных Scala и коллекциями для Java-интеропа.
Самостоятельно применяет систему типов Scala для бэкенд-сервисов — sealed traits для ADT, паттерны type class с implicits/givens и higher-kinded types для абстракций эффектов. Понимает компромиссы между сложностью кодирования на уровне типов и безопасностью в runtime. Объясняет коллегам аннотации вариантности и вывод типов.
Самостоятельно проектирует схемы и оптимизирует запросы с Транзакции и конкурентность. Понимает индексирование и планы выполнения запросов. Использует Slick/Doobie эффективно.
Работает с шардированием в Scala: реализует database routing через custom Slick DatabaseProvider, использует Akka Cluster Sharding для distributed entity management. Применяет functional programming patterns (Reader monad) для shard-aware data access.