Synthesis — the UI Quality Score (UQS) algorithm

draft

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):

  1. 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.

  2. 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.

  3. 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.

  4. 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) or norm = 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)                   # §5

3.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 the kicon validate (R1–R7) and computational aesthetics dominate; form carries 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 validate FAIL 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)

  1. tools/ui-score — headless AUTO engine: contrast (reuses verge-contrast-audit),

    Ngogridalignment geometry, type scale, KLM/Fitts over the task-flow, 18 a11y checks (axe-core-style). Emits the AUTO dimensions + sub-scores.

  2. JUDGE adapter — orchestrates /k-meta-judge, resolving surface→spec via spec-triggers.kmd.
  3. SURVEY channel — UMUX-LITE (2 questions) micro-survey per release; optional.
  4. Composition + profiles + gates + bands → the number + JSON report.
  5. /k-ui-score <surface> (read-only, sibling of /k-arch).
  6. Empirical validation: score the Triage cockpit before/after TRIAGE-026 — the index

    has 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).