Metrics · LGTM · G
the Gap
Does the record agree with what people say?
The Gap is the difference between what the session record implies about how work is going (the structural reading) and what people report when asked (the felt reading). The two should roughly agree. When they diverge, something is wrong with the work — or with the safety of saying so.
What it reads
- ●The structural indices, computed from sessions: Landing, friction, context cost, reuse
- ●The felt reading: the 16-statement check-in instrument, answered on the person's terms
- ●A group of five or more — the Gap is never computed for fewer
How it’s computed
Normalize a small set of session-derived indices into a 0–100 structural reading, take the mean felt score from check-ins over the same window, and subtract.
// the structural side — read from the record
const structural = normalize100({
landing: landing(team, window),
friction: retryLoops(sessions) / landed, // repeated failing tool calls,
// "no, not like that" turns
contextCost: median(sessions.map(timeToFirstProductiveAction)),
reuse: share(sessions, s => touchesSharedKnowledge(s)),
});
// the felt side — the same instrument behind /score
const felt = mean(checkIns(team, window).map(c => c.score)); // 0–100
const gap = structural - felt; // per lens and composite
// groups of 5+ only · always shown with both components
How to read it
- →A positive Gap (structural looks better than people feel) usually means an unwritten constraint: something grinds that the artifact stream can't see.
- →A rising structural with a falling felt is the signature to take most seriously — the work is “improving” while the people say otherwise.
- →A Gap near zero is the goal state: the record and the people agree.
How it gets misused
- ✕The Gap without its two components is uninterpretable — always publish structural and felt beside it.
- ✕Chasing a zero Gap by adjusting the survey, rather than the work, defeats the entire instrument.