<?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>Forem: Rachel Leggett</title>
    <description>The latest articles on Forem by Rachel Leggett (@rleggos).</description>
    <link>https://forem.com/rleggos</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%2F446848%2F1ff123ba-04ff-481a-8e92-85616b0903fa.jpg</url>
      <title>Forem: Rachel Leggett</title>
      <link>https://forem.com/rleggos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rleggos"/>
    <language>en</language>
    <item>
      <title>Just F*ing Ship It Challenge 2020 - My Project Recap</title>
      <dc:creator>Rachel Leggett</dc:creator>
      <pubDate>Mon, 07 Dec 2020 02:59:50 +0000</pubDate>
      <link>https://forem.com/rleggos/just-f-ing-ship-it-challenge-2020-my-project-recap-3kkb</link>
      <guid>https://forem.com/rleggos/just-f-ing-ship-it-challenge-2020-my-project-recap-3kkb</guid>
      <description>&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;Each year in October, &lt;a href="https://womenmake.com/"&gt;Women Make&lt;/a&gt; holds a month-long, non-competitive hackathon called &lt;a href="https://womenmake.com/30-day-challenge-2020-projects"&gt;Just F*ing Ship It&lt;/a&gt;. The goal is to build and launch something over the course of a month.&lt;/p&gt;

&lt;p&gt;2020 was the third year of the challenge and my first year participating. Here's what I did and what I learned!&lt;/p&gt;

&lt;h2&gt;
  
  
  In This Article
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
What I Built

&lt;ul&gt;
&lt;li&gt;Validating my Idea&lt;/li&gt;
&lt;li&gt;The Scope&lt;/li&gt;
&lt;li&gt;Screenshots&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;The Tech and Tools I Used&lt;/li&gt;
&lt;li&gt;
What I Learned and Other Takeaways

&lt;ul&gt;
&lt;li&gt;Would I Do it Again?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;How It's Going Now&lt;/li&gt;
&lt;li&gt;What's Next for Start Designing Today&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Validating my Idea
&lt;/h3&gt;

&lt;p&gt;At first, I wanted to do something simple and small, like redesigning this blog. But then I got an idea that I just couldn't get out of my head and bought a domain, as you do. 😂&lt;/p&gt;

&lt;p&gt;I spend much of my spare time &lt;a href="https://arbortwist.com/shop/"&gt;designing knitting patterns&lt;/a&gt;, which I have been doing since 2015. I have learned a lot about knitting pattern design from resources dispersed all across the web during that time.&lt;/p&gt;

&lt;p&gt;I had recently had a few conversations with other knitters who wanted to start designing, but didn't know how to start. Those conversations got me thinking that a one-stop resource website could be helpful.&lt;/p&gt;

&lt;p&gt;I posted a poll on Instagram asking if folks would be interested in a website that collected resources on how to design knitting and crochet patterns and got enough interest that I decided to go for it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lhC4gSiT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/tm21y2jyoy7vh880ix1h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lhC4gSiT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/tm21y2jyoy7vh880ix1h.jpg" alt="Would you be interested in an off-Ravelry website with resources for getting started in pattern design? 72% vote yes, 28% vote no." width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I bought &lt;a href="https://startdesigningtoday.com/"&gt;startdesigningtoday.com&lt;/a&gt; (and startdesigning.today for good measure), created a new &lt;a href="https://convertkit.com/"&gt;ConvertKit&lt;/a&gt; account, and threw up a quick landing page with a form for interested folks to submit their email address.&lt;/p&gt;

&lt;p&gt;I &lt;a href="https://www.instagram.com/p/CF5QZuDpbkw/"&gt;posted about it on Instagram&lt;/a&gt; and got some interest right away! Nine aspiring designers signed up for my interest list in the first two days, with a few more trickling in throughout the month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eUC26V8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lbkl6vp0u5lgzh9a7fip.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eUC26V8V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/lbkl6vp0u5lgzh9a7fip.jpg" alt="Line graph of total subscribers from October 1 through October 31, 2020." width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Scope
&lt;/h3&gt;

&lt;p&gt;Since the challenge only lasted one month and I work a full-time job, I needed to make sure to scope the project to something I could actually build and ship in a month, while working on it just a few hours a week.&lt;/p&gt;

&lt;p&gt;I have big ideas around building a whole Start Designing Today ecosystem (like an email course and community), but for this challenge, I decided to focus on the website. Even if I never get around to building any of the other stuff, I think the website provides a good amount of value on its own.&lt;/p&gt;

&lt;p&gt;I wrote out a very brief list of functional requirements for the website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The website should have resources pages.&lt;/li&gt;
&lt;li&gt;Users should be able to search resources.&lt;/li&gt;
&lt;li&gt;Users should be able to filter resources by category.&lt;/li&gt;
&lt;li&gt;The website should have a blog section with original articles.&lt;/li&gt;
&lt;li&gt;The website should show featured articles.&lt;/li&gt;
&lt;li&gt;Users should be able to sign up for a newsletter.&lt;/li&gt;
&lt;li&gt;Users should be able to submit a resource.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the end, I decided to reduce the scope even further to ship an MVP in time. I only included these four functional requirements in the website I launched on November 1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The website should have resources pages.&lt;/li&gt;
&lt;li&gt;Users should be able to filter resources by category.&lt;/li&gt;
&lt;li&gt;The website should have a blog section with original articles.&lt;/li&gt;
&lt;li&gt;Users should be able to sign up for a newsletter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;For larger screenshots, &lt;a href="https://devyarns.com/women-make-challenge-recap-2020/"&gt;visit the original article on my blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here are some screenshots of the main features of the site, or you can &lt;a href="https://startdesigningtoday.com/"&gt;click here to browse it yourself&lt;/a&gt;. These screenshots are taken of the desktop site--if you are reading this on your phone, &lt;a href="https://startdesigningtoday.com/"&gt;visiting the live site&lt;/a&gt; will be a better, responsive experience.&lt;/p&gt;

&lt;p&gt;If you aren't interested in the appearance and structure of the site, click here to skip ahead to the technical implementation details! I won't be offended. 😊&lt;/p&gt;

&lt;p&gt;I went with an &lt;a href="https://videofruit.com/blog/website-optimization/"&gt;upside-down homepage&lt;/a&gt; approach to prioritize newsletter signups. I didn't want to bury the newsletter call to action at the bottom of the page where visitors might not see it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nYD38f3g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/bcmos8jpsbsm9i6xaatk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nYD38f3g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/bcmos8jpsbsm9i6xaatk.jpg" alt="A screenshot of the header found at startdesigningtoday.com." width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below the header, the homepage prompts visitors to select which stage of the design process they are looking for help with. These are the resource categories I mentioned in my functional requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5qgme4dr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1tuc1q5pzuji45k3pwoc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5qgme4dr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/1tuc1q5pzuji45k3pwoc.jpg" alt="A screenshot of the resource categories on the Start Designing Today homepage: your idea, submitting to publishers, writing the pattern, getting ready to publish, self-publishing, and marketing." width="800" height="879"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a user clicks on a resource category, they come to a page with subcategories/topics across the top that they can click to view resources about that topic. Below is an example of a resource page, &lt;a href="https://startdesigningtoday.com"&gt;Submitting to Publishers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IbRT89Ni--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/4rql2fgqc29tr90knjce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IbRT89Ni--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/4rql2fgqc29tr90knjce.png" alt="The Submitting to Publishers resources page with the following topics: Calls For Submissions, Estimating Yarn Use, Schematics, Swatching, Writing Design Proposals. There is a grid of resource cards below the topics list." width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are also &lt;a href="https://startdesigningtoday.com/blog/"&gt;blog&lt;/a&gt;, &lt;a href="https://startdesigningtoday.com/about/"&gt;about&lt;/a&gt;, and &lt;a href="https://startdesigningtoday.com/contact/"&gt;contact&lt;/a&gt; pages, but there's nothing particularly interesting and screenshot-worthy going on there. 😂&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech and Tools I Used
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Front End: Gatsby
&lt;/h3&gt;

&lt;p&gt;I used &lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt; for the front end. I already had some limited experience with Gatsby from building &lt;a href="https://rachelleggett.com"&gt;my personal site&lt;/a&gt; and customizing this blog, but not really enough to build Start Designing Today.&lt;/p&gt;

&lt;p&gt;However, &lt;a href="https://mastergatsby.com/"&gt;Wes Bos's Gatsby course&lt;/a&gt;, which I had been looking forward to for a while, came out around the start of the challenge. The timing was perfect for me to use this project as a tool to practice what I learned.&lt;/p&gt;

&lt;p&gt;To be honest, I'm still only about halfway through the course! Once I learned everything I needed for Start Designing Today, I stopped so I could get going on building the site. I'll get back to it sometime soon, I promise!&lt;/p&gt;

&lt;h3&gt;
  
  
  No-Code Back End: Airtable
&lt;/h3&gt;

&lt;p&gt;I didn't want to build a custom backend for this project, but I didn't need a full CMS either. I decided to go with &lt;a href="https://airtable.com/"&gt;Airtable&lt;/a&gt;, which is a pretty sweet no-code application tool.&lt;/p&gt;

&lt;p&gt;I used it to build a simple relational database with just three tables: Parent Categories, Categories, and Links.&lt;/p&gt;

&lt;p&gt;I used the &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-source-airtable/"&gt;gatsby-source-airtable&lt;/a&gt; plugin to get the data out of Airtable and into my Gatsby site. &lt;a href="https://blog.airtable.com/build-your-own-custom-blog-cms-with-airtable-and-gatsbyjs/"&gt;This post on building a custom CMS with Airtable and Gatsby&lt;/a&gt; was really helpful for getting up and running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosting: Netlify
&lt;/h3&gt;

&lt;p&gt;I use &lt;a href="https://netlify.com"&gt;Netlify&lt;/a&gt; for hosting whenever I can these days. Since Start Designing Today is a static site, Netlify is perfect for it.&lt;/p&gt;

&lt;p&gt;Whenever I add new data to Airtable, I just pop on over to Netlify and trigger a new deploy. And when I update my code and push it to GitHub, a new deploy builds automatically. 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  Newsletter: ConvertKit
&lt;/h3&gt;

&lt;p&gt;I'm using the free tier of &lt;a href="https://convertkit.com/"&gt;ConvertKit&lt;/a&gt; for the newsletter, for now. I'm thinking about doing a pattern design email course in 2021. If I do that, I might upgrade to a paid plan so I can have access to automations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned and Other Takeaways
&lt;/h2&gt;

&lt;p&gt;First things first: I learned I don't want to do anything every day for a month if it isn't eating, sleeping, or knitting. 😂 I set out to work on this every day in October, but after about two weeks, I couldn't keep up the pace anymore. I needed breaks and took several, some multiple days long. I'm really glad I went with a limited MVP scope for this project so I could comfortably take breaks and still ship on time without stressing.&lt;/p&gt;

&lt;p&gt;I found it incredibly helpful to have a community of people doing this challenge at the same time. I doubt I would have built and shipped this website in a month if it wasn't for the amazing &lt;a href="https://womenmake.com/"&gt;Women Make&lt;/a&gt; community.&lt;/p&gt;

&lt;p&gt;Announcing the site at the start of the challenge also helped me stay accountable because I knew there were real people excited about it and waiting for it. That helped me avoid the trap of finishing the first 80%, which is usually the most fun part, and then never finishing that last 20% and getting it out the door.&lt;/p&gt;

&lt;h3&gt;
  
  
  Would I Do it Again?
&lt;/h3&gt;

&lt;p&gt;I had a blast participating in the Just F*ing Ship It challenge this year and I definitely think it will become an annual thing for me, but I probably won't try to take a completely new project from start to MVP launch next year. Even though I did take days off, I was very ready to be done by the end.&lt;/p&gt;

&lt;p&gt;Maybe next year I'll tackle that blog redesign, instead. 🤷‍♀️&lt;/p&gt;

&lt;h2&gt;
  
  
  How It's Going Now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Newsletter
&lt;/h3&gt;

&lt;p&gt;Since launching, I started sending the weekly Start Designing Today newsletter. As of this writing on December 5, 2020, my little email list has grown slightly to 16 subscribers. I have sent four newsletters with open rates between 60% and 85% and no unsubscribes yet!&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO
&lt;/h3&gt;

&lt;p&gt;A few weeks after launch, I signed up for a free &lt;a href="https://ahrefs.com/webmaster-tools"&gt;Ahrefs Webmaster Tools&lt;/a&gt; account and found out that I had really f*ed up my SEO by accidentally having redirect chains for every page! (This is bad because Google won't index pages that look like they have moved.)&lt;/p&gt;

&lt;p&gt;It turns out it's a really bad idea to forget the trailing slash in links and even worse to generate page slugs without trailing slashes. If I referenced a page with a trailing slash, it would redirect to that same page without a trailing slash, and then redirect AGAIN to that page with a trailing slash. D'oh.&lt;/p&gt;

&lt;p&gt;I updated how I was generating page URLs in my &lt;code&gt;gatsby-node.js&lt;/code&gt; file and generated them with a trailing slash from the start. I also checked all my internal links and added trailing slashes. That seems to have solved the problem.&lt;/p&gt;

&lt;p&gt;I referenced &lt;a href="https://blog.maximeheckel.com/posts/seo-mistakes-i-have-made-and-how-i-fixed-them"&gt;this article by Maxime Heckel on SEO mistakes he has made with his Gatsby blog and how to fix them&lt;/a&gt; several times throughout the process of debugging that redirect chain issue. It's definitely worth checking out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Results
&lt;/h3&gt;

&lt;p&gt;So far, I have received one real testimonial that the site is helpful! A knitter DMed me on Instagram to tell me that she was designing her first sweater thanks to Start Designing Today! She said "your site is so perfect for finding what I need." I couldn't be happier with that!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next for Start Designing Today
&lt;/h2&gt;

&lt;p&gt;For now, I'm focusing on sending my newsletter consistently, coming up with more topics to write about for the blog, and improving SEO by doing some keyword research and editing copy where it makes sense. I have a couple sites in mind that I would like to compete with for rankings, so I'll be starting there.&lt;/p&gt;

&lt;p&gt;In the longer term, I would like to launch an email course to walk folks through the process of designing a pattern, with the goal of having a publication-ready pattern by the end of it.&lt;/p&gt;

&lt;p&gt;I also want to explore creating a community for aspiring knit and crochet pattern designers, whether that's something as simple as a Discord server, or something more.&lt;/p&gt;

&lt;h2&gt;
  
  
  What About You?
&lt;/h2&gt;

&lt;p&gt;Have you launched anything recently? How is it going? I would love to hear about it!&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>airtable</category>
      <category>womenintech</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Why You Need to be Doing Manual Accessibility Testing and How to Get Started</title>
      <dc:creator>Rachel Leggett</dc:creator>
      <pubDate>Wed, 25 Nov 2020 02:52:52 +0000</pubDate>
      <link>https://forem.com/rleggos/why-you-need-to-be-doing-manual-accessibility-testing-and-how-to-get-started-1edi</link>
      <guid>https://forem.com/rleggos/why-you-need-to-be-doing-manual-accessibility-testing-and-how-to-get-started-1edi</guid>
      <description>&lt;p&gt;How many times have you seen a tweet like this?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Proud to say my website is fully accessible! #a11y&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R1RA0_ZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gv9trn57operx08d66l8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R1RA0_ZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gv9trn57operx08d66l8.png" alt="A screenshot showing a 100/100 accessibility audit lighthoues score"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don't want to diminish the effort it takes to reach a perfect accessibility score on Lighthouse. That is a great first step and feel free to pat yourself on the back about it!&lt;/p&gt;

&lt;p&gt;However, the important thing to know is that &lt;strong&gt;the work does not stop there&lt;/strong&gt;. A 100 does not mean your site is fully accessible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.deque.com/blog/5-digital-accessibility-myths-busted/#:~:text=Myth%20%235%3A%20I%20used%20some,*some*%20types%20of%20errors."&gt;Automated testing can only catch about 40-50% of accessibility issues.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In This Article
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automated testing can only test for programmatic issues, without usability considerations.&lt;/li&gt;
&lt;li&gt;
What Can you Do?

&lt;ul&gt;
&lt;li&gt;
Keyboard Testing for Accessibility

&lt;ul&gt;
&lt;li&gt;Remember Your Sighted Keyboard Users&lt;/li&gt;
&lt;li&gt;How to Get Started with Keyboard Testing&lt;/li&gt;
&lt;li&gt;Expected Behavior&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
Screen Reader Testing for Accessibility

&lt;ul&gt;
&lt;li&gt;Why You Should Test with a Screen Reader&lt;/li&gt;
&lt;li&gt;Which Screen Readers to Use and How to Use Them&lt;/li&gt;
&lt;li&gt;Why You Should Also Test on Mobile (If Possible)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automated testing can only test for programmatic issues, without usability considerations.
&lt;/h2&gt;

&lt;p&gt;Automated tests only work for those things that can be tested programmatically and objectively, such as the existence of alt tags, whether color contrast ratios are high enough, and the existence of form labels.&lt;/p&gt;

&lt;p&gt;However, even these things are subjective.&lt;/p&gt;

&lt;p&gt;If alt tags are present for all images, the alt tag test will pass, but &lt;a href="https://devyarns.com/write-better-alt-text/"&gt;that doesn't mean the alt text is actually appropriate for those images&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is extremely difficult to automatically test color contrast for text with a gradient or photograph background.&lt;/p&gt;

&lt;p&gt;The form labels that are present might not be appropriate for the fields they are labeling.&lt;/p&gt;

&lt;p&gt;These are just a few examples of the many things that still require a human touch to verify accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can You Do?
&lt;/h2&gt;

&lt;p&gt;Fortunately, there are manual web accessibility testing tools readily available and literally at your fingertips!&lt;/p&gt;

&lt;p&gt;If you're just getting started with manual accessibility testing, I recommend focusing on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keyboard testing.&lt;/li&gt;
&lt;li&gt;Screen reader testing.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Keyboard Testing for Accessibility
&lt;/h3&gt;

&lt;p&gt;One key element of web accessibility is that &lt;a href="https://www.w3.org/WAI/WCAG21/Understanding/keyboard.html"&gt;it should be possible to perform every action using only the keyboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keyboard accessibility affects two types of users:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People who cannot physically use a mouse, or who have difficulty using a mouse. This can be due to a permanent, temporary, or situational disability (e.g. a person who experiences hand tremors, or someone holding a baby in their right arm while navigating using a keyboard with their left).&lt;/li&gt;
&lt;li&gt;Blind users who can physically use a mouse, but don't because they can't see where the cursor is located.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Remember Your Sighted Keyboard Users
&lt;/h4&gt;

&lt;p&gt;A common mistake--and one I have made myself--is to forget that there are many sighted (i.e. not blind) people who navigate the web using only their keyboard.&lt;/p&gt;

&lt;p&gt;It must be possible for both sighted AND non-sighted users to perform all functions using the keyboard.&lt;/p&gt;

&lt;p&gt;While a screen reader will announce the element that has focus to a blind user, a sighted user needs to be able to see where their focus is.&lt;/p&gt;

&lt;p&gt;The main thing to keep in mind here is that visible focus styles are key. None of that &lt;code&gt;outline: none;&lt;/code&gt; crap (without adding other visible styles)!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.deque.com/blog/give-site-focus-tips-designing-usable-focus-indicators/"&gt;Click here to read a great blog post from Deque on how to design useful and usable focus indicators.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  How to Get Started with Keyboard Testing
&lt;/h4&gt;

&lt;p&gt;Open up your webpage and try to navigate with your keyboard!&lt;/p&gt;

&lt;p&gt;The basics of keyboard navigation are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use your TAB key to advance focus from item to item on the page.&lt;/li&gt;
&lt;li&gt;Use SHIFT + TAB to go backwards on the page.&lt;/li&gt;
&lt;li&gt;Use ENTER to activate interactive elements such as links and buttons.&lt;/li&gt;
&lt;li&gt;Use arrow keys to move between radio buttons or checkboxes within a group.&lt;/li&gt;
&lt;li&gt;Use SPACE to select or deselect a checkbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Expected Behavior
&lt;/h4&gt;

&lt;p&gt;You should be able to navigate to and interact with all focusable elements on the page.&lt;/p&gt;

&lt;p&gt;Focusable elements are those that are interactive by default, such as links, buttons, and form fields, as well as anything to which you have added &lt;code&gt;tabindex="0"&lt;/code&gt; to add it to the logical focus order.&lt;/p&gt;

&lt;p&gt;It is NOT normal to be able to focus on non-interactive elements, so don't worry that your focus skips things like paragraphs, lists, images, etc. Don't manually add anything to the focus order unless absolutely necessary.&lt;/p&gt;

&lt;p&gt;For more on keyboard testing and expected behavior, &lt;a href="https://webaim.org/techniques/keyboard/"&gt;check out this article on keyboard accessibility from WebAIM&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screen Reader Testing for Accessibility
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Screen_reader"&gt;Screen readers&lt;/a&gt; are an assistive technology that allow blind users to interact with computers by announcing the elements on the page to the user and allowing the user to navigate through the page with their keyboard.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why You Should Test with a Screen Reader
&lt;/h4&gt;

&lt;p&gt;It's important to test with a screen reader to truly get a feel for whether your site is accessible to blind users. You should test for two main things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Are you able to access and interact with all elements of your site using only a keyboard?&lt;/li&gt;
&lt;li&gt;Can you understand the interface from the audio alone?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keyboard operability can vary when navigating with a screen reader activated. For example, I have seen cases where buttons could be activated with the enter key when tabbing through a site without a screen reader turned on, but that could not be activated when using a screen reader.&lt;/p&gt;

&lt;p&gt;Since not everyone navigating your site with a keyboard will be using a screen reader, it is still also important to test this without a screen reader, as described above.&lt;/p&gt;

&lt;p&gt;In addition, UI elements that make sense visually might need some tweaking to make them understandable to screen reader users. Some common examples of issues that can pop up include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;error messages that aren't programmatically associated with their fields (but appear next to those fields visually),&lt;/li&gt;
&lt;li&gt;radio button groups with some hidden buttons that announce the full number of buttons to screen reader users, including the hidden ones,&lt;/li&gt;
&lt;li&gt;and help text that is not programmatically associated with what it is trying to help with.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Which Screen Readers to Use and How to Use Them
&lt;/h4&gt;

&lt;p&gt;The three most popular screen readers on the market today are NVDA, JAWS, and VoiceOver (see the &lt;a href="https://webaim.org/projects/screenreadersurvey8/"&gt;WebAIM Screen Reader User Survey&lt;/a&gt; conducted in 2019).&lt;/p&gt;

&lt;p&gt;VoiceOver comes with all Apple devices by default, so you'll probably be testing with VoiceOver if you have a Mac laptop or desktop.&lt;/p&gt;

&lt;p&gt;For Windows, the most popular choices are NVDA and JAWS. JAWS is paid software, but NVDA is free and open source, so it is a good choice to use for testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dequeuniversity.com/screenreaders/"&gt;Click here for guides to getting started with each of these screen readers.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Why You Should Also Test on Mobile (If Possible)
&lt;/h4&gt;

&lt;p&gt;In addition to testing on a laptop or desktop computer, I highly recommend testing your website on a mobile device.&lt;/p&gt;

&lt;p&gt;The screen readers available for mobile devices vary slightly from their desktop counterparts. I have run into some challenging cases where functionality works with desktop screen readers, but not using a screen reader on a mobile device.&lt;/p&gt;

&lt;p&gt;It is important to test on a real device to find these issues, instead of just testing on a narrow browser window or in a device emulator on your desktop.&lt;/p&gt;

&lt;p&gt;For mobile testing, the most popular combinations are iOS with VoiceOver and Android with TalkBack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dequeuniversity.com/screenreaders/voiceover-ios-shortcuts"&gt;Click here for a guide to using VoiceOver on iOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dequeuniversity.com/screenreaders/talkback-shortcuts"&gt;Click here for a guide to using TalkBack on Android&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Manual testing is key for ensuring your website is accessible. Automated testing is a great way to get started, but it can only test for about half the potential issues.&lt;/p&gt;

&lt;p&gt;Adding keyboard testing and screen reader testing to your workflow can have a huge impact on the accessibility of your websites and web apps. Testing with a screen reader can be frustrating at first, but the more you practice, the easier it will become.&lt;/p&gt;

&lt;p&gt;Check out these resources (also linked above) for getting started with keyboard and screen reader testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webaim.org/techniques/keyboard/"&gt;WebAIM on keyboard accessibility.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dequeuniversity.com/screenreaders/"&gt;Guides to using a variety of screen readers, written for people using them for manual testing.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dequeuniversity.com/screenreaders/voiceover-ios-shortcuts"&gt;Getting started with mobile screen reader testing using VoiceOver on iOS.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dequeuniversity.com/screenreaders/talkback-shortcuts"&gt;Getting started with mobile screen reader testing using TalkBack on Android.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Will you be incorporating manual accessibility testing into your workflow? &lt;a href="https://twitter.com/rleggos"&gt;Let me know on Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>testing</category>
      <category>qa</category>
    </item>
    <item>
      <title>How to Give a Talk Without Being an Expert</title>
      <dc:creator>Rachel Leggett</dc:creator>
      <pubDate>Wed, 30 Sep 2020 20:26:03 +0000</pubDate>
      <link>https://forem.com/rleggos/how-to-give-a-talk-without-being-an-expert-1lc</link>
      <guid>https://forem.com/rleggos/how-to-give-a-talk-without-being-an-expert-1lc</guid>
      <description>&lt;p&gt;&lt;em&gt;I post all my articles on my self-hosted blog first: &lt;a href="https://devyarns.com/how-to-give-a-talk-without-being-an-expert/"&gt;this post first appeared on DevYarns&lt;/a&gt;. You might also be interested in &lt;a href="https://twitter.com/rleggos"&gt;my tweets about accessibility, web dev, and probably cats&lt;/a&gt;.&lt;/em&gt; 💻&lt;/p&gt;




&lt;p&gt;I gave my first conference talk in July 2020, which as of this writing was two months ago. I spoke at &lt;a href="https://2020.wpcampus.org/"&gt;WPCampus 2020 Online&lt;/a&gt; on how to &lt;a href="https://2020.wpcampus.org/schedule/improving-website-performance/"&gt;improve your WordPress site's performance&lt;/a&gt; (&lt;a href="https://2020.wpcampus.org/schedule/improving-website-performance/#video"&gt;video and transcript now available!&lt;/a&gt;), based on a case study of a non-WordPress web app (written in Python and Flask) I had worked on.&lt;/p&gt;

&lt;p&gt;In this post, I will discuss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why you don't need to be an expert,&lt;/li&gt;
&lt;li&gt;my experience submitting to WPCampus,&lt;/li&gt;
&lt;li&gt;and how I arrived at my final topic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  You Don't Need to Be an Expert
&lt;/h2&gt;

&lt;p&gt;I'm not even sure experts exist.&lt;/p&gt;

&lt;p&gt;I'm a firm believer that the smartest people know what they don't know and know how to ask for help instead of trying to learn everything themselves.&lt;/p&gt;

&lt;p&gt;The more I learn about a subject, the more I realize there is to know. Learning something new opens the door to five other new things that build on that knowledge.&lt;/p&gt;

&lt;p&gt;Through the process of applying, working with the director to fine-tune my topic, and actually writing and giving my talk, I learned that you don't need to be an expert to give a great talk. In fact, I think it's probably better if you aren't!&lt;/p&gt;

&lt;h3&gt;
  
  
  What to Be Instead
&lt;/h3&gt;

&lt;p&gt;Be passionate! Be curious! Be willing to ask questions and willing to be wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience Submitting to WPCampus
&lt;/h2&gt;

&lt;p&gt;I've only given one talk (plus taught a few knitting classes and sat on a Meetup panel once), so I'm no expert. 😉&lt;/p&gt;

&lt;p&gt;I spent a long time worrying about whether I was smart enough to give a talk, whether my topic ideas were interesting enough, whether my ideas were unique enough, and on and on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wpcampus.org"&gt;WPCampus&lt;/a&gt; has a supportive, inclusive, welcoming community of organizers and attendees. I had attended a couple times in the past so I knew what to expect from the conference, which helped me feel comfortable applying.&lt;/p&gt;

&lt;p&gt;As a sidenote, I had actually submitted a talk for their 2019 conference, too, which was not accepted. I attended that year and someone else gave a talk that was on a similar topic to what I had proposed, but was all-around better. Honestly, I would have chosen his talk over mine, too.&lt;/p&gt;

&lt;p&gt;My original 2020 topic submission was completely different from what I ended up presenting. Like, not even in the same ballpark. The conference director, &lt;a href="https://twitter.com/bamadesigner"&gt;Rachel Cherry&lt;/a&gt;, reached out to tell me that the organizers would like to have me speak, but they didn't think my topic would work for their conference.&lt;/p&gt;

&lt;p&gt;She was really helpful in getting me thinking about other potential topics. She asked me a few questions to get my brain working. What excites me? What have I worked on recently?&lt;/p&gt;

&lt;p&gt;I submitted some additional ideas and together we decided on the website performance topic. I ended up writing a talk that was 50% a case study of my web app refactor, and 50% how the attendees can apply what I learned to WordPress.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Arrived at my Topic
&lt;/h2&gt;

&lt;p&gt;Here's what I did to come up with my final website performance topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. I looked to my experience.
&lt;/h3&gt;

&lt;p&gt;What had I done or learned recently that stood out in my mind from the rest of my daily work?&lt;/p&gt;

&lt;p&gt;I had recently refactored a web app to triple its Lighthouse performance score. I learned a lot about performance optimization along the way.&lt;/p&gt;

&lt;p&gt;I knew there were lots of people who already knew everything I had learned. I hoped there might be others out there like me who did not and who could benefit from hearing about what I had done.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. I thought about what my coworkers had expressed interest in.
&lt;/h3&gt;

&lt;p&gt;One of my colleagues in particular was impressed by my work refactoring the web app. He is one of the most encouraging and enthusiastic people I have worked with. His enthusiasm about the project and his curiosity about what I did helped me along the path to creating a talk on the subject.&lt;/p&gt;

&lt;p&gt;I hoped others might be as interested as he was.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. I thought about questions I wanted answered.
&lt;/h3&gt;

&lt;p&gt;I needed to think about how to make this talk appeal to a WordPress audience. There are a couple concerns when working with WordPress that the app refactor didn't address. This meant I had two questions that needed answering in order to make this applicable to WordPress:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How do you optimize images for performance in WordPress?&lt;/li&gt;
&lt;li&gt;How can you mitigate the effects of third-party themes and plugins on performance?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. I did research to answer those questions.
&lt;/h3&gt;

&lt;p&gt;I did not know the answer to either of those questions when I submitted my talk, but I knew I could do some research and find the answers. It actually wasn't until a week or two before giving my talk that I had the answers, or at least &lt;em&gt;my&lt;/em&gt; answers.&lt;/p&gt;

&lt;p&gt;I spent some time optimizing a WordPress site I own (&lt;a href="https://arbortwist.com"&gt;arbortwist.com--my knitting pattern company&lt;/a&gt;), focusing on the above two questions. I learned a lot, plus it had the added benefit of making my site better!&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;I had a great time speaking and I definitely want to do it again. The next time I'm brainstorming talk ideas, I will follow the framework outlined above and ask myself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What in my experience has been a bit unique or stood out in some way?&lt;/li&gt;
&lt;li&gt;What are my coworkers interested in that I have done?&lt;/li&gt;
&lt;li&gt;What questions do I have? What do I want to dig into further?&lt;/li&gt;
&lt;li&gt;How can I answer those questions?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am really curious to hear how others come up with talk ideas. Do you do something differently than me? I would love to hear about it!&lt;/p&gt;

</description>
      <category>speaking</category>
      <category>career</category>
      <category>conferences</category>
      <category>publicspeaking</category>
    </item>
    <item>
      <title>Five Ways to Write Better Alt Text</title>
      <dc:creator>Rachel Leggett</dc:creator>
      <pubDate>Sun, 27 Sep 2020 20:32:42 +0000</pubDate>
      <link>https://forem.com/rleggos/five-ways-to-write-better-alt-text-4jib</link>
      <guid>https://forem.com/rleggos/five-ways-to-write-better-alt-text-4jib</guid>
      <description>&lt;p&gt;This article was originally published on &lt;a href="https://devyarns.com"&gt;DevYarns&lt;/a&gt;. Head over there if you like this post and want to read others like it.&lt;/p&gt;




&lt;p&gt;It's easy to write minimally-compliant alt text. Just stick anything at all in there and automated testing tools will be happy. But if you actually care about providing high-quality experiences for blind users (which you should), writing alt text is a lot more challenging.&lt;/p&gt;

&lt;p&gt;Today, I'm sharing five tips that should make it a little easier—with practice—to write effective alt text that actually makes sense.&lt;/p&gt;

&lt;p&gt;If you aren't a web developer and just want to know how to write better alt text (e.g. for social media), you can skip over the code samples in this article. The rest of it still applies!&lt;/p&gt;

&lt;p&gt;In this article:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Don't say "photo", "image," etc.&lt;/li&gt;
&lt;li&gt;Focus on the image's purpose.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;alt=""&lt;/code&gt; for decorative images.&lt;/li&gt;
&lt;li&gt;Keep it brief.&lt;/li&gt;
&lt;li&gt;Don't repeat yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Don't Say "Photo," "Image," Etc.
&lt;/h2&gt;

&lt;p&gt;One of the most common mistakes I have seen is to start your alt text with something like "an image of". This creates a worse experience for screen reader users because screen readers already announce images as such. For example, VoiceOver for macOS reads the alt text first, followed by the word "image."&lt;/p&gt;

&lt;p&gt;Take the following possible alt text for a picture of a cat:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Photo of a brown tabby cat curled up on the couch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The readout from VoiceOver will be something like, "Photo of a brown tabby cat curled up on the couch, image." While technically correct, announcing both "image" and "photo" is redundant and a worse user experience.&lt;/p&gt;

&lt;p&gt;Instead, try something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A brown tabby cat curled up on the couch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or, in your HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"myCuteCat.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"A brown tabby cat curled up on the couch."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The readout would then be something like, "A brown tabby cat curled up on the couch, image." Much better, don't you think?&lt;/p&gt;

&lt;p&gt;Since there is usually an exception to every rule, I would argue that it might be helpful to identify the type of image something is, &lt;em&gt;when it is important to the meaning.&lt;/em&gt; For example, if you are sharing a digital illustration of your cat, it might be appropriate to say so in the alt text, as long as the fact that the image is an illustration is relevant to the point you trying to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Focus on the Image's Purpose
&lt;/h2&gt;

&lt;p&gt;When composing alt text, it can be tricky to know what to write! You might think you need to describe literally everything in the image, but that's usually not the case.&lt;/p&gt;

&lt;p&gt;Instead, consider what the purpose of the image is, in context.&lt;/p&gt;

&lt;p&gt;Take the example of this photo of some knitting and a cup of coffee I tweeted the other day:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d6rgstNS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4igvkzmhfxge6osftyep.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d6rgstNS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4igvkzmhfxge6osftyep.jpeg" alt="A knitting project in front of a full mug of coffee."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was the content of my tweet:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today's up early, before work activity is knitting! I finished some short sleeves for a top and now I'm going to wind yarn for a hat.&lt;/p&gt;

&lt;p&gt;P.S. I really miss travel. 😭&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I added the following alt text to my image:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Two flat pieces of knitting in front of a full coffee mug. The mug is the Vancouver edition of the Starbucks 'You Are Here' collection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this case, my intent in sharing the image was to show off my knitting project and to convey that I miss travel. I chose the Vancouver mug that morning because it was from a place I had visited. I described the coffee mug in my alt text because it helped convey that I miss traveling.&lt;/p&gt;

&lt;p&gt;Let's consider another potential purpose for this image!&lt;/p&gt;

&lt;p&gt;What if this was a promotional photo targetting knitters and advertising the hand-dyed yarn used in the project? The alt text might look something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A stockinette knitting project worked using a mostly pink variegated colorway with blue, darker pink, and purple speckles distributed evenly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice that I didn't even mention the coffee mug because it has nothing to do with the photo's purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Icons
&lt;/h3&gt;

&lt;p&gt;I want to call out icons specifically because I've seen their alt text done wrong many times, specifically when used as links.&lt;/p&gt;

&lt;p&gt;Imagine that I have an image of a Twitter logo that I want to use as a link to my Twitter profile. You might think I should do something like this, where the image alt text is "Twitter logo":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/rleggos"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"twitterLogo.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Twitter logo"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;However, when a screen reader announces this, the readout will be something like "link, Twitter logo, image." How is a blind user supposed to know where this link goes?&lt;/p&gt;

&lt;p&gt;In a case like this, it is best to think about the alt text as link text. If I was making a text link to my Twitter profile, I wouldn't write "Twitter logo". Instead, I might write something like "my Twitter".&lt;/p&gt;

&lt;p&gt;So, better alt text might be "my Twitter", as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://twitter.com/rleggos"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"twitterLogo.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"my Twitter"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The same principle applies if you are using icon fonts and labeling them with &lt;code&gt;aria-label&lt;/code&gt;, but that goes beyond the scope of this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Use alt="" for Decorative Images
&lt;/h2&gt;

&lt;p&gt;The header image at the top of this post is a good example of a decorative image. It does not add any meaning to this post and it isn't necessary to understand this content. If it wasn't there, it wouldn't matter.&lt;/p&gt;

&lt;p&gt;The best way to handle alt text for decorative images is to include the &lt;code&gt;alt&lt;/code&gt; attribute, but leave it blank, as in the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"decorativeImageFileName.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You might think you could just leave off the &lt;code&gt;alt&lt;/code&gt; attribute altogether, but that would result in a worse experience for screen reader users. When the &lt;code&gt;alt&lt;/code&gt; attribute is missing, most screen readers will read out the name of the image file. Users might be left wondering what they are missing.&lt;/p&gt;

&lt;p&gt;Including this &lt;code&gt;alt&lt;/code&gt; attribute, but leaving it blank, lets screen readers know that the image is decorative and should be skipped over when reading the page. A screen reader won't tell the user anything about the image at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Keep it Brief
&lt;/h2&gt;

&lt;p&gt;There is no technical limitation on the length of alt text. However, the generally accepted purpose of alt text is to provide a short description, so it's best to keep it brief.&lt;/p&gt;

&lt;p&gt;Since alt text is meant to be short, screen readers don't allow users to pause alt text and resume it where they left off. This means long alt text descriptions are bad for usability.&lt;/p&gt;

&lt;p&gt;There is no consensus for the optimal length of alt text, but a variety of online sources suggest lengths between 80 and 150 characters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://deque.com%5B"&gt;Deque&lt;/a&gt;, the creator of &lt;a href="https://www.deque.com/axe/"&gt;axe&lt;/a&gt;, one of today's most widely used accessibility testing tools, &lt;a href="https://dequeuniversity.com/checklists/web/guide"&gt;recommends limiting alt text to about 150 characters&lt;/a&gt;. They suggest thinking of it like an old-school 140-character tweet, if you need help conceptualizing that length.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use aria-describedby If You Need a Longer Description
&lt;/h3&gt;

&lt;p&gt;Sometimes, it might not be possible to fully describe your image in a short alt text description. If this is the case, you can write a longer description elsewhere in the HTML and associate it with the image using &lt;code&gt;aria-describedby&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For a practical example of this, consider this screenshot I included in my &lt;a href="https://2020.wpcampus.org/schedule/improving-website-performance/"&gt;WPCampus 2020 Online talk on website performance&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FS30O2je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lbqs85ecc9rfnm4nk4hb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FS30O2je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lbqs85ecc9rfnm4nk4hb.png" alt="Screenshot of Lighthouse performance audit results."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If I'm writing content that includes this screenshot and it's important that folks can read all the text contained in the screenshot, I'm going to need some alternative text. However, I shouldn't just shove everything into the &lt;code&gt;alt&lt;/code&gt; attribute on the image because it will be too long. Instead, I might use an unordered list to convey the information and associate it with the image using &lt;code&gt;aria-describedby&lt;/code&gt;. Here's what that markup could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"performanceScoreScreenshot.png"&lt;/span&gt;
  &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Results of a Lighthouse performance audit."&lt;/span&gt;
  &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"audit-results"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"audit-results"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Overall score: 63 out of 100.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;First contentful paint: 3.9 seconds.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Speed index: 3.9 seconds.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Largest contentful paint: 5.5 seconds.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Time to interactive: 5.2 seconds.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Total blocking time: 170 milliseconds.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Cumulative layout shift: 0.308.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, my &lt;code&gt;audit-results&lt;/code&gt; list will be associated with my image and screen readers will read that list as an additional description, after announcing the "Results of a Lighthouse performance audit" alt text.&lt;/p&gt;

&lt;p&gt;This solution is also visible to sighted users, of course. There are ways to visually hide content while keeping it available to screen readers, such as &lt;a href="https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/"&gt;those described by The A11y Project in their article on hiding content&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, in this particular case, I would recommend keeping the text description available to visual users. Plenty of users do things like zoom to view content, or use assistive technology to change the color and contrast levels of content to accomodate visual disabilities. To best serve these types of users, whenever you include an image with text on it, it is a great idea to include a text alternative that is visible to sighted users, too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; You might be tempted to use &lt;code&gt;aria-labelledby&lt;/code&gt; instead, but don't! Most screen readers give precedence to &lt;code&gt;aria-labelledby&lt;/code&gt; over &lt;code&gt;alt&lt;/code&gt;, meaning they will read &lt;code&gt;aria-labelledby&lt;/code&gt; &lt;em&gt;instead of&lt;/em&gt; the alt text, not in addition to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Don't Repeat Yourself
&lt;/h2&gt;

&lt;p&gt;This commonly cited programming advice is good for alt text, too.&lt;/p&gt;

&lt;p&gt;Let's revisit my knitting and coffee mug photo tweet from above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d6rgstNS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4igvkzmhfxge6osftyep.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d6rgstNS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4igvkzmhfxge6osftyep.jpeg" alt="A knitting project in front of a full mug of coffee."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tweet text:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today's up early, before work activity is knitting! I finished some short sleeves for a top and now I'm going to wind yarn for a hat.&lt;/p&gt;

&lt;p&gt;P.S. I really miss travel. 😭&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alt text:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Two flat pieces of knitting in front of a full coffee mug. The mug is the Vancouver edition of the Starbucks 'You Are Here' collection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice that I did not describe the knitting in the alt text, other than saying that the knitting is flat (as opposed to being worked in the round--a distinction that will make sense to any knitters who might come across my tweet).&lt;/p&gt;

&lt;p&gt;My tweet already says the project is a pair of short sleeves so there is no need to repeat that in the alt text. In fact, it would be a worse user experience if a screen reader announced that same information to the user twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Remember these five tips the next time you share an image online.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Don't say "photo", "image," etc.&lt;/li&gt;
&lt;li&gt;Focus on the image's purpose.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;alt=""&lt;/code&gt; for decorative images.&lt;/li&gt;
&lt;li&gt;Keep it brief.&lt;/li&gt;
&lt;li&gt;Don't repeat yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even if you're just tweeting or writing an Instagram caption, not building a website, these tips apply. If we all practice writing quality alt text, we can create a more inclusive web together. ❤️&lt;/p&gt;

&lt;h3&gt;
  
  
  Further Reading
&lt;/h3&gt;

&lt;p&gt;For more details and additional examples, check out the &lt;a href="https://webaim.org/techniques/alttext/"&gt;WebAIM article on alternative text&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Make Emojis Accessible in HTML</title>
      <dc:creator>Rachel Leggett</dc:creator>
      <pubDate>Fri, 25 Sep 2020 21:15:52 +0000</pubDate>
      <link>https://forem.com/rleggos/how-to-make-emojis-accessible-in-html-2n71</link>
      <guid>https://forem.com/rleggos/how-to-make-emojis-accessible-in-html-2n71</guid>
      <description>&lt;p&gt;This post originally appeared on my blog, &lt;a href="https://devyarns.com/"&gt;DevYarns&lt;/a&gt;, in August 2020. I post all my writing there first. Make sure to &lt;a href="https://devyarns.com/#subscribe"&gt;subscribe to my DevYarns newsletter&lt;/a&gt; for all my latest tips--emails no more than once a week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/rleggos"&gt;Follow me on Twitter&lt;/a&gt; for accessibility tips and cats.&lt;/p&gt;




&lt;p&gt;When I recently rewrote the bio on my &lt;a href="https://rachelleggett.com"&gt;personal website&lt;/a&gt;, I added some emojis to add some personality and visual interest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R3wVLZ4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/geiyd75hvsl7qr3qq3oo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R3wVLZ4_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/geiyd75hvsl7qr3qq3oo.png" alt="Screenshot of my personal website bio, which includes a waving hand emoji."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make sure screen readers could read the emojis in my bio in a way that made sense, I did the following three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I wrapped each emoji in a &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I added &lt;code&gt;role="img"&lt;/code&gt; to each &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I added a brief but descriptive &lt;code&gt;aria-label&lt;/code&gt; to each &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, to insert my waving emoji, I used the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"img"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"hand waving"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;👋&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Let's break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The span Element
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; is an inline HTML element that can be used to format the inline content it surrounds. Since &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; doesn't inherently represent any type of content—as opposed to something like &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt;, which specifies emphasis—it is the perfect blank canvas for telling a screen reader what it will see inside.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; isn't self-closing, we'll have to remember to add a closing &lt;code&gt;&amp;lt;/span&amp;gt;&lt;/code&gt; tag after our emoji.&lt;/p&gt;

&lt;p&gt;We'll mark up our &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; to tell screen readers how to interpret it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The role="img" Attribute
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;role&lt;/code&gt; HTML attribute defines a user interface element. That is, what type of element should the screen reader tell the user they have encountered?&lt;/p&gt;

&lt;p&gt;Here, we use the &lt;code&gt;img&lt;/code&gt; role to tell the screen reader that the emoji should be treated as an image.&lt;/p&gt;

&lt;h2&gt;
  
  
  The aria-label Attribute
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;aria-label&lt;/code&gt; attribute defines some text that labels the current element. In other words, it tells the screen reader how to describe that element to the user.&lt;/p&gt;

&lt;p&gt;It is important to use a descriptive and meaningful label here. I chose "hand waving" for my emoji because it is brief and describes my meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it Sounds Like When a Screen Reader Reads This
&lt;/h2&gt;

&lt;p&gt;When you put it all together, the screen reader will read your &lt;code&gt;aria-label&lt;/code&gt; and identify the role of the content to the user.&lt;/p&gt;

&lt;p&gt;Take the following HTML as an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
  Hi, I'm Rachel!
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"img"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"hand waving"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    👋
  &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;VoiceOver, the screen reader software that comes with macOS, reads that as follows: "Hi, I'm Rachel! Hand waving, image."&lt;/p&gt;

&lt;h2&gt;
  
  
  What if We Leave Off the Role and/or the Label?
&lt;/h2&gt;

&lt;p&gt;VoiceOver happens to read emojis using their names, so it isn't the worst. With all my extra markup removed, it reads the line as follows: "Hi, I'm Rachel! Waving hand."&lt;/p&gt;

&lt;p&gt;However, my goal is to give blind and visually impaired users the best possible experience. I prefer to indicate to the user that this is an image and I have not in fact written "waving hand," which could mean something else. I also don't want to assume that every screen reader interprets emojis without roles and labels the same way.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://emojipedia.org/waving-hand/"&gt;Emojipedia page on the waving hand emoji&lt;/a&gt; says it is known by five other names, including "goodbye," which is the opposite of my meaning! I don't want to hope the user's screen reader reads the right description that makes sense in the context. Specifying a label guarantees I am conveying what I actually mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended Reading by a Screen Reader User
&lt;/h2&gt;

&lt;p&gt;In researching how to make emojis accessible, I came across an article by screen reader-user Beth Finke: &lt;a href="https://blog.easterseals.com/emojis-and-accessibility-the-dos-and-donts-of-including-emojis-in-texts-and-emails/"&gt;Emojis and Accessibility: The Dos and Don’ts of Including Emojis in Texts and Emails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I highly recommend reading her article for helpful tips on how many emojis to use, whether to use them at all, and what it is like to use a screen reader when emojis are misused.&lt;/p&gt;




&lt;p&gt;Featured image by &lt;a href="https://unsplash.com/@markuswinkler?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Markus Winkler&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>html</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
