Try free
9 min read Guide 761 of 877

Accessibility in Development Projects

Accessibility isn't optional - it's essential. GitScrum helps teams track accessibility requirements and ensure a11y is part of every feature.

Accessibility Fundamentals

Why A11y Matters

ACCESSIBILITY IMPACT:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ WHO BENEFITS:                                               │
│                                                             │
│ PERMANENT DISABILITIES:                                     │
│ • Blind users (screen readers)                            │
│ • Deaf users (captions, transcripts)                      │
│ • Motor disabilities (keyboard nav)                       │
│ • Cognitive disabilities (clear design)                   │
│                                                             │
│ TEMPORARY CONDITIONS:                                       │
│ • Broken arm (can't use mouse)                           │
│ • Eye infection (can't see well)                         │
│ • Loud environment (can't hear)                          │
│                                                             │
│ SITUATIONAL:                                                │
│ • Bright sunlight (low contrast)                          │
│ • One hand occupied (holding baby)                        │
│ • Slow connection (need lightweight)                      │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ BUSINESS CASE:                                              │
│                                                             │
│ LEGAL: Many countries require accessibility               │
│ • ADA (USA), EN 301 549 (EU), AODA (Canada)              │
│ • Lawsuits increasing annually                            │
│                                                             │
│ MARKET: 15% of world population has disability           │
│ • Significant customer segment                            │
│ • Aging population increasing                             │
│                                                             │
│ SEO: Accessible sites rank better                         │
│ • Semantic HTML helps search engines                     │
│ • Alt text improves image search                         │
│                                                             │
│ QUALITY: Accessible = better for everyone                 │
│ • Clearer design                                          │
│ • Better keyboard support                                 │
│ • Improved performance                                    │
└─────────────────────────────────────────────────────────────┘

WCAG Guidelines

WCAG 2.1 OVERVIEW:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ FOUR PRINCIPLES (POUR):                                     │
│                                                             │
│ PERCEIVABLE:                                                │
│ Content must be presentable to users                      │
│ • Text alternatives for images                            │
│ • Captions for video                                      │
│ • Sufficient color contrast                               │
│ • Resizable text                                           │
│                                                             │
│ OPERABLE:                                                   │
│ Interface must be navigable                               │
│ • Keyboard accessible                                      │
│ • No seizure-inducing content                             │
│ • Enough time to read/interact                           │
│ • Clear navigation                                         │
│                                                             │
│ UNDERSTANDABLE:                                             │
│ Content and interface must be clear                       │
│ • Readable text                                            │
│ • Predictable navigation                                  │
│ • Input assistance                                        │
│                                                             │
│ ROBUST:                                                     │
│ Content must work with assistive tech                     │
│ • Valid HTML                                               │
│ • Proper ARIA usage                                       │
│ • Compatible with screen readers                         │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ CONFORMANCE LEVELS:                                         │
│                                                             │
│ Level A:   Minimum accessibility (bare minimum)           │
│ Level AA:  Standard target (most requirements)            │
│ Level AAA: Highest level (specialized needs)              │
│                                                             │
│ RECOMMENDATION: Target WCAG 2.1 Level AA                  │
└─────────────────────────────────────────────────────────────┘

Integrating A11y

In Requirements

ACCESSIBILITY IN REQUIREMENTS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ STORY WITH A11Y CRITERIA:                                   │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ PROJ-123: Add Image Upload Feature                      ││
│ │                                                         ││
│ │ As a user                                               ││
│ │ I can upload images to my projects                     ││
│ │ So that I can include visuals in documentation         ││
│ │                                                         ││
│ │ ACCEPTANCE CRITERIA:                                     ││
│ │ ☐ Upload button with clear label                       ││
│ │ ☐ Drag-and-drop zone has keyboard alternative         ││
│ │ ☐ Progress indicator announced to screen readers      ││
│ │ ☐ Error messages are accessible                        ││
│ │ ☐ Uploaded images require alt text                    ││
│ │                                                         ││
│ │ A11Y REQUIREMENTS:                                       ││
│ │ ☐ Upload button keyboard accessible (Enter/Space)     ││
│ │ ☐ Focus management after upload                       ││
│ │ ☐ ARIA live region for progress                       ││
│ │ ☐ Color contrast on all states                        ││
│ │ ☐ Alt text input is required field                    ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ A11Y IN DEFINITION OF DONE:                                │
│                                                             │
│ ☐ Keyboard navigation works                              │
│ ☐ Screen reader tested                                   │
│ ☐ Color contrast meets AA                                │
│ ☐ Focus states visible                                   │
│ ☐ Form inputs have labels                                │
│ ☐ Automated a11y tests pass                              │
└─────────────────────────────────────────────────────────────┘

A11y Checklist

DEVELOPER A11Y CHECKLIST:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ KEYBOARD:                                                   │
│ ☐ All interactive elements focusable                     │
│ ☐ Focus order is logical                                  │
│ ☐ Focus is visible (outline)                              │
│ ☐ No keyboard traps                                       │
│ ☐ Skip links for main content                            │
│ ☐ Custom components have proper keyboard support         │
│                                                             │
│ SCREEN READERS:                                             │
│ ☐ All images have alt text                               │
│ ☐ Decorative images have alt=""                          │
│ ☐ Headings are hierarchical (h1→h2→h3)                   │
│ ☐ Form inputs have labels                                │
│ ☐ Links have descriptive text (not "click here")        │
│ ☐ Dynamic content announced (ARIA live)                  │
│                                                             │
│ VISUAL:                                                     │
│ ☐ Color contrast 4.5:1 (text) / 3:1 (large text)        │
│ ☐ Color not only indicator                               │
│ ☐ Text resizable to 200%                                 │
│ ☐ Motion can be reduced (prefers-reduced-motion)         │
│                                                             │
│ STRUCTURE:                                                  │
│ ☐ Semantic HTML (nav, main, aside, etc.)                 │
│ ☐ Valid HTML                                              │
│ ☐ Language attribute on html                             │
│ ☐ Page titles are descriptive                            │
│                                                             │
│ FORMS:                                                      │
│ ☐ Labels associated with inputs                          │
│ ☐ Required fields indicated                              │
│ ☐ Error messages clear and associated                    │
│ ☐ Success/error states announced                         │
└─────────────────────────────────────────────────────────────┘

Testing A11y

Testing Approach

ACCESSIBILITY TESTING STRATEGY:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ AUTOMATED TESTING (Catch ~30% of issues):                  │
│                                                             │
│ TOOLS:                                                      │
│ • axe-core (most popular)                                 │
│ • Lighthouse accessibility audit                          │
│ • WAVE browser extension                                  │
│ • ESLint jsx-a11y plugin                                  │
│                                                             │
│ INTEGRATION:                                                │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ // In test suite                                        ││
│ │ import { axe } from 'jest-axe';                        ││
│ │                                                         ││
│ │ it('should have no a11y violations', async () => {     ││
│ │   const { container } = render(<MyComponent />);       ││
│ │   const results = await axe(container);                ││
│ │   expect(results).toHaveNoViolations();                ││
│ │ });                                                      ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ MANUAL TESTING (Catch remaining ~70%):                     │
│                                                             │
│ KEYBOARD:                                                   │
│ • Tab through entire page                                 │
│ • Use Enter/Space on all interactive elements            │
│ • Check focus is always visible                          │
│                                                             │
│ SCREEN READER:                                              │
│ • Test with VoiceOver (Mac), NVDA (Windows)              │
│ • Navigate headings, landmarks, links                    │
│ • Complete key user flows                                 │
│                                                             │
│ ZOOM:                                                       │
│ • Zoom to 200%                                            │
│ • Check no content lost or overlapping                   │
│                                                             │
│ COLOR:                                                      │
│ • Use colorblind simulator                                │
│ • Check meaning without color                            │
└─────────────────────────────────────────────────────────────┘

A11y Tasks

Tracking A11y Work

A11Y WORK IN GITSCRUM:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ A11Y AUDIT TASK:                                            │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ A11Y-01: Q1 Accessibility Audit                        ││
│ │                                                         ││
│ │ Scope: Full application audit                          ││
│ │ Standard: WCAG 2.1 AA                                  ││
│ │ Due: End of Q1                                          ││
│ │                                                         ││
│ │ Checklist:                                              ││
│ │ ☐ Automated scan with axe                             ││
│ │ ☐ Manual keyboard testing                             ││
│ │ ☐ Screen reader testing (VoiceOver + NVDA)            ││
│ │ ☐ Document all issues found                           ││
│ │ ☐ Prioritize and create fix tasks                     ││
│ │                                                         ││
│ │ Output: A11Y issue backlog                             ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ A11Y FIX TASK:                                              │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ A11Y-15: Fix missing form labels on checkout           ││
│ │                                                         ││
│ │ WCAG: 1.3.1 (Info and Relationships)                   ││
│ │ Severity: Serious                                       ││
│ │ Found in: /checkout page                               ││
│ │                                                         ││
│ │ Issue:                                                  ││
│ │ Form inputs missing associated labels                  ││
│ │ Screen readers cannot identify fields                  ││
│ │                                                         ││
│ │ Fix:                                                    ││
│ │ Add <label for="..."> to all inputs                   ││
│ │ Or use aria-labelledby                                 ││
│ │                                                         ││
│ │ Acceptance:                                             ││
│ │ ☐ All inputs have visible labels                      ││
│ │ ☐ Labels correctly associated                         ││
│ │ ☐ Screen reader announces labels                      ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ LABELS:                                                     │
│ accessibility, wcag-aa, screen-reader, keyboard           │
└─────────────────────────────────────────────────────────────┘

Common Patterns

Accessible Components

ACCESSIBLE COMPONENT PATTERNS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ MODAL DIALOG:                                               │
│ ✅ Traps focus inside modal                               │
│ ✅ Escape closes modal                                    │
│ ✅ Returns focus to trigger on close                     │
│ ✅ role="dialog" aria-modal="true"                       │
│ ✅ Labeled with aria-labelledby                          │
│                                                             │
│ CUSTOM DROPDOWN:                                            │
│ ✅ role="listbox" and role="option"                      │
│ ✅ Arrow keys navigate options                           │
│ ✅ Enter/Space selects                                    │
│ ✅ Escape closes                                          │
│ ✅ aria-expanded on trigger                              │
│                                                             │
│ TABS:                                                       │
│ ✅ role="tablist", role="tab", role="tabpanel"          │
│ ✅ Arrow keys switch tabs                                 │
│ ✅ aria-selected on active tab                           │
│ ✅ Tab panels labeled                                     │
│                                                             │
│ TOAST NOTIFICATIONS:                                        │
│ ✅ role="alert" or aria-live="polite"                    │
│ ✅ Important: role="alert" (urgent)                      │
│ ✅ Less urgent: aria-live="polite"                       │
│ ✅ Can be dismissed by user                              │
│                                                             │
│ TOGGLE/SWITCH:                                              │
│ ✅ role="switch" (or checkbox)                           │
│ ✅ aria-checked state                                     │
│ ✅ Clear label indicating what's toggled                 │
│ ✅ State change announced                                │
│                                                             │
│ RESOURCES:                                                  │
│ • WAI-ARIA Authoring Practices (official patterns)       │
│ • Inclusive Components (book)                            │
│ • a11y-style-guide                                       │
└─────────────────────────────────────────────────────────────┘