These cubes capture user feedback through two mechanisms: periodic surveys (following the SPACE framework) and session-specific assessments. Both provide qualitative insights that complement quantitative session metrics.
Source Table:survey_responsesDescription: Analytics for scheduled survey responses including SPACE framework questions for discovery and delivery teams.
Percentages are taken over respondents who answered the NPS question. Before
methodology v1.1 the denominator was every response, so any assessment or survey that
skipped NPS pulled both percentages — and therefore the NPS itself — toward zero.
These scores combine multiple responses into normalized 0-100 scales.
Every Likert answer is normalized with the same convention — min-subtracted, higher is
always better — so the scale floor maps to 0 and the ceiling to 100 regardless of
whether the underlying question is Likert-5, Likert-7 or reverse-scored:
likertToPercent(x, min, max, reverse) = ((reverse ? max + min - x : x) - min) / (max - min) * 100
Reverse-scored questions (where a low answer is the good outcome, such as cognitive load
or verification frequency) are inverted before normalizing. Unanswered questions are
excluded from the average rather than counted as zero, and if a composite’s component was
never asked, the remaining components’ weights are renormalized.
Measure
Description
Calculation
helpfulnessScore
Overall helpfulness
mean(likertToPercent(task_helpfulness, 1..7))
accuracyScore
Trust/accuracy score
½ likertToPercent(deployment_confidence, 1..5) + ½ likertToPercent(verification_frequency, 1..7, reversed)
speedScore
Speed perception
Mean of the speed comparison weights (much faster 100, somewhat faster 75, about the same 50, somewhat slower 25, much slower 0) over answered responses; “Not sure” is excluded
clarityScore
Cognitive clarity
½ likertToPercent(cognitive_load, 1..7, reversed) + ½ likertToPercent(mental_alignment, 1..5)
The formulas are defined once in apps/server/src/shared/scoring/, which generates both
the cube SQL and the unit-test expectations.
These formulas changed in methodology v1.1. Previously each composite used a different
zero point — a Likert-7 floor mapped to 14.3 and a Likert-5 floor to 20, so “0-100”
scores with different effective floors sat side by side on the same dashboard. Only the
ceiling (100) was correct in every case. Min-subtracting every component fixes the floor.
What to expect when comparing to older values:
helpfulnessScore, accuracyScore and clarityScore shift down by roughly 4-9
points. The shift is largest for low scores and disappears entirely at 100.
speedScore shifts up substantially. In addition to the zero-point problem it had
two bugs of its own: it divided by every assessment rather than only those that
answered the question, and three of its five choice weights matched labels that never
existed in the stored data. In practice it reported approximately “the percentage of
sessions rated much faster”, so it read close to zero.
Underlying survey answers are unchanged; only the derived scores moved.