Synthesis — the UI Quality Score (UQS) algorithm
Derives the Koder Stack 0–100 index (UQS) from the science of chapters 01–06: SUM (standardize→average), SUPR-Q (percentile sub-factors), ISO 9241-11 (3 pillars) + ISO/IEC 25010 (taxonomy), with AUTO tiers (Ngo/WCAG/KLM/Fitts formulas) and JUDGE (heuristics) and Sauro–Lewis bands. It is the conceptual source of stack-RFC-030.
This chapter derives the Koder Stack UI quality index from the science of chapters 01–06. It is the bridge between the knowledge (compendium) and the norm (
stack-RFC-030): the RFC ratifies the numbers; here is the why behind each choice being anchored in published, validated models rather than opinion.
1. Design principle of the index
Four methodological decisions, each inherited from an established model (ch. 03–04):
- Standardize-then-combine (SUM — Sauro & Kindlund 2005). Each heterogeneous metric
(seconds, %, Likert, contrast ratio) is first normalized to 0–1 against a *spec limit* (target), and only then enters a weighted average. It is the published method for collapsing usability metrics into a single score — we adopt the whole mechanic.
- Decompose into sub-factors and report each one (SUPR-Q). Never collapse everything into
a blind number: the index carries its sub-scores alongside the total (the SUPR-Q discipline and the correction of the NPS defect, which throws information away). Percentile-norm when there is a base.
- Guarantee ≥1 channel per ISO 9241-11 pillar. Effectiveness · Efficiency · Satisfaction — plus
a Visual-qualityTrust pillar (ISOIEC 25010 Interaction Capability + *UI aesthetics* + Accessibility). This prevents gaming a single dimension.
- Two measurement tiers. AUTO (deterministic, headless — formulas from ch. 010405/06)
and JUDGE (AI against the spec — heuristics from ch. 02). It mirrors the
architecture-quality.kmd(rubric) +/k-arch(judgment) pair that the Stack already uses.
2. Structure: pillars → dimensions → tier
Pillar weights in the base screen profile (profiles reweight — §4). Each dimension is 0–100.
| Pillar (ISO 9241-11 / 25010) | Dimension | Tier | Source (ch.) | Base weight |
|---|---|---|---|---|
| Effectiveness | Task success (KLM-derivable / telemetry) | AUTO/BEHAV | 05 (GOMS), 03 (ISO) | 0.18 |
| Effectiveness | Gulf-of-Execution coverage (action→visible control) | AUTO | 05 (Norman) | 0.07 |
| Efficiency | Predicted time (KLM) + Fitts/Hick per primary action | AUTO/predictive | 05, 01 | 0.15 |
| Efficiency | Economy of steps/choices (Occam, Hick, Miller) | AUTO | 01 | 0.07 |
| Satisfaction | Perceived usability (UMUX-LITE→SUS, or SUS) | SURVEY | 03 | 0.13 |
| Satisfaction | SEQ per task (when available) | SURVEY | 03 | 0.05 |
| Visual / 25010 | Computational aesthetics (Ngo OM + 8pt grid + type scale) | AUTO | 04 | 0.12 |
| Visual / 25010 | Hierarchy & salience (Von Restorff: 1 isolated CTA) | AUTO | 01, 04 | 0.05 |
| A11y / 25010 | AUTO accessibility (18 WCAG 2.2 checks) | AUTO | 06 | 0.13 |
| Trust/Heuristic | Nielsen/Shneiderman heuristics (JUDGE) | JUDGE | 02 | — (gate+modulator, §5) |
The weights above are seed (HCI defaults). Ratification re-derives them via PCA/factor loadings over ~10 real surfaces — exactly as the SUM found that its 4 inputs contribute ~equally (ch. 03). Until then, the seeds hold.
3. Formula
3.1 Normalization of each dimension (0–1)
- Continuous AUTO dimension (time, contrast, density): z against spec-limit → normal CDF,
or the Brand score exponential curve
e^(−k·penalty)when the signal is penalty-accumulable.norm = Φ((spec − value)/σ)(SUM) ornorm = e^(−k·normalized_penalty)(Brand score). - Rate AUTO dimension (defectserrors, % of a11y checks passing): `norm = passingapplicable`
(Six-Sigma "proportion-meeting-spec", ch. 03).
- SURVEY dimension: already in 0–100 → /100. UMUX-LITE uses the regression
SUS≈0.65·x+22.9(ch. 03)to fall on the same scale as the SUS.
- JUDGE dimension:
pass=100 · partial=60 · violated=20, averaged over the applicable criteria(ch. 02), mapped to Nielsen 0–4 severity for weighting.
3.2 Composition
pillar_p = Σ_d (w_d · dim_d) / Σ_d w_d # weighted average of the pillar's dimensions
UQS_raw = 100 · Σ_p (W_p · pillar_p) / Σ_p W_p # weighted average of the pillars (active profile)
UQS = apply_gates(UQS_raw) # §53.3 Computational aesthetics (the Visual AUTO dimension, in detail)
The visual sub-score combines (ch. 04), each term 0–1:
Visual = 0.45·Ngo_OM # average of Ngo's 14 measures (balance, symmetry, density 0.5-optimal, simplicity, economy…)
+ 0.25·discipline # average of [8pt-grid adherence, type-scale adherence, vertical rhythm]
+ 0.15·(1 − clutter) # normalized Rosenholtz feature-congestion/subband-entropy
+ 0.15·colorfulness_fit # Hasler–Süsstrunk with a mid-optimum (penalizes drab AND chaotic)(Contrast does not enter here — it is an A11y gate, §5, so it is not "diluted" in an average.)
4. Profiles by surface type (reweighting)
Same engine, different pillar weights (ch. 04 §aesthetic-usability justifies the visual weight):
| Profile | Effect. | Effic. | Satisf. | Visual | A11y |
|---|---|---|---|---|---|
| screen | 0.25 | 0.22 | 0.18 | 0.17 | 0.18 |
| form | 0.22 | 0.20 | 0.18 | 0.10 | 0.30 |
| icon | 0.05 | 0.05 | 0.05 | 0.75 | 0.10 |
| layout | 0.20 | 0.18 | 0.10 | 0.37 | 0.15 |
| landing | 0.15 | 0.12 | 0.20 | 0.38 | 0.15 |
icon≈ all-visual: there thekicon validate(R1–R7) and computational aesthetics dominate;formcarries A11y + states (ch. 02 H5/H9, ch. 06). Seed weights — to be calibrated.
5. Hard gates (cap or fail — they do not dilute)
Inherited from the norms already in force (ch. 06 + Verge R8 + icons):
- G-AA contrast: any pair < WCAG 2.1 AA (4.5:1 / 3:1) → the A11y dimension loses the item and
UQS is capped at ≤ 59 (Fair). (Verge R8 is already a CI gate; the UQS reflects it, does not replace it.)
- G-ICON:
kicon validateFAIL on R1–R7 → Visual loses V5 and UQS ≤ 59. - G-severity-4: any JUDGE finding with Nielsen severity 4 (catastrophe) → cap ≤ 59
until resolved (ch. 02, severity scale).
- G-Doherty (optional, when telemetry exists): sustained INP > 1s → hard penalty on Efficiency
(ch. 01, threshold 400ms1s10s).
6. Rating bands (Sauro–Lewis, verbatim)
Reuses the SUS A–F curve (ch. 03) — instant familiarity, without inventing a scale:
| UQS | Band | Reading |
|---|---|---|
| 90–100 | A+/A | top decile |
| 80–89 | A−/B+ | excellent |
| 68–79 | B/C+ | above average (68 = SUS mean/neutral anchor) |
| 51–67 | C/D | below average — prioritize fixing |
| 0–50 | F | failed |
7. Why NOT a pure AI judge, nor a pure survey
- Pure survey (SUS/NPS): needs humans, does not scale per-surface-per-release, and the NPS
still throws information away (ch. 03). It becomes only the Satisfaction channel, not the whole.
- Pure AI judge (
/k-meta-judge): qualitative, gives neither baseline/trend nor comparability.It becomes the JUDGE tier, not the index. (ch. 02)
- Hybrid AUTO+JUDGE+SURVEY is what the literature (SUM, HEART, SUPR-Q) does and what the Stack
already practices in architecture — hence the UQS.
8. Implementation (summary — detail in stack-RFC-030 §9 + meta#387)
tools/ui-score— headless AUTO engine: contrast (reusesverge-contrast-audit),Ngogridalignment geometry, type scale, KLM/Fitts over the task-flow, 18 a11y checks (axe-core-style). Emits the AUTO dimensions + sub-scores.
- JUDGE adapter — orchestrates
/k-meta-judge, resolving surface→spec viaspec-triggers.kmd. - SURVEY channel — UMUX-LITE (2 questions) micro-survey per release; optional.
- Composition + profiles + gates + bands → the number + JSON report.
/k-ui-score <surface>(read-only, sibling of/k-arch).- Empirical validation: score the Triage cockpit before/after
TRIAGE-026— the indexhas to rise with the polish slices. If it does not rise, the model is wrong, not the UI.
9. Anchor sources (detail and URLs in chapters 01–06)
SUM (Sauro & Kindlund 2005) · SUPR-Q (Sauro) · SUS (Brooke; Sauro–Lewis curve) · UMUX-LITE (Lewis et al.) · HEARTGSM (Rodden et al., Google) · ISO 9241-11 · ISOIEC 25010 · Ngo, Teo & Byrne 2003 · WCAG 2.2 (W3C) · APCA (Myndex) · GOMS/KLM (Card, Moran & Newell) · Fitts 1954 · Hick–Hyman · Nielsen 10 heuristics · Norman DOET · Tractinsky (aesthetic-usability).