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.
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.
| Property | Value in the example | Why it matters |
|---|---|---|
| Legal entity | One German GmbH with one site (Betrieb) | The Works Constitution Act (BetrVG) applies; company, site, and employer headcounts coincide |
| Workers in total | About 70 | Above 50, so no small-employer exemption; below 100, so no gap report under the directive |
| Engineers | 40, in six product teams | Past part 1’s twenty-engineer threshold |
| Works council | Elected; no collective agreement on pay | Co-determination over the pay system (section 87(1) number 10 BetrVG); consent per placement (section 99) |
| Starting state | Six ad hoc titles, from Junior Developer to Principal Engineer; pay negotiated per hire; no written criteria | The 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.
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.
| Level | Title | Scope unit it owns | Published when |
|---|---|---|---|
| L1 | Engineer I | Tasks someone else scoped | Always |
| L2 | Engineer II | Features, end to end | Always |
| L3 | Senior Engineer | One service or component | Always |
| L4 | Lead Engineer (IC, no reports) | One team’s whole system | Always |
| L5 | Staff Engineer (optional) | One cross-team technical area | When 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.
| Level | ID | Observable behaviour | Evidence |
|---|---|---|---|
| Engineer I | S1.1 | Implements tasks scoped by someone else and merges them after review | Merged pull requests |
| S1.2 | Adds tests that fail without the change | Test diffs in those pull requests | |
| Engineer II | S2.1 | Splits a feature into tasks and delivers it without a design from someone else | Feature ticket and its task breakdown |
| S2.2 | Reviews teammates’ pull requests and finds defects before merge | Review comments that led to changes | |
| Senior Engineer | S3.1 | Writes design documents for data-model or public-API changes and revises them after review | Design documents with review history |
| S3.2 | Diagnoses production faults that cross service boundaries | Incident reviews naming the diagnosis | |
| Lead Engineer | S4.1 | Maintains the written technical direction for the team’s system: patterns to adopt, components to retire | Direction document and its change history |
| S4.2 | Reviews every design that changes the system’s boundaries | Design approvals | |
| Staff Engineer | S5.1 | Drives technical decisions that change how several teams build, such as shared libraries or data contracts | Decision records adopted by other teams |
| S5.2 | Reviews designs from other teams’ Lead Engineers | Review 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.
| Level | ID | Observable behaviour |
|---|---|---|
| Engineer I | E1.1 | Works on tasks with a known solution path and written acceptance criteria |
| Engineer II | E2.1 | Works on features where the solution path needs investigation before coding |
| Senior Engineer | E3.1 | Works on problems with unclear requirements and settles them with product before building |
| E3.2 | Works on changes that span several components, where a fix in one breaks assumptions in another | |
| Lead Engineer | E4.1 | Balances the team’s competing workstreams (features, reliability, debt) and states the trade-off in planning |
| Staff Engineer | E5.1 | Works on cross-team problems with no agreed problem statement, over more than one quarter |
Responsibility#
Scope owned, in the company’s units.
| Level | ID | Observable behaviour |
|---|---|---|
| Engineer I | R1.1 | Owns assigned tasks until they are deployed |
| Engineer II | R2.1 | Owns features from ticket to production, including rollout and follow-up fixes |
| Senior Engineer | R3.1 | Owns one service or component: its backlog, reliability targets, and runbook |
| R3.2 | Leads delivery of a multi-week project inside the team | |
| Lead Engineer | R4.1 | Is accountable for the technical health of the team’s whole system |
| R4.2 | Acts as incident commander for incidents in the team’s system | |
| Staff Engineer | R5.1 | Is 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.
| Level | ID | Observable behaviour |
|---|---|---|
| Engineer I | C1.1 | Asks for help with a specific question and what has already been tried |
| C1.2 | Writes pull-request descriptions a reviewer can follow without a call | |
| Engineer II | C2.1 | Explains the reason behind each review comment |
| C2.2 | Pairs with Engineer I colleagues on their tasks | |
| Senior Engineer | C3.1 | Mentors Engineer I and II colleagues on their current work |
| C3.2 | Explains technical trade-offs to product in writing, with options | |
| Lead Engineer | C4.1 | Resolves technical disagreements in the team and records the decision |
| C4.2 | Represents the team’s system in cross-team planning | |
| Staff Engineer | C5.1 | Builds agreement across teams on decisions none of them owns alone |
| C5.2 | Writes documents other teams adopt as their standard |
Working conditions#
Described per level, paid by policy, and left out of promotion decisions.
| Level | ID | Condition attached to the level |
|---|---|---|
| Engineer I | W1.1 | Shadows the team’s on-call rota during onboarding, then joins as secondary |
| Engineer II | W2.1 | Takes primary shifts on the team’s rota |
| Senior Engineer | W3.1 | Primary on the rota and first escalation for the owned service |
| Lead Engineer | W4.1 | On the rota; incident command is covered by R4.2 |
| Staff Engineer | W5.1 | Cross-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.
- Collect every promotion, hire, and level-relevant pay decision from the last two review cycles, plus a sample of current engineers at each level.
- 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.
- 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
- 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.
| Case | Past outcome | Draft outcome | Criterion IDs that decided it | Mismatch class | Action |
|---|---|---|---|---|---|
| Promotion A | Senior Developer | Engineer II | R3.1 not evidenced | Past decision inconsistent | Placement case |
| Hire B | Developer | Engineer II | S2.1, C2.1 | Match | None |
| Engineer C | Lead Developer | Senior Engineer | R4.1 scope does not exist in C’s team | Past decision inconsistent | Placement case |
| Promotion D | Senior Developer | Lead Engineer | S4.1 met, C4.1 met | Criterion 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.
| Section | Content | Limit |
|---|---|---|
| Header | Name, current and proposed level, framework version, period covered | One line |
| Skills | Target-level criterion IDs, each linked to artifacts | Both target-level IDs |
| Effort and responsibility | Target-level IDs with artifacts, per factor | One or two IDs each |
| Collaboration and communication | Target-level IDs with artifacts | Same count as skills |
| Working conditions | Not assessed; see the on-call policy | None |
| Known gaps | Target-level criteria not yet evidenced, stated by the proposer | Short list |
| Manager statement | Why now, in prose | 150 words or fewer |
| Calibration outcome | Decision, IDs relied on, dissent recorded | Short paragraph |
| Works council | Date and outcome of the section 99 consent request | One 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 situation | Change to the example |
|---|---|
| No works council | Steps 1 and 7 become an engineer feedback round; keep publication, placement letters, and appeals. |
| A collective agreement covers pay | Map 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 owner | Do not publish L5. |
| People managers exist | Open a manager track, built separately. |
| Under 50 workers | National law may exempt the pay-progression part of Article 6(1). Write the criteria anyway; the levels still decide pay. |
| Under about 20 engineers | Part 1’s override: a role expectations document. |
| Employer in the Netherlands | Consent 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#
- Directive (EU) 2023/970 on pay transparency (EUR-Lex) (opens in new tab) - Full text, including the Article 3 definition of indirect discrimination, the Article 4(4) factors, Article 6(1) on pay-progression criteria, Article 18 on the burden of proof, and recital 35.
- Section 87 Betriebsverfassungsgesetz (gesetze-im-internet.de) (opens in new tab) - Works council co-determination over pay principles and pay methods, and the conciliation board when no agreement is reached.
- Section 94 Betriebsverfassungsgesetz (gesetze-im-internet.de) (opens in new tab) - Works council consent for general appraisal principles.
- Section 99 Betriebsverfassungsgesetz (gesetze-im-internet.de) (opens in new tab) - Works council consent for grouping and regrouping individual employees, refusal grounds, the one-week deadline, and court substitution.
- Section 80 Betriebsverfassungsgesetz (gesetze-im-internet.de) (opens in new tab) - The works council’s right to inspect gross pay lists.
- Section 2 Kündigungsschutzgesetz (gesetze-im-internet.de) (opens in new tab) - The change-notice dismissal, the route for changing contractual terms without the employee’s agreement.
- BAG, 25 November 2025, 1 ABR 43/24 (Bundesarbeitsgericht) (opens in new tab) - Federal Labour Court decision defining grouping and regrouping under section 99.
- Job architecture: the key to modern HR work and legally compliant remuneration (Oppenhoff) (opens in new tab) - German law firm analysis of co-determination over job levels and of when a title change amounts to a demotion.
- Why we re-designed our engineering career paths at CircleCI (opens in new tab) - How CircleCI rebuilt its competency matrix, weighted communication equal to technical skill, and tested it with trial reviews and a focus group.
- Introducing progression.monzo.com (Monzo) (opens in new tab) - Why Monzo published its progression frameworks and kept them in version control.
- Lessons from implementing progression frameworks at scale (Monzo) (opens in new tab) - How a published framework drifted into a checklist and why the rebuild stopped short of codifying every achievement.
- Dropbox Engineering Career Framework (opens in new tab) - A versioned public engineering framework, framed as guidance rather than a promotion checklist.
- How to create salary bands (Ravio) (opens in new tab) - A compensation platform’s guide to setting band midpoints and range spread from market data.
- Red is the colour: Fearnon v Smurfit (Thompsons Solicitors) (opens in new tab) - Summary of a Northern Ireland Court of Appeal ruling that red-circling justifies a pay difference only for a limited time.
- Fearnon v Smurfit [2008] NICA 45 (Judiciary NI) (opens in new tab) - The full Northern Ireland Court of Appeal judgment on time-limited red-circling.
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.
All posts in this series
Related posts
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
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
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
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
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