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:
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.
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.
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.
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.
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.