Benchmarks
Every level, gap and week in SkillForge is arithmetic over the rows below. The model reads a resume and reports what it found; it never picks a number. This is the ruler it is measured against — published so you can disagree with it specifically.
System designblockingChoosing and defending an architecture under real constraints — traffic, latency, failure.needs 6.0·×1.6·16h / level
- 2Can name the componentsUses the vocabulary: load balancer, cache, queue, replica.
- 4Has drawn one under loadA diagram with an identified bottleneck, not just boxes.
- 6Has estimated capacity and justified a cacheNumbers behind the choice — QPS, payload size, hit rate.
- 8Has broken a real system and written it upA load test that found the limit, and a postmortem.
Docker & CI/CDblockingPackaging an application and getting it to production without touching a server.needs 6.0·×1.2·9h / level
- 2Has run someone else's containerdocker run appears in a README.
- 4Has written a working DockerfileAn image that builds and starts from a repo you own.
- 6Has a pipeline that gates mergesCI runs tests and blocks a red build.
- 8Has deployed on merge, with a rollbackAutomated deploy plus a documented way back.
DSA — graphs & DPThe problem-solving round. Graphs and dynamic programming are where campus interviews concentrate.needs 8.0·×1.5·27h / level
- 2Arrays, strings, hashingComfortable with the basics under time pressure.
- 4Trees and recursionTraversals and divide-and-conquer without hints.
- 6Graphs and shortest pathsBFS/DFS, Dijkstra, topological sort from scratch.
- 8Dynamic programming under time pressureRecognises the state and transition unaided.
SQL & data modellingDesigning a schema and making the database do the work efficiently.needs 7.0·×1.4·14h / level
- 2Reads and writes basic SQLSELECT, JOIN, GROUP BY.
- 4Designs a normalised schemaSensible keys and relationships in a real project.
- 6Reads a query planUsed EXPLAIN to make something measurably faster.
- 8Understands the cost of an indexCan say when an index hurts writes, with evidence.
ConcurrencyDoing several things at once without corrupting state or deadlocking.needs 7.0·×1.3·12h / level
- 2Knows the primitivesCan name threads, locks, channels, async.
- 4Has written concurrent code that worksA parallel or async path in a real project.
- 6Has found and fixed a raceA specific bug, and what made it reproducible.
- 8Designs to avoid shared stateChose an architecture that makes races impossible.
REST & API designDesigning an interface other people have to live with.needs 7.0·×1.3·12h / level
- 2Can call an APIConsumed a third-party HTTP API.
- 4Has built endpoints that workA CRUD surface in a shipped project.
- 6Handles errors, auth and paginationStatus codes and auth chosen on purpose.
- 8Versions without breaking clientsEvolved a live API compatibly.
Security basicsThe failures that get student projects rejected in review.needs 5.0·×1.1·9h / level
- 2Keeps secrets out of the repoEnvironment variables, not committed keys.
- 4Hashes passwords and validates inputNo plaintext credentials, no string-built SQL.
- 6Implements authz, not just authnChecks what a user may do, not only who they are.
- 8Threat-models a featureIdentified an abuse case before shipping.
CachingTrading freshness for speed on purpose, and knowing what it costs.needs 5.0·×1.0·10h / level
- 2Knows what a cache is forCan explain the read-path benefit.
- 4Has added oneRedis or in-memory caching in a project.
- 6Has an invalidation strategyTTL or explicit invalidation chosen deliberately.
- 8Has reasoned about a stampedeHandled cold starts or thundering herds.
TestingProving code works, and keeping it working while it changes.needs 5.0·×1.0·9h / level
- 2Has written a testAt least one test file exists.
- 4Tests the awkward casesBoundary and failure cases, not just the happy path.
- 6Tests across a boundaryAn integration test against a real database or HTTP layer.
- 8Uses tests to drive a changeA regression test written before the fix.
Linux & shellBeing productive on a machine with no GUI, which is where the code runs.needs 5.0·×0.8·8h / level
- 2Moves around a filesystemComfortable with the everyday commands.
- 4Chains tools togetherPipes, grep, awk to answer a real question.
- 6Debugs a running processRead logs, checked ports, inspected resource use.
- 8Scripts a repeatable operationA script other people run.
ObservabilityKnowing what production is doing before a user tells you.needs 4.0·×0.9·10h / level
- 2Logs thingsDeliberate log statements, not leftover prints.
- 4Uses structured logsMachine-readable fields that can be queried.
- 6Measures latency and error rateMetrics, and a sense of what normal looks like.
- 8Traced a slow request end to endFound a bottleneck across services.
Version controlWorking on a codebase with other people without losing work.needs 5.0·×0.7·6h / level
- 2Commits and pushesA repository with a history.
- 4Branches and mergesFeature branches and resolved conflicts.
- 6Writes reviewable changesFocused commits with messages that explain why.
- 8Recovers from a mistakeBisect, revert or reflog used in anger.
The model reads the resume once and reports evidence — booleans and counts like “two projects use this, neither shipped, no tests”. It is never asked for a score, and every flagged line must cite a page and line that really contains it.
Code sums what that evidence is worth using the fixed table below, then clamps to 0–10. The weights encode an opinion worth saying out loud: a shipped thing beats a built thing, a measured outcome beats both, and a bare claim is worth almost nothing.
The number is anchored to the track's human-written ladder — the highest rung the evidence actually reaches. That is why a level can always be explained in words, not just digits.
The role's benchmark sets the required level and its weight. gap = required − proven; weeks-to-close = gap × hours-per-level ÷ your weekly hours. Readiness is the weighted shortfall across all tracks, out of 100.
A student whose resume shows: the skill named, two projects using it (neither shipped), a public repository, and a B in the related coursework. `provenLevel()` scores that — at render time, on this page — as:
- Named on the resume
- +1.0
- 2 projects
- +2.0
- Public repository
- +0.4
- Coursework B
- +0.6
- Proven levelreaches the “Has drawn one under load” rung
- 4.0
- What System design requires for this role
- 6.0
- Gap, and weeks to close at 9 hrs/week
- 2.0 · 4 wks
Nothing above came from a template — this example runs through the same exported function the analysis uses, so it cannot drift from the real scoring.
Four lines of TypeScript, applied identically to every student and every role. Switching your target role re-runs only these — which is why it takes milliseconds and costs nothing.
Summed, clamped to 0–10, then snapped to the nearest rung of the track’s ladder. Adding evidence can never lower a level.