Context
A financial product with strong UX standards but inconsistent accessibility coverage. Some flows were keyboard-traversable; others depended entirely on hover and pointer interactions. Audits surfaced repeating issues — focus management, aria semantics, contrast — across teams.
Constraints
No dedicated accessibility team. Multiple feature teams shipping in parallel. Design system in place but underused. Couldn't slow delivery down.
Decisions
Treat accessibility as a property of the design system, not of individual screens. Bake keyboard navigation, focus rings and aria semantics into shared components. Add automated checks (axe + custom Cypress assertions) to PR pipelines so regressions never reached main.
Implementation
Audit-driven backlog converted into design-system tasks. Focus management primitives (modal, popover, menu) rewritten once, reused everywhere. CI gating on critical accessibility violations. Engineering training framed accessibility as semantic correctness, not extra work.
Outcome
Critical violations went from dozens per page to zero on monitored flows. Keyboard usability validated end-to-end on the top user journeys. Accessibility stopped being a periodic project and became a standing default.
Outcome metrics
- Maintainability
- A11y baked into design system
- Developer experience
- Automated CI gating prevents regressions
- Accessibility
- Critical axe violations → 0 on monitored flows