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
Responsibility: Building CRUD functionality in Laravel/Symfony. Writing migrations and Eloquent/Doctrine models. Writing feature tests. Fixing bugs. Working with Blade/Twig templates.
Key skills:
Middle
2-5 years
Responsibility: Designing REST APIs. Working with queues (Laravel Queue/Symfony Messenger). Optimizing N+1 queries. Setting up caching. Integrating with external APIs. Code review.
Key skills:
Senior
5-8 years
Responsibility: Application architecture design (DDD, Hexagonal). Performance optimization (OPcache, Swoole/RoadRunner). Migration to PHP 8.3+. Event-driven system design.
Key skills:
Lead / Staff
7-12 years
Responsibility: Microservice architecture on PHP. Coding standards. Legacy code modernization strategy. Framework selection. Coordinating backend and frontend.
Key skills:
Principal
10+ years
Responsibility: Technology strategy: PHP vs other languages. Modernizing enterprise applications. Scalable system architecture. Participating in PHP community.
Key skills:
Gap analysis: skills to develop
To reach the next level you'll need to develop:
Develops producers and consumers. Understands partitions, consumer groups, offsets. Handles errors: retry, dead letter queue. Uses Avro/Protobuf for serialization. Configures delivery guarantees (at-least-once, exactly-once).
Solves connection management in PHP: configures PgBouncer/ProxySQL as external connection pooler for PHP-FPM, optimizes persistent connections considering FPM lifecycle. Monitors connection count via database status commands and configures wait_timeout.
Implements CQRS in PHP projects: uses Symfony Messenger or Ecotone for command/query bus, creates separate Doctrine read models (QueryBuilder + DTO) from write models (Entity + Repository). Configures event handlers for read model synchronization.
Independently implements Elasticsearch / OpenSearch tasks. Understands internals and optimizes performance. Writes tests.
Designs efficient schemas: relay-style pagination, input types, unions/interfaces for polymorphism. Solves N+1 via DataLoader. Implements subscriptions for real-time. Configures query complexity limits.
Integrates PHP applications with gRPC services: generates PHP clients from .proto via protoc, configures channel credentials for TLS, handles errors through Status codes. Uses Spiral/RoadRunner for implementing gRPC servers in PHP without FPM limitations.
Designs normalized schemas for business domains. Optimizes queries via EXPLAIN and slow query log profiling. Uses MySQL specifics: partitioning, full-text search, JSON columns. Configures master-slave replication for read scaling.
Independently implements tasks with PHP Frameworks. Understands internals and optimizes performance. Writes tests.
Uses PostgreSQL features: JSONB for semi-structured data, CTEs for complex queries, window functions for analytics. Works with GIN/GiST indexes. Configures pg_stat_statements for monitoring. Applies LISTEN/NOTIFY for real-time events.
Designs exchange topology: fanout for broadcast, topic for routing, headers for complex rules. Configures dead letter queues and retry mechanisms. Ensures idempotent message processing.
Implements rate limiting in PHP projects: configures custom RateLimiter in Laravel with per-user and per-IP strategies, uses Symfony RateLimiter component with token bucket and sliding window. Applies Redis for distributed rate limiting across FPM processes.
Applies different strategies: cache-aside, write-through, write-behind. Uses Redis for queues (lists), rate limiting (sorted sets), pub/sub. Designs keys with namespaces. Handles cache stampede.
Designs APIs with pagination, filtering, sorting, and partial responses. Implements HATEOAS links. Versions APIs. Applies rate limiting and throttling. Documents via OpenAPI/Swagger.
Independently implements Task Queue tasks. Understands internals and optimizes performance. Writes tests.
Analyzes algorithmic complexity of PHP code and SQL queries. Optimizes collection processing — replaces nested loops with hash tables. Applies binary search, greedy algorithms in business logic. Profiles via Xdebug.
Designs async flows: priority queues, delayed tasks, retry logic. Works with message brokers for inter-service communication. Handles errors and dead letter queues. Uses Fibers for concurrent I/O.
Generates OpenAPI specification from code automatically. Creates examples for each scenario: success, validation errors, 404, 500. Versions documentation. Adds authentication section with examples.
Analyzes execution plans via EXPLAIN ANALYZE. Creates composite indexes considering selectivity and column order. Uses covering indexes for optimizing frequent queries. Monitors unused indexes and their impact on write speed.
Configures static analysis at high strictness level. Refactors legacy code: extracts methods, simplifies conditions, eliminates god classes. Writes self-documenting code. Conducts peer code reviews.
Writes safe migrations for PHP projects: adding columns with defaults, indexes without locking, separating destructive changes into phases. Manages seed data. Ensures rollback capability for each migration. Tests migrations on production data copies.
Optimizes SQL queries in PHP applications: eliminates N+1 via eager loading, rewrites subqueries into JOINs, uses batch operations. Analyzes slow query log. Applies query builder and raw SQL when ORM generates suboptimal queries.
Configures load balancing (L4 vs L7), reverse proxy, SSL termination. Understands CDN architecture. Diagnoses latency issues. Works with WebSockets and SSE for real-time.
Works with messaging in PHP: uses Symfony Messenger with RabbitMQ/Redis transport, configures Laravel Horizon for queue monitoring, applies routing by message type. Handles failed jobs through retry and dead letter queues, configures priority queues.
Applies patterns deliberately: Observer for events, Decorator for extending functionality, Chain of Responsibility for middleware. Refactors code using appropriate patterns. Understands anti-patterns.
Applies SOLID in practice: extracts interfaces, uses composition over inheritance, follows LSP. Designs class hierarchies for business domains. Writes code with low coupling and high cohesion.
Designs data schemas for business domains: normalization to 3NF, denormalization for performance, polymorphic relationships. Models soft deletes, record versioning, audit logs. Chooses between EAV and JSON columns for flexible attributes.
Implements versioning: version-based routing, transformers for different response formats, deprecation headers. Defines breaking vs non-breaking changes. Migrates clients between versions.
Implements multi-level caching: OPcache for bytecode, APCu for local data, Redis for shared cache. Designs invalidation strategies: TTL, event-based, tag-based. Measures hit/miss ratio.
Chooses structures for the task: SplPriorityQueue for queues, SplFixedArray for numeric data, generators for streaming. Understands PHP array internals as hash table. Works with category trees and dependency graphs.
Automates API tests: integration tests for all endpoints, response structure assertions, auth flow testing. Creates fixtures and factories for test data. Runs in CI.
Independently applies PHP type system features — intersection types, enums with backed values, and readonly properties for immutable DTOs. Understands trade-offs between phpstan level strictness and development velocity. Applies type-safe patterns with generics in doc-blocks, typed collections, and strict return type declarations in code reviews.
Independently designs transaction management strategies in PHP applications using PDO, Doctrine, or Eloquent ORM. Implements proper transaction scoping for complex business operations. Handles deadlock detection and retry logic, manages savepoints, and optimizes transaction duration to reduce lock contention.
Works with sharding in PHP: implements multi-tenant database routing in Laravel via database resolver, configures Doctrine DBAL with multiple connections, applies shard selection middleware. Uses ProxySQL for transparent routing at DB level.