Overview
Derivation is the process of transforming raw entity definitions into concrete role expectations. Given a discipline, track, and grade, the engine produces exact skill levels, behaviour maturities, and responsibilities.
See Core Model for the entity overview and formula.
Skill Derivation
Every skill goes through a four-step derivation pipeline.
Step 1: Determine Skill Type
Each discipline classifies every skill into one of three tiers:
| Tier | Constant | Purpose |
|---|---|---|
| coreSkills | PRIMARY |
Deepest expertise for the role |
| supportingSkills | SECONDARY |
Supporting capability |
| broadSkills | BROAD |
General awareness |
A lookup map is built once per discipline via
buildSkillTypeMap() for O(1) access during derivation.
Step 2: Get Base Level from Grade
Each grade defines base skill levels per tier:
# Example grade definition
baseSkillLevels:
primary: practitioner
secondary: working
broad: foundational
The grade's baseSkillLevels maps the skill type to a
starting level.
Step 3: Apply Track Modifier
Tracks define capability-based skill modifiers. The modifier for a skill's capability is added to the base level:
# Example track definition
skillModifiers:
delivery: 1 # +1 to ALL delivery skills
scale: -1 # -1 to ALL scale skills
The modifier shifts the level index:
derivedIndex = baseLevelIndex + trackModifier
Step 4: Clamp to Valid Range
Two constraints are applied:
-
Positive modifier cap — Positive modifiers cannot push the result above the grade's maximum base level. If the grade peaks at
practitioner, a +1 modifier cannot produceexpert. -
Range clamp — The final result must fall between
awareness(0) andexpert(4).
Final Level = clamp(0, cappedIndex, 4)
Complete Derivation Example
| Input | Value |
|---|---|
| Discipline | Software Engineering |
| Grade | L3 (primary=practitioner, secondary=working, broad=foundational) |
| Track | Platform (delivery: +1, scale: -1) |
| Skill | CI/CD (capability: delivery, tier: supportingSkills) |
- Skill type: SECONDARY (supporting skill)
- Base level: working (index 2)
- Modifier: +1 (delivery capability)
- Cap check: practitioner (index 3) ≤ max base practitioner (index 3) — OK
- Result: practitioner
Behaviour Derivation
Behaviours use a simpler derivation:
Final Maturity = Grade Base + Discipline Modifier + Track Modifier
| Step | Source | Example |
|---|---|---|
| Grade base | baseBehaviourMaturity |
developing (1) |
| Discipline modifier | behaviourModifiers.{id} |
+1 |
| Track modifier | behaviourModifiers.{id} |
0 |
| Result | Clamped to valid range | practicing (2) |
Maturities are clamped between emerging (0) and
exemplifying (4).
Responsibility Derivation
Responsibilities come from capabilities and vary by role type:
| Role Type | Source |
|---|---|
| Professional (IC) | capability.professionalResponsibilities |
| Management | capability.managementResponsibilities |
Responsibilities are selected by the derived skill level for each capability. Higher skill levels unlock additional responsibilities.
Driver Coverage
Drivers represent organizational outcomes. Coverage is calculated by checking which skills and behaviours meet specific thresholds:
| Threshold | Value |
|---|---|
| Skill level | working or above |
| Behaviour maturity | practicing or above |
| Grade | Senior threshold and above |
Each driver specifies related skills and behaviours. If the derived job meets the thresholds for a driver's dependencies, that driver is considered covered.
Modifier Policies
Positive Modifier Capping
When a track modifier is positive, the resulting level cannot exceed the grade's maximum base skill level. This prevents lower grades from gaining unrealistically high expertise just because a track emphasizes a particular area.
Negative Modifiers
Negative modifiers are not capped — they can freely reduce a level
down to awareness. This models the reduced expectations
in de-emphasized areas.
Capability-Level Modifiers
Track modifiers apply at the capability level, affecting all skills in that capability equally. This avoids per-skill configuration while still allowing meaningful differentiation between tracks.
Technical Reference
Key Functions
| Function | Module | Purpose |
|---|---|---|
buildSkillTypeMap() |
derivation.js | O(1) skill type lookup |
getSkillType() |
derivation.js | Determine skill tier |
deriveSkillLevel() |
derivation.js | Full skill derivation pipeline |
deriveSkillMatrix() |
derivation.js | All skills for a job |
deriveBehaviourProfile() |
derivation.js | All behaviours for a job |
deriveResponsibilities() |
derivation.js | Role responsibilities |
calculateDriverCoverage() |
derivation.js | Driver coverage analysis |
resolveSkillModifier() |
modifiers.js | Resolve track modifier for a skill |
Imports
import {
deriveSkillMatrix,
deriveBehaviourProfile,
deriveResponsibilities,
calculateDriverCoverage,
} from "@forwardimpact/libpathway/derivation";
Related Documentation
- Core Model — Entity overview and formula
- Lifecycle — Stages and handoffs
- Map — Data format and validation