VJRA.US / ACCESSIBILITY

Accessibility Standards & SDLC Playbook

← Research Library
Governing Standards
StandardScope
WCAG 2.1 / 2.2 AACore web content accessibility criteria — primary baseline for most software products
Section 508 (US)Federal procurement requirement; incorporates WCAG 2.0 AA by reference (501.1, 602.3)
EN 301 549 (EU)European public sector procurement standard
WAI-ARIA 1.2Roles / states / properties for custom interactive widgets
ADA Title III (US)Legal exposure driver for public-facing commercial applications
Accessibility Across SDLC Phases
PhaseActivity
RequirementsAccessibility written in as a non-functional requirement (target: WCAG 2.1/2.2 AA); target assistive tech identified (NVDA/JAWS/VoiceOver, keyboard-only)
DesignContrast ratios (4.5:1 text / 3:1 UI), focus order, no color-only meaning; ARIA intent annotated on mockups
DevelopmentImplementation per Developer Scope of Work (see Scope tab)
Code ReviewAccessibility checklist item enforced in every PR review
TestingAutomated + manual verification (see Tester Scope of Work) before merge/release
ReleaseVPAT / Accessibility Conformance Report (ACR) updated for customer-facing releases
MaintenanceRegression re-testing; accessibility defects tracked at the same severity as functional defects
Severity and Release Stopper are a program-level triage layer on top of WCAG — WCAG itself only defines conformance levels (A/AA), not urgency. Stopper = Critical: cannot ship regardless of deadline pressure. Ratings below are sensible defaults; adjust per where a defect actually lands (core flow vs. edge case).
Perceivable
SCLevelDescriptionDefault SeverityStopper
1.1.1 Non-text ContentAAlt text for images/icons/functional controlsCriticalYes
1.2.1 Audio/Video-only (Prerecorded)AText/audio alt for media-only contentMedium
1.2.2 Captions (Prerecorded)ACaptions on recorded videoHigh
1.2.3 Audio Description or AltAAudio description or full text alt for videoMedium
1.2.4 Captions (Live)AALive captionsHigh
1.2.5 Audio Description (Prerecorded)AAAudio description for visual-only info in videoMedium
1.3.1 Info and RelationshipsAStructure conveyed programmatically, not just visuallyCriticalYes
1.3.2 Meaningful SequenceALogical reading/navigation orderHigh
1.3.3 Sensory CharacteristicsAInstructions don't rely on shape/color/position aloneMedium
1.3.4 OrientationAANot locked to one screen orientationMedium
1.3.5 Identify Input PurposeAAForm fields identifiable for autofillMedium
1.4.1 Use of ColorAColor isn't the only info carrierHigh
1.4.2 Audio ControlAAuto-playing audio can be paused/mutedMedium
1.4.3 Contrast (Minimum)AA4.5:1 text contrast (3:1 large text)High
1.4.4 Resize TextAA200% resize without breakingMedium
1.4.5 Images of TextAAReal text over images of textLow
1.4.10 ReflowAAReflows at 400% zoom, no horizontal scrollHigh
1.4.11 Non-text ContrastAA3:1 contrast for UI components/iconsMedium
1.4.12 Text SpacingAANo content loss with increased spacingLow
1.4.13 Content on Hover or FocusAATooltips dismissible/hoverable/persistentMedium
Operable
SCLevelDescriptionDefault SeverityStopper
2.1.1 KeyboardAFull keyboard operabilityCriticalYes
2.1.2 No Keyboard TrapAFocus can always move awayCriticalYes
2.1.4 Character Key ShortcutsASingle-key shortcuts remappable/disable-ableMedium
2.2.1 Timing AdjustableATime limits adjustable/extendableHigh
2.2.2 Pause, Stop, HideAUser can control auto-updating contentHigh
2.3.1 Three Flashes or Below ThresholdANo seizure-triggering flashingCriticalYes
2.4.1 Bypass BlocksASkip repeated contentMedium
2.4.2 Page TitledADescriptive page titlesLow
2.4.3 Focus OrderALogical tab orderHigh
2.4.4 Link Purpose (In Context)ALink text/context makes destination clearMedium
2.4.5 Multiple WaysAAMore than one way to find a pageLow
2.4.6 Headings and LabelsAADescriptive headings/labelsMedium
2.4.7 Focus VisibleAAVisible keyboard focus indicatorCriticalYes
2.5.1 Pointer GesturesASingle-pointer alternative to multipoint gesturesHigh
2.5.2 Pointer CancellationAActions cancellable before completionMedium
2.5.3 Label in NameAVisible label matches accessible nameHigh
2.5.4 Motion ActuationAMotion-triggered functions have UI alternativeLow
Understandable
SCLevelDescriptionDefault SeverityStopper
3.1.1 Language of PageAPage language set programmaticallyMedium
3.1.2 Language of PartsAALanguage changes marked within contentLow
3.2.1 On FocusANo unexpected context change on focusHigh
3.2.2 On InputANo unexpected context change on inputHigh
3.2.3 Consistent NavigationAANav order consistent across pagesMedium
3.2.4 Consistent IdentificationAASame function labeled consistentlyMedium
3.3.1 Error IdentificationAErrors identified and described in textCriticalYes
3.3.2 Labels or InstructionsAForm fields have labels/instructionsCriticalYes
3.3.3 Error SuggestionAAFix suggestions provided where knownMedium
3.3.4 Error Prevention (Legal/Financial/Data)AAReview/confirm/reverse for critical submissionsHigh
Robust
SCLevelDescriptionDefault SeverityStopper
4.1.1 ParsingANo major markup errors (deprecated in WCAG 2.2)Low
4.1.2 Name, Role, ValueACorrect AT exposure for custom widgetsCriticalYes
4.1.3 Status MessagesAAStatus messages announced without focusHigh
Revised Section 508 (2018)
SectionDescriptionDefault SeverityStopper
302 Functional Performance CriteriaHigh-level, technology-agnostic requirements (vision, hearing, speech, manipulation, cognitive)Reference
Ch. 4 HardwarePhysical device requirementsN/A for software
501 ScopeIncorporates WCAG 2.0 AA by referenceReference
502 Interoperability with ATAT compatibility, object/role/value exposureCriticalYes
503 ApplicationsUser prefs, alt UIs, caption/audio controlsHigh
504 Authoring ToolsAccessible content creation (if applicable)Medium
602 Support DocumentationDocs describe/are themselves accessibleMedium
603 Support ServicesSupport channels accommodate disabilitiesMedium
Grouped by Severity — All POUR + Section 508
Same criteria as above, re-sorted by triage bucket instead of principle — use this view to size the Critical/Stopper backlog at a glance.
Critical 10 criteria — all Release Stoppers
SC / SectionPrincipleLevelDescriptionStopper
1.1.1 Non-text ContentPerceivableAAlt text for images/icons/functional controlsYes
1.3.1 Info and RelationshipsPerceivableAStructure conveyed programmatically, not just visuallyYes
2.1.1 KeyboardOperableAFull keyboard operabilityYes
2.1.2 No Keyboard TrapOperableAFocus can always move awayYes
2.3.1 Three Flashes or Below ThresholdOperableANo seizure-triggering flashingYes
2.4.7 Focus VisibleOperableAAVisible keyboard focus indicatorYes
3.3.1 Error IdentificationUnderstandableAErrors identified and described in textYes
3.3.2 Labels or InstructionsUnderstandableAForm fields have labels/instructionsYes
4.1.2 Name, Role, ValueRobustACorrect AT exposure for custom widgetsYes
502 Interoperability with ATSection 508AT compatibility, object/role/value exposureYes
High 16 criteria
SC / SectionPrincipleLevelDescriptionStopper
1.2.2 Captions (Prerecorded)PerceivableACaptions on recorded video
1.2.4 Captions (Live)PerceivableAALive captions
1.3.2 Meaningful SequencePerceivableALogical reading/navigation order
1.4.1 Use of ColorPerceivableAColor isn't the only info carrier
1.4.3 Contrast (Minimum)PerceivableAA4.5:1 text contrast (3:1 large text)
1.4.10 ReflowPerceivableAAReflows at 400% zoom, no horizontal scroll
2.2.1 Timing AdjustableOperableATime limits adjustable/extendable
2.2.2 Pause, Stop, HideOperableAUser can control auto-updating content
2.4.3 Focus OrderOperableALogical tab order
2.5.1 Pointer GesturesOperableASingle-pointer alternative to multipoint gestures
2.5.3 Label in NameOperableAVisible label matches accessible name
3.2.1 On FocusUnderstandableANo unexpected context change on focus
3.2.2 On InputUnderstandableANo unexpected context change on input
3.3.4 Error Prevention (Legal/Financial/Data)UnderstandableAAReview/confirm/reverse for critical submissions
4.1.3 Status MessagesRobustAAStatus messages announced without focus
503 ApplicationsSection 508User prefs, alt UIs, caption/audio controls
Medium 22 criteria
SC / SectionPrincipleLevelDescriptionStopper
1.2.1 Audio/Video-only (Prerecorded)PerceivableAText/audio alt for media-only content
1.2.3 Audio Description or AltPerceivableAAudio description or full text alt for video
1.2.5 Audio Description (Prerecorded)PerceivableAAAudio description for visual-only info in video
1.3.3 Sensory CharacteristicsPerceivableAInstructions don't rely on shape/color/position alone
1.3.4 OrientationPerceivableAANot locked to one screen orientation
1.3.5 Identify Input PurposePerceivableAAForm fields identifiable for autofill
1.4.2 Audio ControlPerceivableAAuto-playing audio can be paused/muted
1.4.4 Resize TextPerceivableAA200% resize without breaking
1.4.11 Non-text ContrastPerceivableAA3:1 contrast for UI components/icons
1.4.13 Content on Hover or FocusPerceivableAATooltips dismissible/hoverable/persistent
2.1.4 Character Key ShortcutsOperableASingle-key shortcuts remappable/disable-able
2.4.1 Bypass BlocksOperableASkip repeated content
2.4.4 Link Purpose (In Context)OperableALink text/context makes destination clear
2.4.6 Headings and LabelsOperableAADescriptive headings/labels
2.5.2 Pointer CancellationOperableAActions cancellable before completion
3.1.1 Language of PageUnderstandableAPage language set programmatically
3.2.3 Consistent NavigationUnderstandableAANav order consistent across pages
3.2.4 Consistent IdentificationUnderstandableAASame function labeled consistently
3.3.3 Error SuggestionUnderstandableAAFix suggestions provided where known
504 Authoring ToolsSection 508Accessible content creation (if applicable)
602 Support DocumentationSection 508Docs describe/are themselves accessible
603 Support ServicesSection 508Support channels accommodate disabilities
Low 7 criteria
SC / SectionPrincipleLevelDescriptionStopper
1.4.5 Images of TextPerceivableAAReal text over images of text
1.4.12 Text SpacingPerceivableAANo content loss with increased spacing
2.4.2 Page TitledOperableADescriptive page titles
2.4.5 Multiple WaysOperableAAMore than one way to find a page
2.5.4 Motion ActuationOperableAMotion-triggered functions have UI alternative
3.1.2 Language of PartsUnderstandableAALanguage changes marked within content
4.1.1 ParsingRobustANo major markup errors (deprecated in WCAG 2.2)
Tools Used for Developer Testing
eslint-plugin-jsx-a11y
Lint-time catch of missing alt text, labels, and ARIA misuse before code is even committed
axe-core (unit/CI)
Automated rule engine run in component tests or CI pipeline; blocks merge on critical/serious violations
axe DevTools (browser extension)
In-browser scan while building a feature — fastest feedback loop for a developer
Chrome Lighthouse
Built into DevTools; quick accessibility score + flagged issues during local dev
Storybook a11y addon
Per-component accessibility checks in isolation, useful in design-system-driven codebases
Colour Contrast Analyser / Stark
Verify contrast ratios against design tokens before/while implementing styles
Keyboard-only pass
No tool needed — unplug the mouse and tab through the feature before opening a PR
VoiceOver / NVDA spot-check
Quick screen reader smoke test on the specific component just built, not a full audit
Tools Used for QA / Tester Testing
axe DevTools / WAVE
Automated scanning across full pages/flows — catches roughly 30–40% of issues (contrast, missing labels, ARIA)
Lighthouse CI
Gated automated scan integrated into the release pipeline
Accessibility Insights for Web
Microsoft's guided manual + automated assessment tool for structured test passes
NVDA + Firefox/Chrome
Free screen reader — most common combination for Windows manual testing
JAWS + Edge/Chrome
Enterprise-standard screen reader, often required for federal/508 test evidence
VoiceOver + Safari (macOS/iOS)
Native Apple screen reader — required for mobile/web coverage on Apple platforms
TalkBack (Android)
Native Android screen reader for mobile web/app coverage
Colour Contrast Analyser
Verifies contrast across component states — hover, disabled, error, not just default
Siteimprove / Deque WorldSpace
Enterprise-scale continuous scanning and defect tracking across many pages/releases
Keyboard-only + zoom/reflow testing
Manual pass at 200%/400% zoom and full keyboard-only task walkthroughs
Developer Scope of Work
  • Use semantic HTML (button, nav, header, ordered headings) before reaching for ARIA
  • Add ARIA roles/labels only for custom widgets (tabs, modals, dropdowns) — no ARIA is better than bad ARIA
  • Ensure full keyboard operability: tab order, visible focus indicator, no keyboard traps
  • Manage focus programmatically — modals trap focus and return it on close; SPA route changes move focus
  • Provide text alternatives: alt text for images, labels for all form inputs, accessible names for icon-only buttons
  • Meet color contrast ratios in the actual implementation, not just the design file
  • Support text resize/zoom to 200% without loss of content or function
  • Announce dynamic content changes via aria-live regions where needed
  • Avoid time-based auto-updates without user control (carousels, session timeouts)
  • Fix accessibility defects flagged in code review or automated linting (eslint-plugin-jsx-a11y, axe-core in CI)
Tester Scope of Work
  • Automated scanning: axe DevTools, WAVE, Lighthouse, or axe-core in CI
  • Keyboard-only testing: full task flows using Tab/Shift+Tab/Enter/Esc/Arrow keys, no mouse
  • Screen reader testing: NVDA/JAWS on Windows, VoiceOver on macOS/iOS — verify reading order, announcements, form labels
  • Zoom/reflow testing: 200%/400% zoom, browser resize, no horizontal scroll or content clipping
  • Focus management testing: modals, dropdowns, route changes, error messages
  • Color/contrast verification: including hover, disabled, and error states, not just default
  • Regression testing: re-verify previously passing a11y criteria after each release
  • Reporting: log defects with WCAG success criterion reference (e.g. "1.4.3 Contrast Minimum"), severity, and repro steps
  • Sign-off: produce/update the VPAT/ACR or internal a11y test summary before the release gate
Shared Definition of Done
A feature isn't "done" until it passes automated scan (zero critical/serious issues), a keyboard-only walkthrough, and one screen reader smoke test — owned jointly by Dev (fix) and QA (verify).