Roles · Backend Developer (Rust) · Mid-level

What a Mid-level } should know

31 core skills, 68 in total. Expectations per skill, and what changes at the next level.

This page lists what a Mid-level } is expected to know and do, skill by skill. Core skills are the ones a manager and peers assess in a review cycle; the rest count only in self-assessment. Main areas: Programming Fundamentals, Backend Development, Database Management.

31core skills
37additional skills
6skill areas
0%at Advanced or Expert
Assess myself as Mid-level Full role matrix

Core skills for a Mid-level

Grouped by area. The label on the right is the expected depth: Awareness, Working, Advanced or Expert.

Programming Fundamentals · 11

Independently applies algorithmic thinking in Rust: selects iterator-based algorithms for zero-copy processing, understands ownership model impact on algorithm design, evaluates concurrent algorithm patterns with atomics and channels. Analyzes complexity of data processing in systems-level Rust code.

Independently applies async programming in Rust: tokio/async-std runtime, Future composition with async/await, pinning and lifetime management in async contexts. Understands trade-offs between sync and async Rust, task spawning vs structured concurrency.

Independently applies code quality practices in Rust development. Writes clean code with clear ownership semantics, proper error types, and ergonomic APIs. Understands trade-offs between generics complexity and API usability. Reviews code for unsafe usage, lifetime correctness, and trait design clarity.

Data Structures Working

Independently selects appropriate data structures in Rust: Vec vs VecDeque for sequential data, HashMap vs BTreeMap for keyed lookups, Arc<Mutex> vs channels for shared state. Understands trade-offs between ownership patterns and data structure borrowing semantics.

Design Patterns Working

Independently applies design patterns for Rust: trait-based strategy and visitor patterns, builder for complex struct construction, newtype pattern for type safety, state machine pattern with enums. Explains Rust-specific pattern choices considering ownership and lifetimes.

Implements Rust generics with trait bounds: writes generic functions and structs with where clauses and multiple trait bounds. Understands monomorphization and its impact on binary size vs runtime performance. Applies lifetime parameters in generic contexts ('a), combines generics with trait objects (dyn Trait) when dynamic dispatch is needed. Uses PhantomData for zero-cost type-level markers.

Applies Rust ownership model effectively: understands move semantics, borrowing rules, and lifetime annotations. Uses Box, Rc, Arc appropriately for heap allocation patterns. Handles interior mutability with RefCell and Mutex. Understands stack vs heap allocation trade-offs and when to use references vs owned values.

Independently uses DHAT, heaptrack, and Valgrind/Massif to profile Rust application memory. Understands how ownership patterns and borrow checker semantics affect allocation behavior and chooses profiling strategies accordingly.

Multithreading Working

Independently applies multithreading in Rust: Send/Sync trait system for thread safety guarantees, Arc<Mutex> for shared state, tokio runtime for async concurrency, crossbeam for lock-free data structures. Explains Rust ownership model advantages for concurrent code in review.

Independently applies SOLID principles in Rust: trait-based polymorphism instead of inheritance, single responsibility in module/crate design, dependency inversion through trait objects and generics. Understands Rust-specific OOP trade-offs — composition over inheritance, trait coherence rules, zero-cost abstractions.

Independently applies Rust's type system for backend services — leveraging ownership and borrowing for memory safety, using enums with associated data for state machines, and applying trait bounds for generic service abstractions. Understands trade-offs between dynamic dispatch and monomorphization. Explains lifetime annotations and type-level programming to colleagues.

Backend Development · 5

Apache Kafka Working

Independently implements tasks with Apache Kafka in actix-web/axum. Understands internals and optimizes performance. Writes tests with cargo test.

Independently implements tasks with caching strategies in actix-web/axum. Understands internals and optimizes performance. Writes tests with cargo test.

Works with message brokers in Rust: implements consumer groups through rdkafka with offset management, uses NATS through async-nats for lightweight messaging, applies tokio channels for internal message passing. Handles backpressure through bounded channels and flow control.

Redis Working

Independently implements tasks with Redis in actix-web/axum. Understands internals and optimizes performance. Writes tests with cargo test.

Independently implements tasks with Rust Web Frameworks in actix-web/axum. Understands internals and optimizes performance. Writes tests with cargo test.

Database Management · 7

Optimizes connection pooling in Rust: configures sqlx pool with connection lifecycle management, implements health checking through deadpool Manager trait, applies connection recycle policies. Monitors pool utilization through tracing spans and custom metrics.

Independently designs schemas and optimizes queries with data modeling and schema design. Understands indexing and query execution plans. Uses diesel/sea-orm effectively.

Independently designs schemas and optimizes queries with database indexing. Understands indexing and query execution plans. Uses diesel/sea-orm effectively.

Independently designs schemas and optimizes queries with database migrations. Understands indexing and query execution plans. Uses diesel/sea-orm effectively.

Implements sharding in Rust: creates shard-aware connection pool manager, implements consistent hashing with jump hash or rendezvous hashing, handles cross-shard queries through async scatter-gather with tokio. Uses Rust type system for compile-time shard routing safety.

PostgreSQL Working

Independently designs schemas and optimizes queries with PostgreSQL. Understands indexing and query execution plans. Uses diesel/sea-orm effectively.

Independently designs schemas and optimizes queries with query optimization. Understands indexing and query execution plans. Uses diesel/sea-orm effectively.

API & Integration · 6

Develops comprehensive API documentation for Rust services: OpenAPI 3.0 through utoipa with examples, authentication description (SecurityScheme), grouping by tags. Configures automated documentation generation in CI and publishing through Swagger UI/Redoc.

Implements API versioning in Rust services through Axum middleware or Actix-web guards, supporting multiple versions simultaneously. Applies serde with #[serde(default)] and #[serde(skip_serializing_if)] for backward-compatible JSON schema evolution.

Develops gRPC services in Rust with tonic: implements streaming RPC with tokio-stream, configures Tower middleware for interceptors, uses tonic-health for health checking. Applies Rust type system for compile-time guarantees of correct gRPC interactions.

Develops gRPC services on tonic with server/client streaming, interceptors for authentication and request metadata. Configures tonic-build for code generation, implements error mapping through tonic::Status and connects reflection service for grpcurl.

Implements rate limiting in Rust services: creates custom Tower layer for per-key rate limiting, uses governor crate for flexible rate limiting algorithms, implements distributed limiting through Redis with fred/deadpool-redis. Optimizes through atomic operations for lock-free counting.

REST API Design Working

Develops REST API on Axum/Actix-web with middleware layers (tower layers), validation through validator crate and structured error responses. Implements pagination, filtering and HATEOAS links with type-safe response structures.

Cloud & Infrastructure · 1

Works with network protocols in Rust services: TLS through rustls/native-tls, HTTP/2 through hyper, WebSocket through tokio-tungstenite. Configures connection pooling, timeouts and retry logic in reqwest/hyper clients considering backpressure.

Architecture & System Design · 1

CQRS Working

Implements CQRS in Rust projects: creates separate command and query modules with typed handlers, uses sqlx/SeaORM for different read/write models, applies tokio channels for event propagation. Ensures compile-time guarantees through generic constraints on command/query types.

Additional skills

Not assessed by the team, but part of the self-assessment and the development plan.

AWSChatGPT / ClaudeClean ArchitectureCode ReviewCPU ProfilingCursor IDEDockerDocumentation as CodeE2E TestingELK StackEvent-Driven ArchitectureGit AdvancedGitHub Actions / GitLab CIGitHub CopilotGraphQL DesignIntegration TestingJWT / OAuth2 / OIDCKubernetes CoreLatency OptimizationMemory ProfilingOpenTelemetryOWASP & Application SecurityPerformance BudgetsPrometheus & GrafanaPrompt Engineering for CodeProperty-Based TestingPython Web FrameworksSecrets ManagementSecure Coding PracticesSLI / SLO / SLAStructured LoggingSystem Design FundamentalsTDD & BDDTerraformThroughput OptimizationUnit TestingWebSocket API Design

What changes at Senior

68 skills get a higher expectation or become core when moving from Mid-level to Senior. The biggest jumps first.

See the Senior page →
Run this with your whole team
Self-assessment plus manager and peer reviews against the same matrix, gap analysis and next-level readiness for every engineer. Team Pro is free for 14 days; individual tools stay free forever.
Start a team trial (14 days free) Send to my manager

} in the open competency matrix: 68 skills across 5 levels. The matrix is free for individuals and stays free.