<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: R3TICULAR</title>
    <description>The latest articles on DEV Community by R3TICULAR (@r3ticular).</description>
    <link>https://dev.to/r3ticular</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3877394%2Fedb1cc1d-750c-4363-b783-d7cc7b4da306.jpeg</url>
      <title>DEV Community: R3TICULAR</title>
      <link>https://dev.to/r3ticular</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/r3ticular"/>
    <language>en</language>
    <item>
      <title>You’re Probably Not Testing Accessibility the Way Users Experience It</title>
      <dc:creator>R3TICULAR</dc:creator>
      <pubDate>Mon, 13 Apr 2026 22:41:48 +0000</pubDate>
      <link>https://dev.to/r3ticular/youre-probably-not-testing-accessibility-the-way-users-experience-it-46em</link>
      <guid>https://dev.to/r3ticular/youre-probably-not-testing-accessibility-the-way-users-experience-it-46em</guid>
      <description>&lt;p&gt;Most frontend developers today use tools like Axe, WAVE, or Lighthouse to test accessibility.&lt;/p&gt;

&lt;p&gt;And that’s a good start.&lt;/p&gt;

&lt;p&gt;But there’s a gap that these tools don’t really cover:&lt;/p&gt;

&lt;p&gt;They don’t tell you what a screen reader user actually hears.&lt;/p&gt;

&lt;p&gt;The Problem: Accessibility ≠ Announcement&lt;/p&gt;

&lt;p&gt;Let’s take a simple example:&lt;/p&gt;



&lt;p&gt;From a rule-based perspective, this passes:&lt;br&gt;
-It has an accessible name&lt;br&gt;
-It uses a semantic element&lt;/p&gt;

&lt;p&gt;But what does a screen reader actually announce?&lt;br&gt;&lt;br&gt;
NVDA: “Submit Payment, button”&lt;br&gt;
VoiceOver: “Submit Payment, button”&lt;br&gt;
JAWS: “Submit Payment, button”&lt;/p&gt;

&lt;p&gt;So far, so good.&lt;/p&gt;

&lt;p&gt;Now let’s tweak it slightly:&lt;/p&gt;

&lt;p&gt;Submit&lt;/p&gt;

&lt;p&gt;This might still pass some basic checks.&lt;/p&gt;

&lt;p&gt;But a screen reader might announce:&lt;/p&gt;

&lt;p&gt;“Submit”&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;“Submit, button”&lt;/p&gt;

&lt;p&gt;That’s a completely different experience.&lt;/p&gt;

&lt;p&gt;The Real Pain: Testing Screen Readers Is Hard&lt;/p&gt;

&lt;p&gt;If you’ve ever tried to properly test this, you know the workflow:&lt;/p&gt;

&lt;p&gt;Install NVDA (Windows),&lt;br&gt;
Maybe use JAWS (paid, also Windows)&lt;br&gt;
Use VoiceOver (macOS),&lt;br&gt;
Navigate everything with a keyboard&lt;br&gt;
Listen carefully to announcements&lt;br&gt;
Repeat across browsers and flows&lt;/p&gt;

&lt;p&gt;It works—but it’s pretty slow, manual, hard to automate, and OS dependent &lt;/p&gt;

&lt;p&gt;In practice, what happens is:&lt;br&gt;
Run Axe/Lighthouse → fix obvious issues then&lt;br&gt;
Do minimal screen reader testing (if any), then&lt;br&gt;
Ship- badaboom.&lt;/p&gt;

&lt;p&gt;The problem?&lt;/p&gt;

&lt;p&gt;Most accessibility issues that affect real users show up in how things are announced, not just whether rules pass.&lt;/p&gt;

&lt;p&gt;A Missing Layer in the Tooling&lt;/p&gt;

&lt;p&gt;What’s missing is something in between:&lt;br&gt;
Not just rule-based linting&lt;br&gt;
Not full manual screen reader testing but-&lt;/p&gt;

&lt;p&gt;A way to preview how your markup will be interpreted by assistive technologies&lt;/p&gt;

&lt;p&gt;Recently in being fed up with this, I started building a tool to help with this exact problem:&lt;br&gt;
👉 getspeakable.dev&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1zidyv0q7annvmoa5we.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1zidyv0q7annvmoa5we.png" alt="Image displaying the analyzer tool at getspeakable.dev" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can paste in HTML and see predicted announcements for:&lt;br&gt;
    • NVDA&lt;br&gt;
    • JAWS&lt;br&gt;
    • VoiceOver&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;🔍&lt;/p&gt;

&lt;p&gt;Might produce something like:&lt;/p&gt;

&lt;p&gt;“button”&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;“Search, button”&lt;/p&gt;

&lt;p&gt;Which immediately tells you:&lt;br&gt;
the element has no accessible name&lt;/p&gt;

&lt;p&gt;Noted that, this isn’t a replacement for real screen reader testing.&lt;/p&gt;

&lt;p&gt;Instead, it fits earlier in the process alongside linting (Axe &amp;amp; lighthouse) tools, then using speakable for audible authentication/regression, and the n manual screen reader testing to validate real user experience.&lt;/p&gt;

&lt;p&gt;Catching them earlier is significantly cheaper than fixing them later.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>a11y</category>
      <category>api</category>
    </item>
  </channel>
</rss>
