Skip to content

Build an Engineering Progression Framework: A Worked Example for a 40-Engineer EU Company

Build an engineering progression framework from a worked example: level criteria per factor, pay bands, a promotion packet, works council steps, and placement.

Ayhan Sipahi Ayhan Sipahi

The starting point is a hypothetical German GmbH: about 70 workers, 40 of them engineers, six ad hoc titles, and pay negotiated per hire. The end point is a progression framework that also serves as the pay document. Its parts are a criteria matrix, one band per level, a one-page promotion packet, and placement letters. The matrix follows the four factors Article 4(4) sets as a minimum, plus collaboration and communication from its soft-skills clause. Part 1 settled that shape: four IC levels, an optional Staff level, and co-design with the works council.

Every criterion carries a number, so the calibration group, the engineer, and the works council read the same text. A placement letter, a promotion rationale, an appeal answer, and a consent request all cite it.

The order matters as much as the parts. The works council track opens before drafting, and the draft is back-tested against past decisions before any band is attached. Existing engineers are placed last, with their pay protected.

The Example Company#

Every property below belongs to a hypothetical company with no name and no history beyond this table.

PropertyValue in the exampleWhy it matters
Legal entityOne German GmbH with one site (Betrieb)The Works Constitution Act (BetrVG) applies; company, site, and employer headcounts coincide
Workers in totalAbout 70Above 50, so no small-employer exemption; below 100, so no gap report under the directive
Engineers40, in six product teamsPast part 1’s twenty-engineer threshold
Works councilElected; no collective agreement on payCo-determination over the pay system (section 87(1) number 10 BetrVG); consent per placement (section 99)
Starting stateSix ad hoc titles, from Junior Developer to Principal Engineer; pay negotiated per hire; no written criteriaThe inventory will find titles that do not match pay

Part 1 explains the two legal triggers in the works council row. Whether Germany has finished transposing the directive changes nothing here. The BetrVG steps apply either way, and the Article 6 duty arrives through the transposing law.

The Build Order#

Ten steps, each with an owner and an artifact. The order carries the argument: bands wait for the back-test, publication waits for the works agreement, and placement waits for publication.

unexplained mismatches

every mismatch classified

change request

co-design

co-design

1. Open the works council track

2. Inventory titles and pay

3. Choose levels and scope units

4. Write numbered criteria per factor

5. Back-test against past decisions

6. Attach one band per level

7. Conclude the works agreement

8. Publish v1.0

9. Place existing engineers, consent per person

10. Run promotion cycles

New version through the same agreement path

The Head of Engineering and the People lead open the track with a short process agreement: members, steps, dates. The People team runs the inventory, one confidential row per engineer: title, pay, start date, last promotion, team, and the manager’s informal level. Section 80(2) BetrVG lets the works council inspect gross pay lists. In a council this size, the chair or a designated member does it, so plan for them to see the sheet. Two or three writers draft the criteria. All managers and a sample of engineers review the draft, and uninvolved managers run the back-test.

Opening the track at step 1 costs a slower start and shared drafting. In return, the agreement at step 7 is a signature on a text both sides already know. The step 9 consent requests then arrive without surprises. The failure mode is the working group becoming the only place engineers hear about the framework. Keep a separate feedback round with engineers who are not council members.

Levels and the Criteria Matrix#

Name the levels after the unit of scope each one owns, in the company’s own units. A level whose unit does not exist in the company stays unpublished.

LevelTitleScope unit it ownsPublished when
L1Engineer ITasks someone else scopedAlways
L2Engineer IIFeatures, end to endAlways
L3Senior EngineerOne service or componentAlways
L4Lead Engineer (IC, no reports)One team’s whole systemAlways
L5Staff Engineer (optional)One cross-team technical areaWhen such an area exists and has no owner

Lead Engineer is an IC title. If the company also has team leads with reports, rename L4, for example to Senior Engineer II. The operating model for L5 is in The Solver Track.

Four rules govern the matrix.

  • Every criterion has an ID: factor letter, level number, item number. S is skills, E effort, R responsibility, C collaboration and communication, W working conditions. S3.1 is the first skills criterion at Senior Engineer.
  • The adjective test: two managers must be able to point to the same artifact (design document, pull request, incident review) as evidence. If they cannot, rewrite the cell.
  • Criteria are cumulative: a level includes every level below it.
  • Collaboration and communication are met at the target level, like skills, from Engineer II upward. Article 4(4) says “relevant soft skills shall not be undervalued”. CircleCI’s matrix is a precedent: technical skills were 20% of all competencies, and “the same proportion of skills is dedicated to feedback, communication, and collaboration”.

Numbering invites one objection. Monzo wrote that its rebuilt framework “didn’t try to codify exactly what someone needs to achieve”. Dropbox states that “This framework is not a promotion checklist for your role”. Here, numbered behaviours are evidence anchors: they say where to look. Calibration keeps the authority to overrule a literal reading, and every overrule is written down with the IDs it weighed. The cost is that each cell takes longer to write than an adjective and needs an evidence type.

Skills#

What the person designs, builds, and reviews. The evidence column names the artifact a packet links to. The other factor tables use the same artifact types.

LevelIDObservable behaviourEvidence
Engineer IS1.1Implements tasks scoped by someone else and merges them after reviewMerged pull requests
S1.2Adds tests that fail without the changeTest diffs in those pull requests
Engineer IIS2.1Splits a feature into tasks and delivers it without a design from someone elseFeature ticket and its task breakdown
S2.2Reviews teammates’ pull requests and finds defects before mergeReview comments that led to changes
Senior EngineerS3.1Writes design documents for data-model or public-API changes and revises them after reviewDesign documents with review history
S3.2Diagnoses production faults that cross service boundariesIncident reviews naming the diagnosis
Lead EngineerS4.1Maintains the written technical direction for the team’s system: patterns to adopt, components to retireDirection document and its change history
S4.2Reviews every design that changes the system’s boundariesDesign approvals
Staff EngineerS5.1Drives technical decisions that change how several teams build, such as shared libraries or data contractsDecision records adopted by other teams
S5.2Reviews designs from other teams’ Lead EngineersReview comments on other teams’ designs

Effort#

The complexity and sustained load of the work. Hours, availability, and response speed stay out, for the reasons part 1 gives.

LevelIDObservable behaviour
Engineer IE1.1Works on tasks with a known solution path and written acceptance criteria
Engineer IIE2.1Works on features where the solution path needs investigation before coding
Senior EngineerE3.1Works on problems with unclear requirements and settles them with product before building
E3.2Works on changes that span several components, where a fix in one breaks assumptions in another
Lead EngineerE4.1Balances the team’s competing workstreams (features, reliability, debt) and states the trade-off in planning
Staff EngineerE5.1Works on cross-team problems with no agreed problem statement, over more than one quarter

Responsibility#

Scope owned, in the company’s units.

LevelIDObservable behaviour
Engineer IR1.1Owns assigned tasks until they are deployed
Engineer IIR2.1Owns features from ticket to production, including rollout and follow-up fixes
Senior EngineerR3.1Owns one service or component: its backlog, reliability targets, and runbook
R3.2Leads delivery of a multi-week project inside the team
Lead EngineerR4.1Is accountable for the technical health of the team’s whole system
R4.2Acts as incident commander for incidents in the team’s system
Staff EngineerR5.1Is accountable for one cross-team technical area, such as authentication or the data pipeline

Collaboration and communication#

Same weight as skills from Engineer II upward. Communication as the Skill Gate for the Next Engineering Level argues that the gate arrives well before Staff.

LevelIDObservable behaviour
Engineer IC1.1Asks for help with a specific question and what has already been tried
C1.2Writes pull-request descriptions a reviewer can follow without a call
Engineer IIC2.1Explains the reason behind each review comment
C2.2Pairs with Engineer I colleagues on their tasks
Senior EngineerC3.1Mentors Engineer I and II colleagues on their current work
C3.2Explains technical trade-offs to product in writing, with options
Lead EngineerC4.1Resolves technical disagreements in the team and records the decision
C4.2Represents the team’s system in cross-team planning
Staff EngineerC5.1Builds agreement across teams on decisions none of them owns alone
C5.2Writes documents other teams adopt as their standard

Working conditions#

Described per level, paid by policy, and left out of promotion decisions.

LevelIDCondition attached to the level
Engineer IW1.1Shadows the team’s on-call rota during onboarding, then joins as secondary
Engineer IIW2.1Takes primary shifts on the team’s rota
Senior EngineerW3.1Primary on the rota and first escalation for the owned service
Lead EngineerW4.1On the rota; incident command is covered by R4.2
Staff EngineerW5.1Cross-team escalation point; joins a team rota only where staffing needs it

An on-call policy inside the works agreement pays one allowance per on-call week plus incident time worked outside hours, identical at every level. Nobody is promoted or held back for rota participation. Being on the rota is a working condition. Commanding an incident is a responsibility, assessed under R4.2. Indirect discrimination, in the directive, is “an apparently neutral provision, criterion or practice” that “would put persons of one sex at a particular disadvantage”. The exception is objective justification. A rota criterion is worth testing against that definition. Writing the W row closes the Article 4(4) gap part 1 describes. Review the allowance on its own schedule, because one set too low lets senior engineers drift off the rota.

Back-Testing Before Bands#

Run the draft against the company’s own history before step 6.

  1. Collect every promotion, hire, and level-relevant pay decision from the last two review cycles, plus a sample of current engineers at each level.
  2. A manager who was not involved applies the draft to the evidence available at the time, without seeing the outcome. They record the level and the IDs that decided it.
  3. Classify each mismatch into one of three classes:
    • the criterion is wrong: rewrite it
    • the past decision was inconsistent: record it as a placement case
    • the evidence is missing: let it shape the packet format
  4. Repeat until every mismatch has a class.

The back-test is done when the mismatches are explained, not when they are zero. CircleCI tested its rebuilt matrix with “trial performance reviews”, feedback workshops, and a focus group of engineers, managers, and HR. The back-test is the same move with the outcome hidden. The rows below are illustrative placeholders.

CasePast outcomeDraft outcomeCriterion IDs that decided itMismatch classAction
Promotion ASenior DeveloperEngineer IIR3.1 not evidencedPast decision inconsistentPlacement case
Hire BDeveloperEngineer IIS2.1, C2.1MatchNone
Engineer CLead DeveloperSenior EngineerR4.1 scope does not exist in C’s teamPast decision inconsistentPlacement case
Promotion DSenior DeveloperLead EngineerS4.1 met, C4.1 metCriterion wrong (too loose)Rewrite the S3 to S4 boundary

The step can embarrass past decisions, and that is its value. The alternative is the same discovery after bands are announced. The trap is bending criteria until every past decision fits. An inconsistent past decision is a legitimate class.

One Band per Level#

Each level gets a midpoint, M1 to M5, and a band from the midpoint minus h to the midpoint plus h. The framework names the structure, and the compensation review sets the money. Set each midpoint from market data at a chosen percentile. Ravio’s band guide notes that “Most organisations begin by targeting the 50th percentile.” The ratio between adjacent midpoints comes from the data and will not be constant. State the width formula, because providers define spread differently. Ravio suggests 15 to 25 percent without saying whether that is total width or each side of the midpoint. Decide whether adjacent bands overlap. Overlap lets an experienced Engineer II earn more than a newly promoted Senior Engineer. Both choices are defensible once the rule is written.

Write the within-band progression rule. Article 6(1) covers “pay, pay levels and pay progression”, and recital 35 names “individual performance, skills development and seniority” as example criteria. For instance: position in band moves at the annual review, on evidence against the current level’s criteria. Market adjustments move the band and leave the position inside it. Say whether time in level counts. New hires enter the band of the level the interview evidence supports. Budget the raises to band minimum that placement will require while the band width is still a variable.

From Works Agreement to Placement#

Steps 7 to 9 produce the works agreement, the published framework, and the placement letters. The agreement covers more than the criteria:

  • levels, criteria, and the band structure: co-determined under section 87(1) number 10 BetrVG, which covers pay principles and methods, including how pay is distributed across levels. The pay level itself and the total budget stay with the employer
  • the promotion evidence format and calibration rules: general appraisal principles need consent under section 94(2)
  • the on-call allowance and rota expectations, so that condition and pay sit in one text with the levels
  • placement and each later promotion: each grouping or regrouping needs consent under section 99
  • the change process: section 87(1) number 10 covers changes to pay methods as well as their introduction

Oppenhoff states that the co-determination procedure “must be concluded in advance”, which is why the track opens at step 1. If the two sides do not agree, section 87(2) sends the matter to a conciliation board (Einigungsstelle), whose ruling replaces the agreement. Budget time for it. Publish v1.0 and the placement process in the same week, then deliver placement letters within a set window. That way engineers read the criteria before their own placement letter.

Placement is where section 99 does its work, in companies with more than 20 eligible employees. The employer informs the works council before each grouping (Eingruppierung) or regrouping (Umgruppierung) and asks for consent. The Federal Labour Court defines grouping as placing an employee into a company pay scheme. It adds, in its own words, “Eine Umgruppierung ist jede Änderung dieser Einreihung”: any change to that placing is a regrouping. Moving 40 engineers into the new levels is therefore 40 consent requests. A refusal must reach the employer in writing, with reasons, within one week. Silence for one week after complete information counts as consent. A court can substitute consent after a refusal. Each placement therefore needs a written rationale citing criterion IDs.

Four outcomes cover the 40 letters. Where level and pay both fit, only the title changes. The letter cites the IDs that place the engineer. Pay below the band minimum rises to the minimum on a stated date. A new level below the current title leaves pay where it is. A contractual title, or one whose change reads as a demotion, changes only by agreement or a change notice. The framework uses agreement. Any other old title can stay as a personal title. The letter adds a development plan naming the IDs for the next level, with a review date. Pay above the band maximum is kept and red-circled: no band-based increases until the band catches up or the engineer is promoted. The letter states the protection, its review date, and the route to the matching level.

Do not cut pay through re-levelling. Pay fixed in an employment contract changes by agreement or through a change-notice dismissal (Änderungskündigung, section 2 KSchG). Neither belongs in a framework launch. Give every red circle a review date, and check the list by sex before launch. A protected premium that lands mostly on one sex is a pay difference the employer will have to explain. Article 18(1), and section 22 AGG in German law today, put the burden of proof on the employer. That applies once a worker establishes facts from which discrimination “may be presumed”. A UK case shows the time limit, though it is not German law. In Fearnon v Smurfit [2008] NICA 45, the Northern Ireland Court of Appeal ruled on that time limit. Red-circling stays a defence only while the employer can show it is still justified.

Appeals run beside the council’s refusal right. An engineer files a written appeal within four weeks of the letter. A panel that excludes the proposing manager answers in writing, citing criterion IDs. Pay protection, the four-week window, and the panel are policy choices of the example. Section 99 consent and the contract rules come from statute. Pay protection costs money, in raises to the band minimum and in red-circled premiums. The alternative costs contract changes and trust.

Promotions and Versioning#

The manager proposes a packet, and an engineer can ask for one. All managers plus at least one senior IC review every packet of the cycle in one calibration session. Calibration may overrule a literal reading, as the Monzo compass point in part 1 argues, and writes its rationale citing IDs. The example’s promotion rule: every target-level criterion is evidenced or listed as a known gap. Calibration promotes with at most one known gap, never in responsibility, because each level is defined by the scope it owns. For each gap, calibration also asks whether the engineer had the chance to show it. A missing chance is a manager action, recorded with the gap. Each promotion is a regrouping with its own section 99 consent request.

SectionContentLimit
HeaderName, current and proposed level, framework version, period coveredOne line
SkillsTarget-level criterion IDs, each linked to artifactsBoth target-level IDs
Effort and responsibilityTarget-level IDs with artifacts, per factorOne or two IDs each
Collaboration and communicationTarget-level IDs with artifactsSame count as skills
Working conditionsNot assessed; see the on-call policyNone
Known gapsTarget-level criteria not yet evidenced, stated by the proposerShort list
Manager statementWhy now, in prose150 words or fewer
Calibration outcomeDecision, IDs relied on, dissent recordedShort paragraph
Works councilDate and outcome of the section 99 consent requestOne line

The Big Tech packet in Career Levels in Tech Companies runs ten to fifteen pages with case studies. One page is enough here: each row links to artifacts, and calibration opens them. The weak point is thin evidence links, which the known-gaps row and calibration questions exist to catch.

Version every release. Dropbox’s public framework carries “Guideline Version: v2.9.1”, and Monzo wrote that it was “storing all our frameworks in GitHub”. Every placement and promotion records the version it was decided under. Keep a changelog, and agree in the works agreement which classes of change need a new consent round. Schedule the first review after a fixed period of use.

Pitfalls When Building#

Adjective criteria. Strong ownership cannot be cited. Apply the adjective test and keep one behaviour per cell.

Calibrating without a back-test. The first calibration then doubles as the test, with bands already announced.

Bringing a finished framework to the works council. A finished draft reverses the order and risks a conciliation board at the end.

Cutting pay or contractual titles at placement. Protect pay, time-limit red circles, and agree title changes or keep personal titles.

On-call participation as a promotion criterion. Pay it through the flat allowance and keep it in the W row.

Adapting the Example#

The example is the default build. Change it only where the table names your situation.

Your situationChange to the example
No works councilSteps 1 and 7 become an engineer feedback round; keep publication, placement letters, and appeals.
A collective agreement covers payMap the levels onto its pay groups. Section 87(1) yields to a collective agreement that settles the matter; section 99 grouping still applies.
No cross-team technical area without an ownerDo not publish L5.
People managers existOpen a manager track, built separately.
Under 50 workersNational law may exempt the pay-progression part of Article 6(1). Write the criteria anyway; the levels still decide pay.
Under about 20 engineersPart 1’s override: a role expectations document.
Employer in the NetherlandsConsent step under WOR article 27(1)(c); the German placement mechanics above do not transfer.

The default holds for a German employer past roughly twenty engineers with a works council and no collective agreement on pay. Elsewhere in the EU, keep the build and swap in the national consent step. The table names the overrides, and each keeps the criteria, the placement letters, and the appeal route. The first concrete action is the same in every case: open the works council conversation, or the engineer feedback round, and run the inventory.

References#

Engineering Progression Frameworks

A 2-part guide for engineering managers and founders: how a progression framework's shape follows company size, type, and EU pay law, then a worked example of building one.

Progress 2/2 posts completed

All posts in this series

Part 2: A Worked Example for a 40-Engineer EU Company

Related posts

Engineering Progression Frameworks: Shape Follows Company Size, and in the EU, Pay Law

How engineering progression frameworks change with company size and type, how the EU Pay Transparency Directive treats level criteria, and what US range laws ask.

career · engineering-management · organizational-design +2

The Staff Engineer Solver Archetype: An Operating Model

A handbook for the informal fast track: recognise the Solver role, codify its operating model before the role calcifies, and time it against the title-and-pay talk.

career · engineering-management · organizational-design +1

Engineering Team Documentation: Working Agreements, Definition of Done, and On-Call Docs

The team documents a mature engineering team owns: onboarding, working agreements, Definition of Done, on-call, knowledge transfer, and what makes each one good.

engineering-culture · hiring · documentation +4

The Expectation Gap: When Hiring Promises Meet Workplace Reality

An analysis of bait-and-switch hiring, power imbalances, and underemployment, with actionable frameworks for employees to protect themselves and employers to build trust.

hiring · career · team-dynamics +3

Role Expectations in Software Teams: RACI and DACI Frameworks

Unclear ownership stalls software delivery. How RACI and DACI assign decision rights, where each one fits, and the pitfalls that kill adoption.

team-management · engineering-management · productivity +2