Select your current position

Pick a role and level — we'll show the growth path, skills and gap analysis.

Development path

Junior

0-2 years

Current

Responsibility: Выполнение задач под руководством старших коллег. Изучение кодовой базы, стандартов и процессов команды. Написание кода по спецификациям, исправление простых багов, написание тестов.

Key skills:

Apache Kafka Need
gRPC & Protocol Buffers Need
PostgreSQL Need
Redis Need
REST API Design Need
Scala Frameworks Need
Algorithms & Complexity Need
Async Programming Need
Generics & Parametric Polymorphism Need
API Documentation Need
Immutability & Persistent Data Structures Need
Database Indexing Need
Code Quality & Refactoring Need
Database Migrations Need
Multithreading Need
Monads & Functors Need
Query Optimization Need
Functional Programming Principles Need
Design Patterns Need
OOP & SOLID Principles Need
Data Modeling & Schema Design Need
API Versioning Strategies Need
Caching Strategies Need
Data Structures Need
Type Safety & Type Systems Need
Transactions & Concurrency Need

Middle

2-5 years

Next

Responsibility: Самостоятельная разработка фич от декомпозиции до деплоя. Участие в code review. Оптимизация производительности. Менторинг junior-разработчиков. Участие в архитектурных обсуждениях.

Key skills:

Apache Kafka Need
Connection Pooling Need
CQRS Need
gRPC & Protocol Buffers Need
gRPC & Protocol Buffers Need
PostgreSQL Need
Rate Limiting & Throttling Need
Redis Need
REST API Design Need
Scala Frameworks Need
Algorithms & Complexity Need
Async Programming Need
Generics & Parametric Polymorphism Need
API Documentation Need
Immutability & Persistent Data Structures Need
Database Indexing Need
Code Quality & Refactoring Need
Database Migrations Need
Multithreading Need
Monads & Functors Need
Query Optimization Need
Functional Programming Principles Need
Message Broker Patterns Need
Design Patterns Need
OOP & SOLID Principles Need
Data Modeling & Schema Design Need
API Versioning Strategies Need
Caching Strategies Need
Data Structures Need
Type Safety & Type Systems Need
Transactions & Concurrency Need
Database Sharding Need

Senior

5-8 years

Responsibility: Проектирование архитектуры компонентов и сервисов. Решение сложных технических проблем. Ведение технического долга. Code review как gatekeeper качества. Менторинг middle-разработчиков. Выбор технологий для новых задач.

Key skills:

Apache Kafka Need
AWS Need
Code Review Need
Connection Pooling Need
CQRS Need
Docker Need
Git Advanced Need
GitHub Actions / GitLab CI Need
GitHub Copilot Need
gRPC & Protocol Buffers Need
gRPC & Protocol Buffers Need
High Load Architecture Need
JWT / OAuth2 / OIDC Need
Kubernetes Core Need
OpenTelemetry Need
OWASP & Application Security Need
PostgreSQL Need
Prometheus & Grafana Need
Property-Based Testing Need
Rate Limiting & Throttling Need
Redis Need
REST API Design Need
Scala Frameworks Need
Stream Processing Need
Unit Testing Need
Algorithms & Complexity Need
Async Programming Need
Generics & Parametric Polymorphism Need
API Documentation Need
Immutability & Persistent Data Structures Need
Database Indexing Need
Integration Testing Need
Code Quality & Refactoring Need
Database Migrations Need
Multithreading Need
Monads & Functors Need
Query Optimization Need
System Design Fundamentals Need
Functional Programming Principles Need
Message Broker Patterns Need
Design Patterns Need
Secure Coding Practices Need
OOP & SOLID Principles Need
Data Modeling & Schema Design Need
API Versioning Strategies Need
Caching Strategies Need
Structured Logging Need
Data Structures Need
Type Safety & Type Systems Need
Transactions & Concurrency Need
Database Sharding Need

Lead / Staff

7-12 years

Responsibility: Техническое лидерство команды или направления. Проектирование системной архитектуры. Координация с другими командами. Формирование стандартов и best practices. Участие в найме. Планирование технического roadmap.

Key skills:

Apache Kafka Need
AWS Need
Code Review Need
Connection Pooling Need
CQRS Need
Docker Need
Git Advanced Need
GitHub Actions / GitLab CI Need
GitHub Copilot Need
gRPC & Protocol Buffers Need
gRPC & Protocol Buffers Need
High Load Architecture Need
JWT / OAuth2 / OIDC Need
Kubernetes Core Need
OpenTelemetry Need
OWASP & Application Security Need
PostgreSQL Need
Prometheus & Grafana Need
Property-Based Testing Need
Rate Limiting & Throttling Need
Redis Need
REST API Design Need
Scala Frameworks Need
Stream Processing Need
Unit Testing Need
Algorithms & Complexity Need
Async Programming Need
Generics & Parametric Polymorphism Need
API Documentation Need
Immutability & Persistent Data Structures Need
Database Indexing Need
Integration Testing Need
Code Quality & Refactoring Need
Database Migrations Need
Multithreading Need
Monads & Functors Need
Query Optimization Need
System Design Fundamentals Need
Functional Programming Principles Need
Message Broker Patterns Need
Design Patterns Need
Secure Coding Practices Need
OOP & SOLID Principles Need
Data Modeling & Schema Design Need
API Versioning Strategies Need
Caching Strategies Need
Structured Logging Need
Data Structures Need
Type Safety & Type Systems Need
Transactions & Concurrency Need
Database Sharding Need

Principal

10+ years

Responsibility: Техническая стратегия на уровне компании или домена. Кросс-организационное влияние. Решение системных проблем бизнеса через технологии. Менторинг lead-инженеров. Публичное представление компании.

Key skills:

Apache Kafka Need
AWS Need
Code Review Need
Docker Need
Git Advanced Need
GitHub Actions / GitLab CI Need
GitHub Copilot Need
gRPC & Protocol Buffers Need
High Load Architecture Need
JWT / OAuth2 / OIDC Need
Kubernetes Core Need
OpenTelemetry Need
OWASP & Application Security Need
PostgreSQL Need
Prometheus & Grafana Need
Property-Based Testing Need
Redis Need
REST API Design Need
Scala Frameworks Need
Stream Processing Need
Unit Testing Need
Algorithms & Complexity Need
Async Programming Need
Generics & Parametric Polymorphism Need
API Documentation Need
Immutability & Persistent Data Structures Need
Database Indexing Need
Integration Testing Need
Code Quality & Refactoring Need
Database Migrations Need
Multithreading Need
Monads & Functors Need
Query Optimization Need
System Design Fundamentals Need
Functional Programming Principles Need
Design Patterns Need
Secure Coding Practices Need
OOP & SOLID Principles Need
Data Modeling & Schema Design Need
API Versioning Strategies Need
Caching Strategies Need
Structured Logging Need
Data Structures Need
Type Safety & Type Systems Need
Transactions & Concurrency Need

Gap analysis: skills to develop

To reach the next level you'll need to develop:

Apache Kafka

Independently implements tasks with Apache Kafka in Play/http4s. Understands internals and optimizes performance. Writes tests with ScalaTest/MUnit.

Connection Pooling

Optimizes connection pooling in Scala: configures Slick with custom HikariCP configuration, uses doobie with HikariTransactor for functional database access, implements connection lifecycle through cats-effect Resource. Monitors pool through JMX and Kamon.

CQRS

Implements CQRS in Scala: uses Akka Typed Persistence for event sourced aggregates, configures Akka Projection for read models, applies ZIO + Tapir for typed command/query API. Implements domain events with sealed trait hierarchies for exhaustive matching.

gRPC & Protocol Buffers

Implements gRPC services in Scala through ScalaPB and Akka gRPC: unary and server-streaming RPC, error handling through Status, deadline propagation. Designs Protobuf schemas with evolution in mind, uses oneof for polymorphism and configures interceptors for logging and authentication.

gRPC & Protocol Buffers

Develops gRPC services in Scala: uses Akka gRPC or ZIO gRPC for implementing services with streaming, integrates with Akka Streams for backpressure-aware processing. Configures ScalaPB transformations for customizing generated code.

PostgreSQL

Independently designs schemas and optimizes queries with PostgreSQL. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

Rate Limiting & Throttling

Implements rate limiting in Scala services: uses Akka Streams throttle for flow control, configures ZIO with Semaphore for concurrent limiting, implements distributed limiting through Redis. Applies Play Framework filters for per-request rate limiting.

Redis

Independently implements tasks with Redis in Play/http4s. Understands internals and optimizes performance. Writes tests with ScalaTest/MUnit.

REST API Design

Designs REST API in Scala services following best practices: HATEOAS links, pagination, filtering through query parameters. Implements content negotiation, proper error handling through ADT and middleware for logging in Play Framework or Akka HTTP Directives.

Scala Frameworks

Independently implements tasks with Scala Frameworks in Play/http4s. Understands internals and optimizes performance. Writes tests with ScalaTest/MUnit.

Algorithms & Complexity

Independently applies algorithmic thinking in Scala: selects functional collection algorithms for data transformation, understands lazy evaluation impact on memory, evaluates parallel collection performance trade-offs. Analyzes complexity of Spark operations and distributed computation patterns.

Async Programming

Independently applies async programming in Scala: ZIO/Cats Effect fibers, Future composition, effect system-based concurrency. Understands trade-offs between Future-based and effect system-based async patterns in Scala applications.

Generics & Parametric Polymorphism

Applies Scala's advanced type parameter system: upper/lower type bounds ([A <: B], [A >: B]), variance annotations (covariant +A, contravariant -A). Implements type classes via implicit parameters and context bounds ([T: Ordering]). Uses existential types and type members for abstraction, understands type inference limitations in complex generic chains.

API Documentation

Creates complete API documentation for Scala services through Tapir with OpenAPI specification auto-generation: describes all endpoints, error schemas, examples. Documents Protobuf contracts, writes ADR (Architecture Decision Records) for key architectural decisions.

Immutability & Persistent Data Structures

Independently applies immutability patterns in Scala services using persistent collections, lenses for nested updates, and algebraic data types for state modeling. Writes transformation pipelines with immutable data flow using for-comprehensions, monadic composition, and functional effect systems. Understands performance trade-offs between immutable and mutable structures for hot paths and chooses appropriate strategies.

Database Indexing

Independently designs schemas and optimizes queries with Database Indexing. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

Code Quality & Refactoring

Independently applies code quality practices in Scala development. Writes clean functional code with appropriate use of effect systems and type classes. Understands trade-offs between expressive type-level programming and code readability. Reviews code for proper error handling, implicits scope, and build dependency management.

Database Migrations

Independently designs schemas and optimizes queries with Database Migrations. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

Multithreading

Independently applies multithreading in Scala: Akka actors for message-passing concurrency, Cats Effect/ZIO fibers for lightweight concurrency, Future composition for async workflows. Explains trade-offs between actor model and effect-based concurrency in code review.

Monads & Functors

Independently uses monads (Option, Either, Future, IO) for effect management in Scala applications. Understands trade-offs between Cats Effect and ZIO for referential transparency. Explains functor laws and for-comprehension desugaring to colleagues in code reviews.

Query Optimization

Independently designs schemas and optimizes queries with Query Optimization. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

Functional Programming Principles

Confidently uses Scala FP idioms: case classes for immutable data, Option/Either for error handling, pattern matching, and for-comprehensions. Understands the trade-offs between OOP and FP styles in Scala. Applies FP principles in code review and explains monadic composition to colleagues.

Message Broker Patterns

Works with messaging in Scala ecosystem: uses Alpakka Kafka with Akka Streams for reactive processing, configures consumer groups with committable sources, implements at-least-once delivery through offset committing. Applies fs2-kafka for functional stream processing with cats-effect.

Design Patterns

Independently applies design patterns for Scala: type class pattern for ad-hoc polymorphism, cake pattern for dependency injection, monad transformers for composable effects, sealed trait hierarchies for algebraic data types. Explains FP-oriented pattern alternatives.

OOP & SOLID Principles

Independently applies OOP/SOLID in Scala: proper trait composition and mixin linearization, case class design for immutable data, sealed trait hierarchies for algebraic data types. Understands trade-offs between OOP and FP approaches in Scala — when to use classes vs type classes, objects vs functions.

Data Modeling & Schema Design

Independently designs schemas and optimizes queries with Data Modeling and Schema Design. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

API Versioning Strategies

Designs and implements API versioning strategies using content negotiation, custom media types, or path-based versioning in Scala microservices. Writes migration guides and automated contract tests for version transitions.

Caching Strategies

Independently implements tasks with Caching Strategies in Play/http4s. Understands internals and optimizes performance. Writes tests with ScalaTest/MUnit.

Data Structures

Independently selects appropriate data structures in Scala: immutable List vs Vector for sequential data, LazyList for deferred evaluation, case classes for domain modeling. Understands trade-offs between Scala's persistent data structures and Java interop collections.

Type Safety & Type Systems

Independently applies Scala's type system for backend services — using sealed traits for ADTs, type class patterns with implicits/givens, and higher-kinded types for effect abstractions. Understands trade-offs between type-level encoding complexity and runtime safety. Explains variance annotations and type inference to colleagues.

Transactions & Concurrency

Independently designs schemas and optimizes queries with Transactions and Concurrency. Understands indexing and query execution plans. Uses Slick/Doobie effectively.

Database Sharding

Works with sharding in Scala: implements database routing through custom Slick DatabaseProvider, uses Akka Cluster Sharding for distributed entity management. Applies functional programming patterns (Reader monad) for shard-aware data access.