Part IV β The Reach Β· Lesson 8.7
How to fix accessibility
In one lineAudit, triage by user impact, fix at the component level, then gate it so it can't come back.
Where you've seen itA design-system Button missing its focus ring β one commit repairs every page in the product.
Diagram
THE WORKFLOW
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββ
β AUDIT βββΊβ TRIAGE βββΊβ FIX βββΊβ VERIFY βββΊβ GATE β
β automatedβ β by user β β at the β β keyboard β β CI + β
β + manual β β impact β β componentβ β + SR β β DoD β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββ
β²
fix the SOURCE, not the instance:
one Button component > 400 page patchesTRIAGE BY IMPACT β not by how many the scanner found
P1 BLOCKS a task entirely
keyboard trap Β· unlabelled submit Β· form errors not announced
β fix this sprint
P2 MAKES a task much harder
poor focus order Β· low contrast on body text Β· vague link text
β next sprint
P3 ANNOYS
redundant announcements Β· missing landmarks Β· decorative alt
β backlog
200 "missing alt on decorative icons" ranks below
ONE unlabelled checkout button.WHERE THE FIX BELONGS
design system component β 80% of issues, fixed once
page composition β heading order, landmarks
content β alt text, link text, error copy
design tokens β contrast, focus ring colour
If you're patching the same issue on the third page,
you're fixing it in the wrong layer.How it works
- Audit in two passes: automated across all routes for breadth, manual keyboard-and-screen-reader on the top flows for depth.
- Triage by blocked tasks, not by violation count. Scanner counts flatter decorative issues and hide blockers.
- Fix in the design system wherever possible β components carry the fix everywhere at once.
- Verify the way users experience it: Tab through it, then listen to it. A green scanner is not verification.
- Gate it:
jest-axein unit tests, Lighthouse in CI, and accessibility in the definition of done so new work doesn't reopen old issues.
Trade-offs
| Approach | Result |
|---|---|
| Fix in components | One change, product-wide |
| Fix per page | Endless, regresses immediately |
| Big-bang audit before launch | Expensive, always late |
| Continuous, in DoD | Cheap, permanent |
Accessibility statement and feedback path: publish what conformance level you meet, what's known-broken, and how users can report problems. In several jurisdictions this is a requirement, not a courtesy (3.8).
Interview angle
"You inherit a product with 300 accessibility violations. Where do you start?"
- Triage by blocked tasks first: anything that stops a keyboard or screen-reader user completing a core flow.
- Map violations to components β a handful of design-system fixes usually resolves the majority of instances.
- Then gate it in CI and add it to the definition of done, so the backlog shrinks instead of refilling.
Recap
- Triage by user impact, never by scanner count.
- Fix at the component and token layer β patching pages is a treadmill.
- Verify with keyboard and screen reader, then gate in CI.