{
  "format": "sf-skill-matrix",
  "version": 1,
  "name": "PHP Developer Skill Matrix",
  "description": "Public example of a role-based matrix for backend engineers working with PHP.",
  "levels": [
    {
      "name": "Junior",
      "description": "Works in existing services, follows team conventions, and delivers predictable changes with guidance."
    },
    {
      "name": "Middle",
      "description": "Independently designs medium-sized changes, diagnoses incidents, and keeps delivery quality stable."
    },
    {
      "name": "Senior",
      "description": "Defines platform practices, leads architectural decisions, and scales reliability across multiple services."
    },
    {
      "name": "TechLead",
      "description": "Drives the team's technical direction, maintains solution quality, and helps engineers move toward predictable delivery."
    },
    {
      "name": "Principal",
      "description": "Defines engineering strategy for a domain or platform, connecting technical decisions to business goals and company scale."
    }
  ],
  "groups": [
    {
      "name": "PHP Language",
      "rows": [
        {
          "name": "Fundamentals and ecosystem",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write maintainable PHP 8 code",
                  "info": "Uses strict typing, interfaces, traits, and standard patterns without overengineering."
                },
                {
                  "name": "Handle exceptions correctly",
                  "info": "Does not swallow errors, wraps them with context, and distinguishes exception hierarchies."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Apply interfaces and composition",
                  "info": "Designs dependencies through interfaces, separates domain, transport, and infrastructure layers."
                },
                {
                  "name": "Refactor safely",
                  "info": "Improves code structure while preserving behavior and backward compatibility."
                },
                {
                  "name": "Use Composer and ecosystem effectively",
                  "info": "Prefers battle-tested libraries, evaluates dependencies by activity and compatibility."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Set language and codebase standards",
                  "info": "Defines PSR conventions, exception strategy, code review practices, and shared utilities."
                },
                {
                  "name": "Design shared abstractions",
                  "info": "Creates reusable components that reduce cognitive load without introducing unnecessary coupling."
                },
                {
                  "name": "Lead review of critical changes",
                  "info": "Identifies architectural risks, security issues, and compatibility violations in PRs."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Define package layout for projects",
                  "info": "Sets repository structure so the team moves consistently without ad-hoc decisions."
                },
                {
                  "name": "Resolve disputed implementation details",
                  "info": "Settles team disagreements on technical approaches through principles rather than preference."
                },
                {
                  "name": "Build a code review culture",
                  "info": "Creates an environment where reviews add value: teach rather than nitpick, reduce risk rather than slow delivery."
                },
                {
                  "name": "Control technical debt growth",
                  "info": "Tracks debt accumulation and includes paydown in the roadmap alongside new features."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Set language standards across teams",
                  "info": "Builds an engineering handbook with justified decisions that work across different contexts."
                },
                {
                  "name": "Decide which libraries enter the platform",
                  "info": "Evaluates dependencies on stability, support, security, and lock-in risk."
                },
                {
                  "name": "Build an engineering practices roadmap",
                  "info": "Plans the evolution of standards accounting for team growth, system scale, and business direction."
                },
                {
                  "name": "Influence decisions through persuasion",
                  "info": "Drives correct decisions without formal authority, through argument and trust."
                },
                {
                  "name": "Publicly represent the team's technical approaches",
                  "info": "Speaks at conferences, writes articles, contributes to open-source — builds external authority."
                }
              ]
            }
          ]
        },
        {
          "name": "Background processing",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Implement simple queue jobs",
                  "info": "Understands at-least-once semantics, writes idempotent jobs, and handles execution errors."
                },
                {
                  "name": "Understand PHP-FPM process model",
                  "info": "Knows the request lifecycle and the difference between web processes and CLI workers."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Build reliable worker processes",
                  "info": "Designs handlers with bounded concurrency, controls graceful shutdown and memory limits."
                },
                {
                  "name": "Implement retry with backoff and timeout",
                  "info": "Handles transient failures without overwhelming downstream services."
                },
                {
                  "name": "Control resource leaks in long-running processes",
                  "info": "Identifies and eliminates memory leaks and unclosed connections during review and profiling."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Design background processing for high load",
                  "info": "Chooses the right pattern — queue workers, cron, Fibers (8.1+), or async extension — based on requirements."
                },
                {
                  "name": "Analyze worker process bottlenecks",
                  "info": "Uses profiling, memory dumps, and tracing to find performance issues."
                },
                {
                  "name": "Set patterns for common team scenarios",
                  "info": "Defines which approach (Messenger, queues, cron, async) to use in each context."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set team-wide background processing rules",
                  "info": "Chooses base worker, queue, and retry patterns so the team doesn't create unstable solutions."
                },
                {
                  "name": "Review high-throughput flows",
                  "info": "Identifies risks in critical paths: memory leaks, starvation, thundering herd."
                },
                {
                  "name": "Manage delivery risks for background jobs",
                  "info": "Ensures CI covers critical processing scenarios and DLQ is monitored."
                },
                {
                  "name": "Integrate worker monitoring into the observability stack",
                  "info": "Ensures alerts exist on queue lag, execution time, and error rate for each worker."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define platform async processing standards",
                  "info": "Chooses load-limiting models across multiple services and teams."
                },
                {
                  "name": "Design worker scaling strategies",
                  "info": "Defines how to scale parallel processing without degrading adjacent systems."
                },
                {
                  "name": "Build a graceful degradation model",
                  "info": "Sets principles for graceful degradation and circuit breaking at domain level."
                },
                {
                  "name": "Identify systemic background processing risks",
                  "info": "Conducts architectural analysis for hidden race conditions and deadlock risks in integrations."
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Data layer",
      "rows": [
        {
          "name": "SQL and databases",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write correct SQL queries",
                  "info": "Uses JOINs, WHERE clauses, indexes, and parameterized queries; avoids SQL injection."
                },
                {
                  "name": "Write and apply migrations",
                  "info": "Creates up/down migrations, understands application order and reversibility of schema changes."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Optimize slow queries",
                  "info": "Reads EXPLAIN, adds indexes, eliminates N+1, rewrites subqueries as JOINs where needed."
                },
                {
                  "name": "Design schema for new features",
                  "info": "Normalizes data sensibly, considers nullable, constraints, and deletion scenarios."
                },
                {
                  "name": "Manage transactions and isolation levels",
                  "info": "Chooses the right isolation level, avoids deadlocks and long-running transactions."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Set team database standards",
                  "info": "Defines naming conventions, required indexes, nullable rules, and migration workflow."
                },
                {
                  "name": "Plan safe production migrations",
                  "info": "Applies zero-downtime patterns: expand-contract, column backfill over multiple deploys, lock-free alter."
                },
                {
                  "name": "Evaluate read/write patterns and choose strategy",
                  "info": "Decides when to use read replicas, caching, or event sourcing instead of classical CRUD."
                },
                {
                  "name": "Manage connection pool in production",
                  "info": "Configures Doctrine/PDO connection pool settings, controls max connections and health checks."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Control database delivery risks",
                  "info": "Ensures migrations are tested, reversible, and won't cause production degradation."
                },
                {
                  "name": "Synchronize migration strategy",
                  "info": "Coordinates database changes across multiple services and teams."
                },
                {
                  "name": "Set indexing policy",
                  "info": "Defines who adds indexes, how schema review works, and who owns performance regression."
                },
                {
                  "name": "Prevent dangerous schema changes",
                  "info": "Restricts or approves DROP, NOT NULL without default, full-table lock changes during peak hours."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define domain data strategy",
                  "info": "Chooses between SQL, NoSQL, and mixed storage based on load, structure, and SLOs."
                },
                {
                  "name": "Design multi-tenant and multi-region storage",
                  "info": "Plans partitioning, sharding, and geo-distribution at platform level."
                },
                {
                  "name": "Set backup, restore, and DR requirements",
                  "info": "Defines RPO/RTO, tests recovery, and builds runbooks for data incidents."
                },
                {
                  "name": "Build data capacity planning",
                  "info": "Forecasts volume growth, storage costs, and initiates architectural changes in time."
                },
                {
                  "name": "Manage data compliance requirements",
                  "info": "Ensures GDPR, retention policy, and audit trail compliance across multiple systems."
                }
              ]
            }
          ]
        },
        {
          "name": "Queues and events",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write consumers with correct ack/nack",
                  "info": "Understands at-least-once semantics, doesn't lose or duplicate messages without reason."
                },
                {
                  "name": "Implement a simple producer",
                  "info": "Publishes events with the required structure and handles send errors."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Implement idempotent consumers",
                  "info": "Handles duplicates via a deduplication key or idempotent database operations."
                },
                {
                  "name": "Design dead-letter flows",
                  "info": "Configures DLQ, lag alerts, and a reprocess procedure for broken messages."
                },
                {
                  "name": "Monitor consumer lag",
                  "info": "Sets up consumer lag monitoring, identifies and eliminates accumulation causes."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Design event-driven flows with delivery guarantees",
                  "info": "Chooses outbox, saga, or choreography based on consistency requirements."
                },
                {
                  "name": "Define event contracts",
                  "info": "Establishes event schemas, versioning strategy, and backward/forward compatibility."
                },
                {
                  "name": "Choose between sync and async integration",
                  "info": "Justifies the choice understanding tradeoffs: latency, coupling, failure isolation, observability."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set queue standards for the team",
                  "info": "Defines which broker and pattern to use in each scenario and documents decisions."
                },
                {
                  "name": "Manage queue observability",
                  "info": "Ensures lag, DLQ growth, and partition skew alerts; sets up on-call runbooks."
                },
                {
                  "name": "Manage event schema evolution",
                  "info": "Coordinates event schema changes between producer and consumer teams."
                },
                {
                  "name": "Synchronize event contracts between teams",
                  "info": "Maintains an event registry, aligns on breaking changes, and organizes contract testing."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define platform messaging strategy",
                  "info": "Chooses brokers, delivery patterns, and retention policy for the entire domain."
                },
                {
                  "name": "Design event sourcing at domain level",
                  "info": "Defines where to store the event log, how to build projections, and how to ensure replay."
                },
                {
                  "name": "Establish delivery and consistency guarantees",
                  "info": "Defines exactly-once or idempotency levels for critical business operations."
                },
                {
                  "name": "Identify systemic event-driven risks",
                  "info": "Analyzes cascade failure, ordering issues, and distributed transaction risks."
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Infrastructure and delivery",
      "rows": [
        {
          "name": "Docker and containers",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Build multi-stage Docker images",
                  "info": "Separates build and runtime stages, avoids copying unnecessary artifacts into the final image."
                },
                {
                  "name": "Work with the local environment via Docker Compose",
                  "info": "Runs dependencies (DB, queues, services) locally, understands volumes and network namespaces."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Optimize images by size and layers",
                  "info": "Orders instructions correctly for layer caching, uses .dockerignore."
                },
                {
                  "name": "Configure healthcheck and graceful shutdown",
                  "info": "Implements a /healthz endpoint, handles SIGTERM, and waits for active requests to complete."
                },
                {
                  "name": "Diagnose issues inside containers",
                  "info": "Reads logs, checks resources, inspects the filesystem, and uses exec in prod-like environments."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Set Dockerfile standards for the team",
                  "info": "Defines base images, linting rules, and a review checklist for container artifacts."
                },
                {
                  "name": "Design dev/prod environment parity",
                  "info": "Ensures local Compose and the production environment differ as little as possible."
                },
                {
                  "name": "Assess image security",
                  "info": "Runs trivy/grype, tracks CVEs in base images, enforces non-root user."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set base images for the team",
                  "info": "Selects and maintains golden images, manages their updates and team notifications."
                },
                {
                  "name": "Control container security policy",
                  "info": "Defines runtime policy: non-root, read-only filesystem, resource limits, seccomp."
                },
                {
                  "name": "Manage the dependency update process",
                  "info": "Ensures regular updates of base images and Composer dependencies with vulnerability checks."
                },
                {
                  "name": "Integrate container scanning into CI",
                  "info": "Adds automated image scanning to the pipeline, configures severity thresholds and notifications."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define platform container strategy",
                  "info": "Chooses runtime (Docker, containerd), orchestration, and image registry strategy."
                },
                {
                  "name": "Set base image policy for multiple teams",
                  "info": "Standardizes approved base images, enforcement mechanisms, and update processes."
                },
                {
                  "name": "Design observability in containerized environments",
                  "info": "Standardizes log format, metrics exposition, and tracing injection at platform level."
                },
                {
                  "name": "Synchronize container standards across teams",
                  "info": "Produces RFCs and ADRs for platform decisions, obtains buy-in from team tech leads."
                }
              ]
            }
          ]
        },
        {
          "name": "Build and CI/CD",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Understand and read the pipeline",
                  "info": "Understands CI steps — lint, test, build, deploy — and knows what each does and where to find failure causes."
                },
                {
                  "name": "Fix flaky tests in CI",
                  "info": "Finds the root cause of unstable tests: race conditions, ordering dependencies, or external services."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Configure a pipeline for a new service",
                  "info": "Sets up lint, test, build, and deploy steps with the right environment variables and secrets."
                },
                {
                  "name": "Speed up slow CI flows",
                  "info": "Parallelizes steps, caches Composer packages and dependencies, reduces cold start time."
                },
                {
                  "name": "Implement canary or blue/green deployment",
                  "info": "Rolls out changes gradually and can roll back without downtime."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Design deployment strategy for services",
                  "info": "Chooses rolling, canary, or blue/green based on SLO, traffic volume, and criticality."
                },
                {
                  "name": "Set pipeline standards for the team",
                  "info": "Defines mandatory steps: lint, security scan, test coverage, smoke test after deploy."
                },
                {
                  "name": "Manage rollback procedures",
                  "info": "Documents and tests the rollback procedure, ensures the team can roll back under pressure."
                },
                {
                  "name": "Implement automatic quality gates",
                  "info": "Blocks deploys on coverage regression, CVEs above threshold, or failing smoke tests."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set deployment governance for the team",
                  "info": "Defines what production-ready means: checklist, approvals, observability requirements."
                },
                {
                  "name": "Establish release gates and approval flows",
                  "info": "Balances delivery speed with risk control: who approves, when it's automatic."
                },
                {
                  "name": "Control production readiness of new services",
                  "info": "Ensures every service has a healthcheck, metrics, alerts, runbook, and documentation before deploy."
                },
                {
                  "name": "Synchronize delivery process with other teams",
                  "info": "Coordinates release windows, feature flags, and dependencies in joint deliveries."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define platform delivery strategy",
                  "info": "Chooses the deployment model and CI/CD tooling at multi-team level."
                },
                {
                  "name": "Design progressive delivery",
                  "info": "Sets principles for feature flags, traffic splitting, and automated rollback at platform level."
                },
                {
                  "name": "Set SLO for pipeline reliability",
                  "info": "Defines acceptable build time, flaky test ratio, and MTTR for CI infrastructure."
                },
                {
                  "name": "Build change management policy",
                  "info": "Defines rules for hot fixes, emergency deploys, and change freezes balancing speed and safety."
                },
                {
                  "name": "Identify delivery process bottlenecks",
                  "info": "Measures DORA metrics, finds constraints, and initiates improvements at platform level."
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Quality and reliability",
      "rows": [
        {
          "name": "Testing",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write unit tests for business logic",
                  "info": "Covers happy path and main error branches using PHPUnit or Pest."
                },
                {
                  "name": "Use data providers for parameterization",
                  "info": "Structures test cases through data providers, avoids duplication, and keeps tests readable."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Write integration tests with real dependencies",
                  "info": "Uses Testcontainers or in-memory DB — tests real behavior, not just mocks."
                },
                {
                  "name": "Mock external services correctly",
                  "info": "Chooses between interface mocks and HTTP stubs depending on the test level."
                },
                {
                  "name": "Write functional tests for the API",
                  "info": "Checks HTTP contracts, authentication, and edge cases through WebTestCase or equivalent."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Define test strategy for the team",
                  "info": "Sets the balance between unit, integration, and e2e tests accounting for speed and confidence."
                },
                {
                  "name": "Introduce contract testing",
                  "info": "Uses schema-based or Pact approach to verify compatibility between services."
                },
                {
                  "name": "Evaluate coverage meaningfully",
                  "info": "Distinguishes useful coverage from meaningless, focuses on critical scenarios."
                },
                {
                  "name": "Design testable architecture",
                  "info": "Embeds dependency injection and clear boundaries in design so testing doesn't require heroics."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set the mandatory delivery quality bar",
                  "info": "Defines what a PR must have: minimum coverage, required scenarios, performance tests."
                },
                {
                  "name": "Control regression coverage",
                  "info": "Ensures every incident results in a test that prevents recurrence."
                },
                {
                  "name": "Remove valueless tests",
                  "info": "Reviews and deletes tests that only slow CI without improving confidence."
                },
                {
                  "name": "Manage test debt",
                  "info": "Tracks known coverage gaps and includes remediation in the roadmap."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Build a test confidence model for multiple services",
                  "info": "Defines how the combined test suite across levels ensures delivery confidence."
                },
                {
                  "name": "Set reliability testing standards",
                  "info": "Defines load testing, chaos engineering, and failure injection requirements for critical systems."
                },
                {
                  "name": "Design chaos and fault injection",
                  "info": "Implements systematic failure experiments to find weaknesses before production incidents."
                },
                {
                  "name": "Build acceptance criteria for critical systems",
                  "info": "Sets technical launch conditions for services with high SLOs: tests, load, DR."
                }
              ]
            }
          ]
        },
        {
          "name": "Metrics and observability",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Add structured logs",
                  "info": "Logs enough to understand runtime behavior, without sensitive data or noise."
                },
                {
                  "name": "Use the team's metrics and dashboards",
                  "info": "Reads existing Grafana dashboards and understands basic RED metrics for their service."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Diagnose incidents from traces and metrics",
                  "info": "Reads distributed traces, correlates logs, and isolates bottlenecks or regressions."
                },
                {
                  "name": "Build alerting for new services",
                  "info": "Creates alerts on error rate, p95 latency, and saturation with correct thresholds and runbooks."
                },
                {
                  "name": "Interpret latency distributions",
                  "info": "Distinguishes p50 from p99, understands tail latency and the effect of PHP-FPM worker pool on graphs."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Define SLIs and SLOs for services",
                  "info": "Chooses meaningful quality indicators, aligns targets with product, and sets error budgets."
                },
                {
                  "name": "Set metric naming conventions",
                  "info": "Defines naming standards, labeling, and cardinality limits for Prometheus."
                },
                {
                  "name": "Design distributed tracing",
                  "info": "Instruments services with correct span context, baggage, and sampling strategy."
                },
                {
                  "name": "Lead incident postmortems",
                  "info": "Writes blameless postmortems, identifies systemic causes, and defines action items."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set team observability standards",
                  "info": "Defines the mandatory minimum: what to log, which metrics to instrument, how to trace."
                },
                {
                  "name": "Control alert fatigue",
                  "info": "Regularly reviews alerts: removes noise, improves thresholds, adds runbooks."
                },
                {
                  "name": "Ensure team on-call readiness",
                  "info": "Ensures every service has a runbook, alerts with descriptions, and an escalation path."
                },
                {
                  "name": "Build postmortem culture",
                  "info": "Normalizes blameless review, tracks action item completion, and shares learnings with the team."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define platform reliability strategy",
                  "info": "Builds a unified approach to SLOs, error budgets, and incident management for the entire domain."
                },
                {
                  "name": "Set cross-service SLOs and error budgets",
                  "info": "Establishes dependency SLAs between teams, links budgets to delivery priorities."
                },
                {
                  "name": "Design centralized telemetry",
                  "info": "Defines platform tools for collecting, storing, and visualizing observability data."
                },
                {
                  "name": "Build a production feedback loop",
                  "info": "Creates a system where production signals regularly influence team priorities."
                },
                {
                  "name": "Set incident management standards",
                  "info": "Defines severity levels, escalation matrix, communication protocol, and learning system for incidents."
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Teamwork",
      "rows": [
        {
          "name": "Autonomy",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Break down tasks independently",
                  "info": "Splits a task into clear steps and clarifies ambiguities before starting work."
                },
                {
                  "name": "Escalate blockers in time",
                  "info": "Doesn't stay stuck silently for more than a day — signals the blocker and proposes options."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Drive a task from design to delivery",
                  "info": "Defines the approach, aligns on it, and brings it to production without losing intermediate steps."
                },
                {
                  "name": "Find and align on a solution independently",
                  "info": "Proposes a concrete option with tradeoffs rather than asking an open-ended 'how do I do this'."
                },
                {
                  "name": "Manage their own backlog",
                  "info": "Keeps tasks up to date and prioritizes within the sprint goal independently."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Initiate improvements without being asked",
                  "info": "Notices system problems and proposes solutions without waiting for someone to file a ticket."
                },
                {
                  "name": "Manage parallel tracks",
                  "info": "Runs multiple tasks simultaneously without losing context or creating a team bottleneck."
                },
                {
                  "name": "Make decisions under uncertainty",
                  "info": "Moves forward with incomplete information, records assumptions, and is ready to revise."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Drive the team's technical track independently",
                  "info": "Manages the technical backlog, sets direction, and maintains pace without daily management."
                },
                {
                  "name": "Prioritize the technical backlog",
                  "info": "Balances new features, tech debt, and reliability work in a business context."
                },
                {
                  "name": "Manage risks without constant escalation",
                  "info": "Independently assesses and mitigates technical risks; escalates only significant ones."
                },
                {
                  "name": "Unblock others without losing their own progress",
                  "info": "Helps the team move forward without taking over others' work entirely."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Set the agenda independently",
                  "info": "Identifies what problems matter and initiates work without external prompting."
                },
                {
                  "name": "Initiate cross-team improvements",
                  "info": "Identifies systemic problems and organizes multiple teams to solve them."
                },
                {
                  "name": "Manage strategic technical risks",
                  "info": "Keeps long-term risks in focus: vendor lock-in, architectural debt, skill gaps."
                },
                {
                  "name": "Build consensus without formal authority",
                  "info": "Drives decisions through argument, trust, and engaging key stakeholders."
                },
                {
                  "name": "Work with long planning horizons",
                  "info": "Sees and manages technical strategy 12–24 months ahead."
                }
              ]
            }
          ]
        },
        {
          "name": "Artifact quality",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write PRs with change descriptions",
                  "info": "Describes what changed, why, and how to verify — reviewers shouldn't reconstruct context."
                },
                {
                  "name": "Write clear commit messages",
                  "info": "Follows the agreed format, describes the essence of the change rather than the work process."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Describe context and tradeoffs in PRs",
                  "info": "Explains why this solution was chosen and what alternatives were considered."
                },
                {
                  "name": "Document non-obvious decisions in code",
                  "info": "Adds a comment about 'why', not 'what' — where the logic isn't self-evident."
                },
                {
                  "name": "Keep tickets up to date",
                  "info": "Updates status, adds discussion outcomes, doesn't leave tasks in an undefined state."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Write clear design documents",
                  "info": "Describes the problem, proposal, alternatives, and risks to get quality feedback."
                },
                {
                  "name": "Record decisions in ADRs",
                  "info": "Documents significant architectural decisions with context so future engineers understand 'why'."
                },
                {
                  "name": "Structure artifacts for team review",
                  "info": "Chooses the right format: RFC, design doc, spike summary — based on complexity and audience."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set PR and ticket formatting standards",
                  "info": "Creates templates and checklists and explains the value of good artifacts to the team."
                },
                {
                  "name": "Control the quality bar of team artifacts",
                  "info": "Returns context-free PRs and tickets for rework; sets expectations by example."
                },
                {
                  "name": "Prepare executive summaries for non-technical audiences",
                  "info": "Translates technical decisions into business language: risks, timelines, impact."
                },
                {
                  "name": "Build a written communication culture",
                  "info": "Promotes async-first, decision documentation, and process transparency in the team."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Set RFC and ADR process standards",
                  "info": "Defines when an RFC is needed, how it is reviewed, and how decisions are recorded and accessible."
                },
                {
                  "name": "Write strategic documents for multiple audiences",
                  "info": "Adapts a technical document for engineers, management, and external partners."
                },
                {
                  "name": "Ensure transparency of technical decisions",
                  "info": "Creates a system where important decisions are accessible, understandable, and justified for the whole organization."
                },
                {
                  "name": "Shape engineering culture through documents",
                  "info": "Writes principles, manifesto, and best practices that become a reference point for teams."
                }
              ]
            }
          ]
        },
        {
          "name": "Technical documentation",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Update README for their changes",
                  "info": "Updates run instructions, env variables, and dependency information with every change."
                },
                {
                  "name": "Document configuration and parameters",
                  "info": "Describes the purpose of env variables, valid values, and default behavior."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Write a runbook for a new service",
                  "info": "Describes how to start, stop, roll back, and diagnose a service in production."
                },
                {
                  "name": "Keep API documentation up to date",
                  "info": "Keeps the OpenAPI spec in sync with the code on every contract change."
                },
                {
                  "name": "Document operational procedures",
                  "info": "Describes routine operations: migrations, planned restarts, secret rotation."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Keep architectural documentation current",
                  "info": "Syncs diagrams and descriptions with the actual system state, prevents staleness."
                },
                {
                  "name": "Write an onboarding guide for a service",
                  "info": "Creates a document that lets a new engineer quickly get context and become productive."
                },
                {
                  "name": "Build the team's knowledge base",
                  "info": "Organizes documentation so what's needed is easy to find and stays current."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Set team documentation standards",
                  "info": "Defines structure, required sections, and update process for different document types."
                },
                {
                  "name": "Control completeness of operational docs",
                  "info": "Ensures every production service has a runbook, alert descriptions, and escalation path."
                },
                {
                  "name": "Build a knowledge management approach",
                  "info": "Chooses tools and processes for accumulating and sharing knowledge within the team."
                },
                {
                  "name": "Prepare documentation for audits and compliance",
                  "info": "Ensures documentation meets external requirements: security reviews, vendor audits."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Define domain technical knowledge strategy",
                  "info": "Sets how knowledge is accumulated, structured, and transferred between teams."
                },
                {
                  "name": "Manage documentation of cross-system decisions",
                  "info": "Ensures cross-team architectural decisions are recorded and accessible."
                },
                {
                  "name": "Set ops documentation requirements",
                  "info": "Establishes runbook, postmortem, and incident report standards across multiple teams."
                },
                {
                  "name": "Publish engineering decisions externally",
                  "info": "Shares team experience through blogs, conferences, and open-source — builds external technical authority."
                }
              ]
            }
          ]
        },
        {
          "name": "Communication",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Clearly describe task status",
                  "info": "Communicates what's done, what's left, and whether there are blockers — without needing prompts."
                },
                {
                  "name": "Ask clarifying questions instead of assuming",
                  "info": "Clarifies requirements before starting work rather than reworking after finishing."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Explain technical decisions to non-technical colleagues",
                  "info": "Adapts the level of detail to the audience without diving into implementation details when results matter."
                },
                {
                  "name": "Conduct constructive code reviews",
                  "info": "Gives specific, actionable feedback — identifies the problem and suggests a path to resolution."
                },
                {
                  "name": "Give and receive work feedback",
                  "info": "Raises issues directly and without aggression; accepts criticism without defensiveness."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Lead technical discussions to a decision",
                  "info": "Structures discussions, keeps focus, and helps the group reach a concrete conclusion."
                },
                {
                  "name": "Build trust with product and adjacent teams",
                  "info": "Syncs regularly, keeps partners informed, and avoids surprises."
                },
                {
                  "name": "Manage disagreements without escalation",
                  "info": "Finds compromise or persuades with arguments without involving management unnecessarily."
                },
                {
                  "name": "Represent the team's position",
                  "info": "Speaks for the team at cross-team meetings, communicates priorities and constraints."
                }
              ]
            },
            {
              "level": 4,
              "level_name": "TechLead",
              "tasks": [
                {
                  "name": "Sync the technical agenda with management",
                  "info": "Regularly translates technical priorities and risks into language non-technical managers understand."
                },
                {
                  "name": "Manage stakeholder expectations",
                  "info": "Signals risks, schedule changes, and technical decision impacts in advance."
                },
                {
                  "name": "Mediate team conflicts",
                  "info": "Helps team members resolve disagreements and creates a safe space for discussion."
                },
                {
                  "name": "Build psychological safety",
                  "info": "Creates an environment where people aren't afraid to share ideas, admit mistakes, or ask questions."
                }
              ]
            },
            {
              "level": 5,
              "level_name": "Principal",
              "tasks": [
                {
                  "name": "Act as the technical voice of the domain",
                  "info": "Represents technical positions at director, partner, and external audience level."
                },
                {
                  "name": "Lead cross-team dialogue",
                  "info": "Creates forums for knowledge sharing and solving common problems between teams."
                },
                {
                  "name": "Build alliances for systemic change",
                  "info": "Convinces key stakeholders of the need for change and builds a coalition of support."
                },
                {
                  "name": "Manage communication under uncertainty",
                  "info": "Provides clear direction to the team and partners while strategy is still forming."
                },
                {
                  "name": "Publicly represent engineering decisions",
                  "info": "Speaks at conferences, runs a technical blog — builds the company's reputation in the engineering community."
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
