{
  "format": "sf-skill-matrix",
  "version": 1,
  "name": "Go Developer Skill Matrix",
  "description": "Public example of a role-based matrix for backend engineers working with Go.",
  "levels": [
    {
      "name": "Junior",
      "description": "Works with 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."
    }
  ],
  "groups": [
    {
      "name": "Core Engineering",
      "rows": [
        {
          "name": "Go language",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Write clear handlers and packages",
                  "info": "Uses interfaces, structs, errors, and standard library patterns without overengineering."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Refactor service boundaries safely",
                  "info": "Separates domain logic, transport, and infrastructure while keeping backward-compatible behavior."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Set language and codebase standards",
                  "info": "Defines conventions for package layout, error strategy, code reviews, and shared utilities."
                }
              ]
            }
          ]
        },
        {
          "name": "Concurrency",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Use goroutines and channels carefully",
                  "info": "Adds concurrency only where needed and understands cancellation, context, and race basics."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Build worker flows with backpressure",
                  "info": "Designs bounded pipelines, avoids leaks, and handles retries or timeouts explicitly."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Design concurrency models for critical paths",
                  "info": "Chooses synchronization patterns based on throughput, latency, and production failure modes."
                }
              ]
            }
          ]
        },
        {
          "name": "HTTP and APIs",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Implement REST handlers with validation",
                  "info": "Parses input, validates contracts, and returns stable response schemas."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Own API changes end to end",
                  "info": "Plans migrations, versioning, idempotency, and downstream compatibility."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Shape service integration strategy",
                  "info": "Defines API standards, resilience rules, and cross-service communication patterns."
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Delivery Quality",
      "rows": [
        {
          "name": "Testing",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Cover code with unit and handler tests",
                  "info": "Adds practical test cases for business logic and common error branches."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Build integration test scenarios",
                  "info": "Tests databases, queues, external APIs, and rollback behavior for non-trivial changes."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Improve test strategy at system level",
                  "info": "Balances fast feedback, production realism, and failure isolation across services."
                }
              ]
            }
          ]
        },
        {
          "name": "Observability",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Add logs and metrics for new flows",
                  "info": "Instruments changes so support and teammates can understand runtime behavior."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Diagnose incidents with telemetry",
                  "info": "Reads traces, dashboards, logs, and alerts to isolate bottlenecks or regressions."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Define reliability indicators",
                  "info": "Sets SLI and SLO conventions, alert quality standards, and incident review patterns."
                }
              ]
            }
          ]
        },
        {
          "name": "Architecture",
          "cells": [
            {
              "level": 1,
              "level_name": "Junior",
              "tasks": [
                {
                  "name": "Understand existing service boundaries",
                  "info": "Knows where to extend the system and when to ask for a larger design discussion."
                }
              ]
            },
            {
              "level": 2,
              "level_name": "Middle",
              "tasks": [
                {
                  "name": "Design medium-sized modules",
                  "info": "Documents tradeoffs for storage, background jobs, and synchronous versus async execution."
                }
              ]
            },
            {
              "level": 3,
              "level_name": "Senior",
              "tasks": [
                {
                  "name": "Lead architecture for product domains",
                  "info": "Balances simplicity, cost, operability, and long-term evolution of the platform."
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
