Engineering Competency Matrix
Diagnostic tool for engineering levels. Pick a level, check the behaviors, score.
TL;DR
- 20 skills, 5 levels, 79 behaviors — Junior through Principal
- ★ = mandatory — Engineer's level = MIN(mandatory level, overall level). No exceptions
- Behaviors are cumulative — Senior ticks everything Junior and Mid tick, plus Senior-level behaviors
- Per-level sections — Go to the level you're evaluating, check mandatory first, then the rest
- Verify column — Every behavior tagged: A (artifact), P (peer feedback), S (self-reported)
- 80% threshold — Tick ≥ 80% of a level's behaviors to pass. Not perfection — pattern
How to Use This
Self-Assessment First, Manager Review After
- Engineer self-scores. Fill in ✓/✗ for each behavior. Every ✓ needs a concrete example — PR link, doc, incident, one line
- Manager reviews. Confirm or adjust. Flag disagreements (✓ → ✗ or ✗ → ✓)
- 15-min sync. Discuss disagreements only. Skip what matches
This scales — manager spends 5-10 min reviewing instead of 15-20 min scoring from scratch. Disagreements become the conversation: "You ticked this but I don't see evidence" is more productive than "here's my score."
Scoring Steps
- Pick the level you're evaluating (e.g. "Is this person Senior?")
- Check mandatory ★ skills first. If they don't pass mandatory at that level, stop. They're not that level
- Check remaining skills. Score each behavior ✓ or ✗
- Count. ≥ 80% of that level's behaviors = pass
- Check cumulative. They must also pass all levels below. A Senior must pass Junior and Mid too
- Final level = MIN(mandatory level, overall level)
Behaviors are cumulative. A Senior engineer should demonstrate all Junior, Mid, AND Senior behaviors. If a behavior starts at Mid, it's expected at Senior, Staff, and Principal too.
The Mandatory Rule (★)
Five skills are mandatory: Clear Comm, Code Quality, Testing, Ownership, Collaboration.
Mechanic: Engineer's level = MIN(mandatory level, overall level).
Worked example:
Alice scores Senior on overall behaviors (82% of Senior behaviors ticked). But on mandatory ★ skills alone, she only passes Mid (75% of Senior mandatory behaviors).
Alice's level: Mid. Not Senior. The mandatory score caps her.
Why: A Staff engineer who can't communicate is a liability, not a multiplier. Mandatory skills are the behaviors that make every other skill effective. Technical depth without communication, quality, testing, ownership, and collaboration creates isolated impact that doesn't scale.
How to Verify Behaviors
Every behavior has a Verify tag. Use it to know where to look for evidence.
| Tag | Meaning | Where to look |
|---|---|---|
| A (Artifact) | Leaves a trail | PRs, docs, RFCs, postmortems, dashboards, commit history, deploy logs |
| P (Peer) | Requires feedback from others | 360 reviews, peer interviews, cross-team feedback, skip-level 1:1s |
| S (Self) | Self-reported, inferred over time | Strategic thinking, relationship quality, long-term planning patterns |
Rule of thumb: If an engineer scores high on A and S but low on P, collect more peer feedback before finalizing. Artifacts show what someone shipped. Peers show how they shipped it.
Skill Categories
| Category | Skills |
|---|---|
| Core (★ mandatory) | Clear Comm, Code Quality, Testing, Ownership, Collaboration |
| Technical | System Design, Debugging, Performance, Security, CI/CD, Tech Writing |
| Product & Leadership | Product Thinking, Data & Metrics, Code Reviews, Mentoring, Cross-Team, Project Lead, Strategy, Hiring, Org Impact |
Terminology
Terms used in the behaviors below. Skim now, reference later.
| Term | What it means |
|---|---|
| Unit test | Tests one function in isolation. Input → expected output. Fast (ms), no database or network. "Does calculateTotal return the right number?" |
| Integration test | Tests 2-3 components wired together. API → database → response. External services (Stripe, email) often mocked. Seconds. "Does the order endpoint write to the DB and return 201?" |
| E2E (end-to-end) test | Tests the full user flow through real UI, real APIs, real database. Nothing mocked. Minutes. Flaky. "Can a user sign up, add to cart, and check out?" |
| Flaky test | Test that passes and fails on the same code. Same commit, different results. Caused by timing, shared state, or external dependencies |
| Edge case | Input or scenario outside the happy path. Empty list, null value, 0, negative number, unicode, max int |
| PR (Pull Request) | Code change submitted for review before merging into the main branch |
| CI/CD | Continuous Integration / Continuous Deployment. Automated pipeline: run tests → build → deploy |
| Feature flag | Toggle that enables/disables a feature without deploying new code. Ship dark, enable for 5% of users, then 100% |
| ADR | Architecture Decision Record. Short doc: context, decision, consequences. "Why did we pick Postgres over Mongo?" |
| RFC | Request for Comments. Proposal doc shared before building. Gets buy-in and catches design flaws early |
| Postmortem | Written review after an incident. What happened, why, how to prevent it. Blameless = focus on systems, not people |
| OWASP | Open Web Application Security Project. Top 10 list of common security vulnerabilities (SQL injection, XSS, etc.) |
| Parameterized query | SQL query where user input is passed as parameters, not concatenated into the string. Prevents SQL injection |
| Observability | Ability to understand system behavior from its outputs — logs, metrics, traces. "Why is this request slow?" |
| Threat model | Systematic review of what can go wrong security-wise. What are the attack surfaces? What's the blast radius? |
| Canary deploy | Ship new code to 1-5% of traffic first. If error rate stays flat, roll to 100%. If it spikes, roll back |
| Blue-green deploy | Run two identical environments. Route traffic to green (new). If it breaks, switch back to blue (old) instantly |
| A/B test | Show version A to 50% of users, version B to 50%. Measure which performs better. Data, not opinions |
| MTTR | Mean Time To Recovery. How fast you fix production incidents. "MTTR of 15 min" = back to normal in 15 min |
| SLO | Service Level Objective. Target reliability number. "99.9% uptime" = max 8.7 hours downtime per year |
| Tech debt | Shortcuts in code that save time now but cost more later. Like financial debt — interest accumulates |
| SOC2 / GDPR | Compliance standards. SOC2 = US security/privacy audit. GDPR = EU data protection regulation |
Junior (Level 1) — 12 behaviors
Entry level. Ships reliably, follows patterns, asks for help.
Mandatory Skills ★
| Skill | Behavior | Verify |
|---|---|---|
| Clear Comm ★ | Flags blockers same day, not next day | A |
| Clear Comm ★ | Communicates proactively — updates without prompting, answers directly | P |
| Code Quality ★ | Follows team patterns. PRs are small and focused | A |
| Testing ★ | Writes unit tests for own code. Tests pass before PR | A |
| Ownership ★ | Follows PRs through deploy. Monitors 15 min after merge | A |
| Collaboration ★ | Reviews PRs within 24 hours | A |
| Collaboration ★ | Asks for help within 30 min of being stuck | P |
Technical Skills
| Skill | Behavior | Verify |
|---|---|---|
| Debugging | Debugs with logs and stack traces | A |
| Security | No secrets in code. OWASP basics. Parameterized queries | A |
| CI/CD | Make sure pipeline is usable, low noise | A |
Product & Leadership
| Skill | Behavior | Verify |
|---|---|---|
| Product Thinking | Explains what problem your code solves and who it's for | P |
| Code Reviews | Reviews for readability. Learns from reviews received | A |
Mid (Level 2) — 18 behaviors
Must also meet Junior. Owns features end-to-end, works across teams, measures outcomes.
Mandatory Skills ★
| Skill | Behavior | Verify |
|---|---|---|
| Clear Comm ★ | Communicates risks proactively with options, not just problems | A |
| Clear Comm ★ | Written updates use specifics — numbers, dates, owners, not vague estimates | A |
| Code Quality ★ | Code is clean and maintained. Refactors instead of piling on — improves structure (renames, extracts, simplifies) rather than layering workarounds onto fragile areas. Leaves code better than they found it | A |
| Code Quality ★ | Handles edge cases before QA finds them | A |
| Testing ★ | Writes integration tests. Covers edge cases and error paths | A |
| Ownership ★ | Owns features end-to-end: build, ship, measure adoption, iterate | A |
| Ownership ★ | Writes blameless postmortems | A |
| Collaboration ★ | Ships work that requires input from PM, design, or stakeholders without delays | P |
| Collaboration ★ | Onboards new engineers — pairs on first PR, checks in daily | P |
Technical Skills
| Skill | Behavior | Verify |
|---|---|---|
| System Design | Designs features with clear trade-offs documented | A |
| Debugging | Debugs across services using observability tools — traces, metrics, dashboards | A |
| Performance | Profiles before optimizing. Fixes the measured bottleneck | A |
| CI/CD | Configures pipelines. Uses feature flags. Rolls back broken deploys | A |
| Tech Writing | Documents systems, decisions, and ADRs. New joiner can follow | A |
Product & Leadership
| Skill | Behavior | Verify |
|---|---|---|
| Product Thinking | Pushes back on requirements with a simpler alternative that solves the core problem | P |
| Data & Metrics | Tracks feature impact after shipping instead of activity. E.g. Adoption, error rate, revenue. Reports "sign-ups up 12%" not "shipped 3 features" | A |
| Code Reviews | Reviews for correctness, edge cases, and test coverage | A |
| Project Lead | Leads small features end-to-end. Breaks into tasks, estimates, delivers | A |
Senior (Level 3) — 21 behaviors
Must also meet Junior and Mid. Drives business impact, leads cross-team work, mentors others.
Mandatory Skills ★
| Skill | Behavior | Verify |
|---|---|---|
| Clear Comm ★ | Drives alignment via RFCs and design docs | A |
| Clear Comm ★ | Presents technical concepts to non-technical stakeholders | P |
| Code Quality ★ | Sets team coding standards. Simplifies — abstracts only when pattern repeats 3+ times | A |
| Testing ★ | Defines test strategy for systems. Sets coverage and speed targets | A |
| Ownership ★ | Owns system reliability. Investigates production issues before being asked | A |
| Collaboration ★ | Drives cross-team initiatives. Resolves cross-team conflicts | P |
Technical Skills
| Skill | Behavior | Verify |
|---|---|---|
| System Design | Designs systems end-to-end (scale, failure modes, cost). Writes design docs others can execute without you | A |
| Debugging | Leads incident response. Finds root cause, implements prevention | A |
| Performance | Designs for scale. Load tests before launch. Optimizes measured bottlenecks | A |
| Security | Threat models new features. Leads security reviews | A |
| CI/CD | Designs deploy strategies (canary, blue-green). Zero-downtime migrations | A |
| Tech Writing | Writes RFCs and design docs that drive decisions | A |
Product & Leadership
| Skill | Behavior | Verify |
|---|---|---|
| Product Thinking | Partners with PM to define what to build. Interviews users | P |
| Product Thinking | Connects tech decisions to business outcomes ("SSO unblocks $150K") | A |
| Data & Metrics | Defines success metrics before building. A/B tests | A |
| Code Reviews | Reviews for architecture and business fit. Mentors through reviews | A |
| Mentoring | Mentors 1-2 juniors toward next level. People you mentor get promoted | P |
| Project Lead | Leads projects with cross-team dependencies or unknowns. Surfaces risks with options before they become blockers | A |
| Strategy | Thinks 2-3 quarters ahead. Proposes where to invest and where to cut | S |
| Hiring | Interviews candidates. Gives clear hire/no-hire with evidence | A |
| Org Impact | Ships projects that move company metrics. Other teams benefit from your work | A |
Staff (Level 4) — 16 behaviors
Must also meet Junior, Mid, and Senior. Multiplies the org, sets technical direction, influences without authority.
Mandatory Skills ★
| Skill | Behavior | Verify |
|---|---|---|
| Clear Comm ★ | Influences org-wide decisions through written proposals | A |
| Code Quality ★ | Defines org-wide patterns via tooling (linters, generators), not rules | A |
| Testing ★ | Owns test infrastructure. CI passes in <15 min for all teams | A |
| Ownership ★ | Owns org-wide outcomes: tracks and improves velocity (cycle time, deploy frequency), reliability (SLA adherence, incident rate), and developer experience (onboarding time, tooling satisfaction). Drives initiatives when metrics slip | A |
| Collaboration ★ | Influences without authority. Creates decision forums (RFC, Arch Review) | P |
Technical Skills
| Skill | Behavior | Verify |
|---|---|---|
| System Design | Designs org-wide architecture. Sets technical direction across teams | A |
| Debugging | Improves incident process org-wide. Reduces MTTR through tooling | A |
| Performance | Sets performance standards and budgets. Architects for 10x growth | A |
| Security | Defines security architecture and compliance standards org-wide (SOC2, GDPR) | A |
Product & Leadership
| Skill | Behavior | Verify |
|---|---|---|
| Data & Metrics | Sets org-wide metrics: deploy frequency, MTTR, developer NPS | A |
| Mentoring | Develops seniors into staff. Scales mentoring through programs | P |
| Cross-Team | Gets 3+ teams to agree on shared approach without escalation | P |
| Project Lead | Leads org-wide initiatives. Sponsors others' projects | A |
| Strategy | Owns 1-year technical roadmap. Ships features while reducing tech debt quarter over quarter | A |
| Hiring | Designs interview process. Defines hiring bar. Attracts talent through reputation | A |
| Org Impact | Makes 10+ engineers more effective. Multiplies the org | P |
Principal (Level 5) — 12 behaviors
Must also meet Junior, Mid, Senior, and Staff. Shapes company direction, defines how engineering works.
Mandatory Skills ★
| Skill | Behavior | Verify |
|---|---|---|
| Clear Comm ★ | Represents engineering to board/execs | P |
| Code Quality ★ | Defines "production-ready" standard company-wide. Teams ship to it without enforcement | A |
| Testing ★ | CI gates catch real bugs, not false alarms. Flaky test rate <1% across all services | A |
| Ownership ★ | Owns eng-wide metrics (deploy frequency, MTTR, uptime) and they trend in the right direction | A |
| Collaboration ★ | Partners with exec team on engineering investment decisions | P |
Technical Skills
| Skill | Behavior | Verify |
|---|---|---|
| System Design | Defines company-wide technical strategy. 2-3 year horizon | A |
| Debugging | Sets SLO targets per service. Incident count trends down quarter over quarter | A |
| Tech Writing | Writes vision docs that shape company direction | A |
Product & Leadership
| Skill | Behavior | Verify |
|---|---|---|
| Product Thinking | Technology you built opens revenue streams or markets the company didn't have before | A |
| Mentoring | Develops future technical leaders. Creates leadership pipeline | P |
| Cross-Team | Engineering priorities visibly map to company strategy — no surprises between teams | S |
| Org Impact | Engineering practices you introduced are how the company defaults to working | P |
Split Levels
When someone is Staff at X but Senior at Y, the split is the diagnostic — not the number.
Rule: Official level = MIN(mandatory level, overall level). But the split tells you where to invest.
Common Patterns
| Pattern | What it means | Action |
|---|---|---|
| Staff technical / Senior leadership | Strong builder, not yet a multiplier | Growth plan for mentoring, cross-team influence, strategy |
| Senior everything / Mid communication | Technical skills blocked by communication gap | Focus on Clear Comm for one quarter. Write RFCs, present to stakeholders |
| Senior overall / Mid mandatory | Capable engineer held back by core skill gap | Identify which mandatory skill is lagging. Targeted improvement plan |
| Staff product / Senior technical | Strong product instinct, architecture gaps | Pair with strong system designer. Lead a design doc end-to-end |
Worked Example
Dave scores Staff on technical skills (85% of Staff behaviors ticked) and Staff on product & leadership (82%). But on mandatory ★ skills, he only passes Senior (78% of Staff mandatory behaviors — below 80%).
Dave's level: Senior. His mandatory score caps him at Senior even though his overall skills are Staff-level.
The split tells the story: Dave needs to close the gap on 1-2 mandatory Staff behaviors. His manager reviews the specific behaviors he's missing — turns out he hasn't created decision forums (Collaboration ★) or established org-wide testing infrastructure (Testing ★). Those become his next-quarter goals.
Common Mistakes
| Mistake | Fix |
|---|---|
| Scoring potential, not demonstrated behavior | Score last 2 quarters. No credit for "could" |
| Ignoring mandatory because technical is strong | Run mandatory check first. If it fails, stop |
| Only scoring Artifact behaviors | Collect peer feedback quarterly. Skip-level 1:1s reveal what artifacts don't |
| One good quarter = level up | Require 2-3 quarters sustained. One quarter is a spike |
| Averaging across skills | Look at the split. An average hides the gap |
| Checklist mentality | Every ✓ needs a concrete example: "When? What outcome?" |
| Evaluating Staff+ without cross-team input | Staff+ is org-wide. Get input from 3+ teams |
| "Does the work" vs "multiplies others" | If only personal output is high, that's Senior, not Staff |
| Self-assessment over-scoring | Require a concrete example per ✓ — PR link, doc, incident. "When? What outcome?" kills inflation |
| Self-assessment under-scoring | Cross-check with peer feedback, especially P-tagged behaviors. Humble engineers miss their own impact |
Spreadsheet Template
Make a copy of the spreadsheet template — add engineer names as columns.
Layout
Skill | Category | Mandatory | Behavior | Level | Alice | Bob | ...- Category: Core, Technical, or Product & Leadership
- Mandatory: ★ or blank
- Level: 1-5 (the level where this behavior starts)
- Each engineer cell: ✓ if demonstrated, blank if not
Tagging rows
Add a Level column to each behavior row:
| Level | Value | Means |
|---|---|---|
| Junior | 1 | Behavior starts at Junior |
| Mid | 2 | Behavior starts at Mid |
| Senior | 3 | Behavior starts at Senior |
| Staff | 4 | Behavior starts at Staff |
| Principal | 5 | Behavior starts at Principal |
Formulas (Google Sheets / Excel)
Assume: Column C = Mandatory (★ or blank), Column D = Level (1-5), Column E onward = engineer scores.
Count ticked behaviors per level (summary rows at bottom):
Junior ticked: =COUNTIFS($D:$D,1,E:E,"✓")
Junior total: =COUNTIF($D:$D,1)
Mid ticked: =COUNTIFS($D:$D,2,E:E,"✓")
Mid total: =COUNTIF($D:$D,2)
Senior ticked: =COUNTIFS($D:$D,3,E:E,"✓")
Senior total: =COUNTIF($D:$D,3)
Staff ticked: =COUNTIFS($D:$D,4,E:E,"✓")
Staff total: =COUNTIF($D:$D,4)
Principal ticked: =COUNTIFS($D:$D,5,E:E,"✓")
Principal total: =COUNTIF($D:$D,5)Overall level (≥ 80% threshold):
=IF(AND(E_Junior_ticked/E_Junior_total>=0.8, E_Mid_ticked/E_Mid_total>=0.8, E_Senior_ticked/E_Senior_total>=0.8, E_Staff_ticked/E_Staff_total>=0.8, E_Principal_ticked/E_Principal_total>=0.8),"Principal", IF(AND(E_Junior_ticked/E_Junior_total>=0.8, E_Mid_ticked/E_Mid_total>=0.8, E_Senior_ticked/E_Senior_total>=0.8, E_Staff_ticked/E_Staff_total>=0.8),"Staff", IF(AND(E_Junior_ticked/E_Junior_total>=0.8, E_Mid_ticked/E_Mid_total>=0.8, E_Senior_ticked/E_Senior_total>=0.8),"Senior", IF(AND(E_Junior_ticked/E_Junior_total>=0.8, E_Mid_ticked/E_Mid_total>=0.8),"Mid", IF(E_Junior_ticked/E_Junior_total>=0.8,"Junior","Below Junior")))))Mandatory level (★ rows only):
=IF(AND(COUNTIFS($C:$C,"★",$D:$D,1,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,1)>=0.8, COUNTIFS($C:$C,"★",$D:$D,2,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,2)>=0.8, COUNTIFS($C:$C,"★",$D:$D,3,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,3)>=0.8, COUNTIFS($C:$C,"★",$D:$D,4,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,4)>=0.8, COUNTIFS($C:$C,"★",$D:$D,5,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,5)>=0.8),"Principal", IF(AND(COUNTIFS($C:$C,"★",$D:$D,1,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,1)>=0.8, COUNTIFS($C:$C,"★",$D:$D,2,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,2)>=0.8, COUNTIFS($C:$C,"★",$D:$D,3,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,3)>=0.8, COUNTIFS($C:$C,"★",$D:$D,4,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,4)>=0.8),"Staff", IF(AND(COUNTIFS($C:$C,"★",$D:$D,1,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,1)>=0.8, COUNTIFS($C:$C,"★",$D:$D,2,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,2)>=0.8, COUNTIFS($C:$C,"★",$D:$D,3,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,3)>=0.8),"Senior", IF(AND(COUNTIFS($C:$C,"★",$D:$D,1,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,1)>=0.8, COUNTIFS($C:$C,"★",$D:$D,2,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,2)>=0.8),"Mid", IF(COUNTIFS($C:$C,"★",$D:$D,1,E:E,"✓")/COUNTIFS($C:$C,"★",$D:$D,1)>=0.8,"Junior","Below Junior")))))Final level = MIN(mandatory level, overall level).
Use a lookup: assign numeric values (Junior=1, Mid=2, etc.), take the MIN, convert back.
Why 80%: Nobody ticks every box. 80% means they consistently demonstrate the level's behaviors — not perfection, but pattern.
Example
| Skill | Mandatory | Behavior | Level | Alice | Bob |
|---|---|---|---|---|---|
| Clear Comm | ★ | Flags blockers same day | 1 | ✓ | ✓ |
| Clear Comm | ★ | Written updates use specifics | 2 | ✓ | ✓ |
| Clear Comm | ★ | Drives alignment via RFCs | 3 | ✓ | |
| Code Quality | ★ | Follows team patterns | 1 | ✓ | ✓ |
| Code Quality | ★ | Sets team coding standards | 3 | ✓ | |
| System Design | Designs features with trade-offs | 2 | ✓ | ✓ | |
| ... | ... | ... | ... | ... | |
| Summary | |||||
| Junior % | 100% | 100% | |||
| Mid % | 95% | 85% | |||
| Senior % | 82% | 40% | |||
| Staff % | 20% | 0% | |||
| Overall Level | Senior | Mid | |||
| Mandatory Level | Senior | Mid | |||
| Final Level | Senior | Mid |
Alice — ticks ≥ 80% at Junior, Mid, and Senior. Falls off at Staff (20%). Mandatory level also Senior. Final: Senior.
Bob — ticks ≥ 80% at Junior and Mid. Only 40% of Senior behaviors. Final: Mid. Growth areas: RFCs, design docs, cross-team leadership.
Level Check Summary
| Level | Threshold | In one sentence |
|---|---|---|
| Junior | ≥ 80% of Junior behaviors | Ships reliably, follows patterns, asks for help |
| Mid | ≥ 80% of Junior + Mid behaviors | Owns features end-to-end, works across teams, measures outcomes |
| Senior | ≥ 80% of Junior + Mid + Senior behaviors | Drives business impact, leads cross-team work, mentors others |
| Staff | ≥ 80% of Junior + Mid + Senior + Staff behaviors | Multiplies the org, sets technical direction, influences without authority |
| Principal | ≥ 80% of all behaviors | Shapes company direction, defines how engineering works |
The rule: You're at a level when you consistently tick ≥ 80% of that level's behaviors AND all levels below it. Not your best week — your average quarter. Mandatory ★ skills cap the level.
References
- Clear Communication — Mandatory communication principles
- Engineering Strategy & Vision — How to write strategy docs (Senior+) and vision docs (Staff+)
- Progression Framework — Detailed expectations per level with bad/good examples
- Career Levels — Company-wide leveling framework
- Engineering Fundamentals — Technical concepts to master