Faisalaffan Blog
|
🇮🇩
Faisalaffan Blog
Rekayasa Perangkat Lunak10 menit baca

97% Website Gagal di Accessibility Test — Apa yang Kamu(e) Lakukan Salah?

Kebanyakan developer menganggap accessibility itu 'nggak urgent' sampai mereka kena lawsuit. Belajar WCAG 2.2, prinsip POUR, dan teknik implementasi yang bisa langsung kamu terapin sebelum digital kamu jadi mimpi buruk legal — dan yang lebih penting, tentang kemanusiaan.

Faisal Affan
Faisal Affan
Diterbitkan
Galeri
1 / 3

Accessibility: Kapan Digital Tidak Boleh Ada yang Tertinggal

"The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect." — Tim Berners-Lee, W3C Director

Split composition — accessible website with glowing features vs broken website with legal warnings, a gavel hovering above


Mengapa Kamu Perlu Baca Artikel Ini?

3 Alasan Cepat:

  1. Legal risk — 4.000+ lawsuit accessibility di AS tahun 2024
  2. 15% populasi — punya keterbatasan, dan mayoritas developer skip ini
  3. SEO benefit — accessibility = structure HTML lebih baik
Statistik Kritis

1,3 miliar penyandang disabilitas global. 97% homepage tidak memenuhi standar dasar. Pasar assistive technology: $30 miliar+.


Overview: Apa Itu Accessibility (A11y)?

Accessibility (A11y) = praktik membuat produk digital bisa digunakan oleh semua orang, termasuk penyandang disabilitas.

Dua Standar yang Harus Kamu Tahu

PropertyTypeDescription
ADA — Americans with Disabilities Act Hukum Legal compliance di AS. Website bisa dituntut jika tidak accessible.
WCAG — Web Content Accessibility Guidelines Teknis Standar global dari W3C. Jadi acuan implementasi.

Prinsip WCAG: POUR

graph TD
    A[WCAG POUR] --> B[Perceivable]
    A --> C[Operable]
    A --> D[Understandable]
    A --> E[Robust]

    B --> B1[Alt text]
    B --> B2[Caption/Transkrip]
    B --> B3[Kontras warna 4.5:1]

    C --> C1[Keyboard navigation]
    C --> C2[Skip links]
    C --> C3[No keyboard trap]

    D --> D1[Language jelas]
    D --> D2[Navigasi konsisten]
    D --> D3[Error suggestions]

    E --> E1[Valid HTML]
    E --> E2[ARIA tepat]
    E --> E3[Screen reader compatible]

The four POUR principles as interconnected puzzle pieces forming a protective shield — Perceivable, Operable, Understandable, Robust


Spektrum Disabilitas yang Harus Ditampung

PropertyTypeDescription
Visual Screen reader (JAWS, NVDA, VoiceOver) Alt text, kontras tinggi, keyboard nav
Motorik Switch access, voice control Target besar, keyboard nav, respons lama
Auditif Hearing aids, captioning Transkrip, caption, visual alerts
Kognitif Screen magnifiers, reading assistants Konten sederhana, nav konsisten

Level WCAG: Mana yang Harus Kamu Targetkan?

Rekomendasi

Targetkan WCAG AA sebagai baseline compliance. Ini yang kebanyakan regulasi international pakai.


Risiko Jika Kamu Skip Accessibility

4 Risiko Utama:

Risiko Dampak
Legal Lawsuit di US/EU market — bisa sangat mahal
Users 15-20% populasi dengan keterbatasan tidak bisa pakai
SEO Struktur HTML buruk = SEO suffers
Brand Non-inclusive = brand image rusak

WCAG 2.2: 9 Hal Baru yang Perlu Kamu Tahu

Versi terbaru (Oktober 2023) menambahkan 9 Success Criteria baru:

Focus Not Obscured (AA)

Element dengan focus tidak boleh tersembunyi oleh sticky headers.

Focus Appearance (AAA)

Focus indicator harus kontras 3:1+ dan area yang cukup besar.

Dragging Movements (AA)

Semua drag-and-drop harus punya alternatif single-pointer (button up/down).

Target Size (AA)

Interactive targets minimal 24x24 CSS pixels.

Target Size Enhanced (AAA)

Clearance yang cukup untuk target yang lebih kecil.

Consistent Help (A)

Help mechanism di satu page = help di semua page dengan posisi konsisten.

Redundant Entry (A)

Jangan minta informasi yang sudah di-input sebelumnya.

Accessible Authentication (AA)

CAPTCHA cognitive puzzles tidak diperbolehkan — berikan alternatif.

Focus Not Obscured Enhanced (AAA)

Tidak ada bagian focused element yang boleh tersembunyi.


Kerangka Hukum: ADA dan Section 508

Americans with Disabilities Act (ADA)

PropertyTypeDescription
Title I Employment Employees dengan disabilitas harus dapat akomodasi reasonable
Title III Public Access Public accommodations — termasuk websites — tidak boleh diskriminasi

Sejak Facebook v. Nizzud (2019) dan Domino's Pizza v. Laredo (2019), courts secara konsisten memutuskan ADA berlaku untuk websites.

Section 508

Untuk entitas federal AS, semua EICT harus memenuhi standar Access Board.


Implementasi Praktis: Dari Teori ke Kode

1. Semantic HTML: Fondasi yang Tidak Boleh Di-skip

Gunakan element HTML sesuai fungsinya:

HTML
<!-- ❌ Bad: Tidak semantic -->
<div class="header">
  <div class="nav">
    <div class="logo">Brand</div>
  </div>
</div>

<!-- ✅ Good: Semantic dengan landmarks -->
<header>
  <nav aria-label="Main navigation">
    <a href="/" aria-label="Home">Brand</a>
  </nav>
</header>
<main id="main-content">
  <article>...</article>
</main>
<footer>...</footer>
Opinion

Gunakan <button> bukan <div> untuk interactive elements. Screen reader perlu tahu ini button.

2. Alt Text: Deskripsi untuk yang Tidak Bisa Melihat

PropertyTypeDescription
Decorative <img src="divider.svg" alt=""> Kosong (alt="")
Informative <img src="dashboard.png" alt="Dashboard dengan 3 alerts"> Deskripsi singkat
Complex alt="Chart..." + link Deskripsi detail + link ke deskripsi lengkap

3. Keyboard Navigation: Fokus dan Tab Order

Tab Order

Pastikan tab order mengikuti reading order visual. Hindari positive tabindex.

Focus Indicators

Jangan hilangkan outline tanpa pengganti yang jelas.

Keyboard Traps

Pastikan tidak ada element yang trap keyboard user.

Shortcuts

Berikan mekanisme untuk disable/remap single-key shortcuts.

CSS
/* ✅ Good: Focus indicator yang jelas */
:focus-visible {
  outline: 3px solid #005fcc;
  outline-offset: 2px;
}

/* ❌ Bad: outline: none tanpa alternatif */
button:focus {
  outline: none;
}

Close-up of a keyboard with the Tab key glowing — a golden focus ring wraps around UI elements like a protective aura

4. Skip Links: Navigasi Efisien untuk Keyboard Users

HTML
<!-- Letakkan di first element body -->
<a href="#main-content" class="skip-link">
  Skip to main content
</a>
CSS
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: #005fcc;
  color: white;
  padding: 8px 16px;
  z-index: 100;
}

.skip-link:focus {
  top: 0;
}

5. Color Contrast: Bukan Sekadar Estetika

WCAG Contrast Requirements
  • 4.5:1 — Teks normal (AA)
  • 3:1 — Teks besar 18pt+ atau 14pt+ bold (AA)
  • 3:1 — Component states dan graphical objects (AA)
CSS
:root {
  /* ✅ Good: Contrast sufficient */
  --text-primary: #1a1a2e;   /* 15.5:1 against white */
  --text-secondary: #4a4a68; /* 7.2:1 against white */

  /* ❌ Bad: Contrast insufficient */
  --text-muted: #888888; /* 2.8:1 against white */
}

6. ARIA: Gunakan Dengan Bijak

Aturan Utama ARIA

Jika HTML native sudah cukup, gunakan HTML. ARIA tidak bikin element lebih accessible — cuma menambah informasi untuk assistive technology.

JSX
// ❌ Bad: ARIA tidak perlu
<div role="button" tabindex="0" onClick={handleClick}>
  Submit
</div>

// ✅ Good: HTML native
<button type="submit">Submit</button>

// ❌ Bad: Label tidak terhubung
<input type="text" placeholder="Email" />

// ✅ Good: Explicit association
<label htmlFor="email">Email</label>
<input id="email" type="email" />

7. Forms: Error Handling yang Informatif

JSX
<label htmlFor="password">Password</label>
<input
  id="password"
  type="password"
  aria-describedby="password-requirements password-error"
  aria-invalid="true"
/>
<p id="password-requirements">
  Minimal 8 karakter, 1 huruf besar, 1 angka
</p>
<p id="password-error" role="alert">
  Password harus mengandung minimal 8 karakter
</p>

Tools: Audit, Testing, Monitoring

Automated Testing (Cepat, Scalable)

Google Lighthouse

Built-in Chrome DevTools. Quick audit dengan score + suggestions.

Terminal
npx lighthouse https://example.com --only-categories=accessibility

Screen Reader Testing: Ground Truth

Opinion: 80% dev skip screen reader testing. Ini biggest blind spot.

Testing dengan assistive technology yang real adalah satu-satunya cara tahu user experience yang sebenarnya.

PropertyTypeDescription
NVDA Windows / Firefox General Windows accessibility
JAWS Windows / Chrome/Edge Enterprise environments
VoiceOver macOS/iOS / Safari Apple ecosystem
TalkBack Android / Chrome Mobile accessibility
Orca Linux / Firefox Linux desktop

Contrast & Visual Tools

PropertyTypeDescription
WebAIM Contrast Checker Web Tool Validasi color contrast ratio
Stark (Figma/Sketch) Design Plugin Design-time checking

Manual Testing Checklist

  • Tab navigation tanpa mouse — semua fungsi accessible?
  • Focus state jelas — terlihat?
  • Form bisa dipakai keyboard — semua inputs reachable?
  • Tidak ada "trap" — modal/dropdown bisa di-escape?

Testing Checklist: Sebelum Launch

Pre-Launch Checklist
  • Keyboard-only navigation: semua fungsi accessible tanpa mouse?
  • Screen reader: reading order logical?
  • Zoom 200%: content masih usable?
  • High contrast mode: semua elements visible?
  • Reduced motion: animations respect prefers-reduced-motion?

Healthcare Apps: Checklist Tambahan

PropertyTypeDescription
Caption telehealth real-time Healthcare Pasien mungkin tuli atau hard of hearing
Alternative untuk medical devices Medical Devices Data dari glucose/BP monitors harus accessible
Multi-language support Localization Patient populations yang diverse
Cognitive load management Cognitive Accessibility Elderly/cognitively impaired sering pakai portals
Emergency accessibility Emergency Response Critical alerts harus accessible semua modes
HIPAA + ADA

Di healthcare, compliance bukan cuma WCAG — harus selaras dengan HIPAA Privacy Rule. Beberapa akomodasi accessibility harus mempertimbangkan implikasi HIPAA.


Action Plan: Dari Mana Mulai?

Priority 1: Security Mindset

Treat accessibility seperti vulnerability. Broken accessibility = UX vulnerability. Sama seperti security, harus diintegrasi dari awal.

Priority 2: WCAG AA Minimum Checklist
  • Alt text semua image
  • Keyboard fully usable
  • Contrast ≥ 4.5:1
  • Label form jelas
  • ARIA hanya jika perlu
Priority 3: Minimum Stack
  1. Lighthouse — quick check
  2. axe DevTools — debug
  3. NVDA / VoiceOver — manual reality check
Priority 4: Production-Grade
  • Pa11y / axe CI integration
  • Design system enforce contrast + semantics
  • Fail build jika accessibility score < threshold

First-Principles: Accessibility ≈ API Contract untuk Manusia

Insight

Jika API harus predictable untuk machine, maka UI harus predictable untuk manusia dengan berbagai keterbatasan.

Engineer yang paham ini biasanya:

  • Code lebih semantic
  • UX lebih robust
  • Bug lebih sedikit

Accessibility Tools = Observability Layer untuk UX

Tanpa ini:

  • UI kelihatan "normal"
  • Tapi broken untuk sebagian user

Dengan ini:

  • UX jadi measurable (seperti latency / error rate)

A grand accessible doorway — wide ramp, braille signage, automatic sensor, diverse silhouettes entering together through the same door


Kesimpulan

Accessibility bukan feature yang ditambahkan di akhir — ia adalah fundamental architecture principle.

Final Action Items
  1. Audit current state dengan axe-core atau Lighthouse
  2. Fix high-impact issues: keyboard navigation, alt text, color contrast
  3. Implement skip links dan focus management
  4. Add accessibility ke Definition of Done
  5. Regular testing dengan assistive technology

Accessibility yang baik = good design. Ketika kita membangun untuk edge cases, seluruh user experience meningkat.

Digital yang truly universal = digital yang bekerja untuk semua orang, tanpa terkecuali.


Referensi

PropertyTypeDescription
WCAG 2.2 Quick Reference w3.org/WAI/WCAG22/quickref Quick reference guide for WCAG 2.2
WAI ARIA Documentation w3.org/WAI/ARIA Official WAI ARIA documentation
WebAIM Contrast Checker webaim.org/resources/contrastchecker Validate color contrast ratio
axe DevTools deque.com/axe/devtools Accessibility testing tool by Deque
Accessibility Insights accessibilityinsights.io Microsoft's accessibility auditing tool
Inclusive Components inclusive-components.design Pattern library for accessible components

Artikel terkait

Rekayasa Perangkat Lunak

Search & Catalog 15k SKU Q-Commerce: Relevan + In-Stock Real-time

System design search dan catalog untuk quick commerce dengan 15.000+ SKU. Elasticsearch full-text search dengan multi-match query dan typo tolerance (fuzziness), filter ketersediaan per-hub via Redis pipeline query-time filtering, ranking berbasis relevansi, ketersediaan, margin, dan popularitas, index update via Kafka streaming, dan autocomplete handler. Implementasi Golang lengkap dengan worker concurrency pattern untuk index sync.
Faisal Affan
Faisal Affan
Diterbitkan

Real-time Order Tracking Q-Commerce: Driver Bergerak di Peta Live

System design real-time order tracking untuk quick commerce. Driver GPS ingestion via WebSocket dengan throttling dan validasi, Kalman filter untuk position smoothing, Redis pub/sub fan-out by order ID untuk scale ribuan driver concurrent, dan Server-Sent Events (SSE) push ke user client. Implementasi Golang dengan pattern WebSocket goroutine pool, pub/sub broker, dan concurrent connection management.
Faisal Affan
Faisal Affan
Diterbitkan
Rekayasa Perangkat Lunak
Real-time Inventory Dark Store: Cegah Oversell di Q-Commerce

Real-time Inventory Dark Store: Cegah Oversell di Q-Commerce

Desain inventory per-hub untuk Astro (instant grocery). Reservation pattern dengan Redis DECRBY atomic + TTL, async sync ke Postgres, stock partitioning untuk hot SKU, reaper job untuk reservation leak, dan cycle counting untuk stok fisik vs sistem. Implementasi Golang lengkap.
Faisal Affan
Faisal Affan
Diterbitkan

Promo & Voucher Engine Q-Commerce: Rule Engine Anti-Abuse

System design promo engine untuk quick commerce. Rule engine dengan kondisi komposable (min transaksi, first-N-order, area, kategori) ke efek (discount, free ongkir), atomic counter untuk limit penggunaan Redis Lua, anti-fraud device fingerprinting, stackable vs eksklusif promo resolution, dan budget cap. Implementasi Golang lengkap dengan composable condition interface, AND/OR composite tree, concurrent-safe redeem, serta Kafka event streaming untuk audit trail.
Faisal Affan
Faisal Affan
Diterbitkan