The software development process spans multiple phases: requirements and project planning, system and UI design, coding or development, testing, and maintenance. The level of accessibility in the final software product is dependent on how well accessibility is integrated in these phases, either through inclusive practices or with the support of accessibility-oriented technologies. Our data sheds light on the contemporary practices and technologies that impede accessibility integration, and the changes to convention necessary for improvement.
4.1 Software Development Life Cycle (SDLC)
We begin by looking into development practices from the broader view of the whole development life cycle, and how accessibility is situated in it.
Prioritizing accessibility early and consistently in the project’s life cycle (, ). Practitioners opine that one of the biggest challenges regarding accessibility development is the lack of prioritization within the development lifecycle. Generally, accessibility is considered as an afterthought, due to legal concerns or negative user feedback.
This aligns with past findings that companies still do not perceive accessibility requirements as a priority [6, 66]. Delaying accessibility for later stages or future updates adds on to maintenance and refactoring effort, accruing additional cost;
also reported by prior research [89]. Therefore, it is advocated to
“shift accessibility to the left" (DC161, AC7)
3, including it during project planning and requirements analysis. Doing so will ease accessibility implementation for developers and prevent the cost behind finding workarounds. It should also be required as a functional requirement instead of a
“nice to have" (DC239) specification (DC27, DC37, DC188, AC65, AC297).
It is also advocated to prioritize accessibility consistently in all phases of the SDLC.
Prior work [71] showed that design and testing has been the focus for accessibility research, excluding the rest. On the other hand, some do not consider accessibility as part of design, rather only a responsibility for the programmers.
“It’s really important to bring accessibility to the main stage" (AC28), which can be accomplished by making accessibility the foundation of these phases, and continuing to consider it during updates and maintenance (DC27, DC94, DC114, DC178, DC239, AC21, AC65, AC140, AC161, AC274, AC283).
Developing an “a11y strategy" (, ). We observe the proposition of a tangible technique for accessibility prioritization named a11y strategy. It incorporates the knowledge and principles of inclusivity with the constraints of the different stages of development. It promotes cross-functional collaboration, with product teams and customer feedback. It prioritizes proactively reviewing designs for accessibility, as opposed to a reactive testing-centered process. “You have to train people, embed accessibility using research into design systems, component documentation, code frameworks, QA … and fill in the gaps in WCAG … then evaluate how effective it is from the users’ perspectives” (AC161). Practitioners suggest incorporating a11y strategy as an aspect in a team’s existing process model, for instance Agile methods, or adopt its components like Scrum meetings for daily checkups on accessibility (DC239, DC161, AC9, AC35, AC94).
4.2 Design
In the design phase, the software’s UI structure is constructed, influencing the final product’s accessibility. Conversations in Twitter discussed the current lack of accessibility consideration in design efforts, its role in building accessible software, and the constraints designers face.
Design is integral for accessibility (, ). In most project teams, practitioners report very little accessibility involvement in design. Designers often treat accessibility as a separate concern, beyond their project scope, leaving it for developers and testers. Designers, who come from
“a background in visual arts", are observed believing that
“a11y rules are stifling their creativity" (AC20).
Prior work also reports a false perception among designers that accessibility represents a restriction on creativity [75]. However, others say that the constraints imposed by accessibility can enable engaging and fun design efforts. It invokes new challenges in product design, instead of being
“just the same four patterns over and over again" (AC29). We also observe that designers with an opposing outlook can be swayed once they are taught about the impact of bad design on disabled people (DC27, AC20, AC21, AC29).
Advocates report the necessity of convincing designers of their impact on accessibility.
A recent study [10] reported that as companies became more experienced with accessibility, they tended to focus more on integrating accessibility earlier at the design phase. An accessible design is promoted for its comprehensive solutions, as it involves the visuals (color, shape, structure) as well as what is heard (alt tags), what is felt (braille keyboard), and how it is interacted with (click, keyboard navigation etc.). While a design where accessibility is built directly into the core experience provides a better design for everyone, a bad design directly affects a disabled user’s experience:
“No-one is disabled until someone designs something that does not take that person’s needs into consideration” (DC27). Design is seen as critical in preserving accessibility of the product from the ground up. It holds the advantage of pre-reviewing accessibility for the product, as opposed to auditing and benchmarking in the development and testing phases, making it easier for early system-wide improvements. Practitioners experienced an accessible design to ease the effort to fix emergent accessibility issues in later phases, remediate issues that developers cannot effectively fix, and establish cross-team partnerships (DC27, DC288, AC3, AC26, AC27).
Challenges integrating accessibility in design (, ). Firstly, designers report on a lack of design tools or frameworks that support accessibility. The few design resources that exist are either not comprehensive enough to provide a one-stop solution, or are catered to developers, requiring programming skills to operate.
“I design something and I can’t work on accessibility until I’ve coded it in HTML" (DC27). Design requires resources that are exploratory, experimenting with UI objects, rather than straight-to-production instruments.
Prior work [47] showed how tools to automate and improve accessibility, contributed by research studies, do not serve the needs of designers. Designers suggest incorporating accessibility modules in UI mockup tools, a resource popular for creating experimental visual and interactive representation of the software.
Secondly, accessibility in academia, albeit in limited scale, is focused primarily on development practices rather than design. Accessibility expertise in design has only been possible through one’s “own (often extraordinary) effort" (DC27) rather than formal or structured training. Without including accessibility in design education, practitioners fear design teams will remain unaware of accessible design and projects will resume excluding accessibility in design (AC27).
Lastly, our data shows that, in the professional setting, accessibility is excluded from a designer’s skill requirement. While there are job postings for accessibility engineers or accessibility product managers, none such designation exists for accessibility designers. “Everywhere that I have worked, accessibility has fallen to the developers" (DC27). Such practices fail to incentivize designers to pursue learning accessibility.
4.3 Development
Unlike design, development has seen the emergence of multiple tools, systems and frameworks that assist developers in incorporating accessibility. However, there are still limitations in the available resources and bad practices that pervade development processes, hindering accessibility in software.
Code level practices: ARIA and Semantic HTML. Two of the most popular instruments for accessibility in web development are ARIA [
92] and Semantic HTML [
69]. Accessible Rich Internet Applications (ARIA) is an accessibility-centric scripting tool that adds roles and attributes to HTML elements to render them meaning.
For instance, a progress bar can be written as,
<div id="update-progress"></div>
where <div> provides no meaning. Adding ARIA labels to this —
<div id="update-progress" role="progressbar" aria-valuenow="75 aria-valuemax="100"> </div>
characterizes this <div> as a progress bar, and enables assistive technologies to interact with it as such. Our data shows multiple instances of developers using or suggesting ARIA for bolstering accessibility. ARIA as a formalized practice can also instill consistency in frontend nomenclature, which would prevent different auditing services using different terms for the same component (DC312, AC128).
However, ARIA is built as a solution that tries to add meaning to meaningless HTML, whereas HTML already possesses a mechanism to provide meaning to components: with Semantic HTML. Instead of populating every HTML component in a page with <div>s or <span>s, Semantic HTML provides tags such as <header>, <figure>, <nav> and more to embed semantic meaning to that component. For our previous example, rewriting the component with <progress> instead of <div> —
<progress id="update-progress" value="75" max="100"> </progress>
also characterizes it as a progress bar. Practitioners in our results advise adopting a “Semantic-first" approach when writing HTML pages, as opposed to an “ARIA-first" one. Misusing ARIA can bring forth more issues than not using it. It is nevertheless warned by advocates from focusing solely on Semantic HTML for accessible software: “saying semantic html will give you accessibility for free is not the full story” (DC196, DC239, AC1, AC3, AC6).
Accessibility-oriented frameworks and design systems (, ). Frameworks like React [
61], Angular [
37] and more have become industry standard as they help developers build their web applications faster. However, in doing so, they have abstracted away the HTML underneath, and this separation from the DOM has been seen as a barrier to accessibility practices. For instance, developers are not prompted to add Semantic tags, and adding them afterwords requires unraveling
“layers of JS spaghetti" (DC288, AC37, AC53, AC82).
Lack of accessibility support in modern JavaScript frameworks was also raised in the literature [63]. Furthermore, JS libraries are criticized for not considering accessibility, and bringing bigger payloads and slower loading times that disrupt AT use. There have been initiatives integrating accessibility into libraries, but practitioners found most lack proper documentation, perceiving these as marketing ploys that lack actual accessibility features (AC74, AC128, AC215).
Similar issues are brought up for design systems (e.g., Google’s Material Design [
26], Apple Human Interface Guidelines [
43]), which are scalable collections of thematic guidelines and UI components for web and mobile applications. Developers adopt the styles and behavior offered by these design systems into their own software. Therefore, inaccessible design in these design systems, developed by people unaware of accessibility or with ableist biases, is feared to perpetuate systemic bias in industry-wide software development. It is difficult to fix inaccessible components set by design systems, without inadvertently breaking other components or features imported (DC30, DC31, AC37, AC128).
Practitioners prompt frameworks and design systems to provide AT support and incorporate accessible design for their base UI components. This can obviate developers from building accessible components from scratch and fixing repetitively reported design-level issues in audit reports. Removing accessibility issues from base components also ensures accessibility standards are maintained, even if developers are unaware of them, positively influencing industry-wide culture (DC40, DC122, DC288, DC313, AC128, AC139, AC215, AC297).
Accessibility beyond a developer’s control. While most discourse regarding accessibility in software place responsibility on the developers, we observed multiple accounts on how practices and systems provided by hardware manufacturers, platforms and operating systems, and web browsers, which are beyond a developer’s scope, are accountable as well.
Manufacturer: Different laptops and computers contain their unique drivers that interact with ATs. So despite a software being compatible with ATs in most devices, we observe accounts of some causing it to break, making the software inaccessible. In mobile, specifically Android phones, how accessibility services are implemented depends, to some extent, on the phone manufacturer (DC49, DC238).
Platforms and operating systems (OS): Similar to hardware, different platforms and OSes provide different levels of accessibility support. For instance, Twitter’s alt tag integration with media, although available on web browsers, had not been integrated with iOS through the native app (AC119). Much has been discussed in our data on how accessibility is integrated differently in iOS and Android. The general consensus favors iOS, where accessibility is embedded more strictly, and app developers are forced to follow guidelines and integrate accessibility services. Android, on the other hand, provides more autonomy to app developers in how they use accessibility services, creating opportunities for avoidance or even misuse (DC208, DC238, DC247, DC278, DC288, DC327, AC56, AC119, AC156).
Browsers: Developers advocate for browsers to programmatically ensure web app accessibility: from providing APIs for accessibility services to not hosting inaccessible sites. “I want to live in a world where if your component is not accessible, the browser won’t render it.” (AC128, DC288)
The negative impact of accessibility overlays (, ). Accessibility overlays are website add-ons that provide assistive widgets and/or automatically fix code to transform an inaccessible website into one that conforms to WCAG. While marketed as an accessibility solution, these products are strongly opposed by accessibility advocates
4. Our findings list key criticisms against this technology, spanning technical and business malpractices. The widgets offered are at best redundant to disabled users who are using ATs and third party software, and at worst incompatible with the user’s setup, disrupting their experience. The automated fixes are not reliable and can cause unwanted behavior. Conformance, as assured by overlay vendors, are often false promises, as they are unable to fix all the website’s accessibility issues. However, their marketing capacity outshines the reported inadequacies, convincing clients, who cannot afford accessibility in their development processes, to incorporate an overlay as a cheap one-click solution. As such, overlays are deemed as an
“anti-accessibility product" (AC84). Their inclusion on a website can render it unusable by people with disabilities. The false conformance puts well-meaning clients in risk of violating regulations. And their predominance in the market discourages development teams from integrating accessibility practices in their processes, helping accessibility issues to persist as a culture (AC14, AC84, AC89, AC174, AC175, AC177, AC183, AC203, AC233, AC232, AC236, AC248).
Similarly, a recent study investigating accessibility overlays found that while overlays can help improve some aspects of websites accessibility, they are still too limited and could not achieve complete compliance with accessibility standards [32]. Better accessibility means better SEO. Search Engine Optimization (SEO) [
30] is widely considered a success criterion for web applications. It is observed that an accessible website, that follows best practices like Semantic tags, score better for SEO. Consequently, practitioners say that SEO is used as an incentive for accessibility, a further indication of how technical standards set by system-wide platforms can bolster accessibility (DC137, DC292, AC240, AC284).
4.4 Testing
In current practices, accessibility is most commonly considered in the testing phase, usually to check for regulatory violations. Automated testing tools are used to streamline accessibility into testing. Manual and user testing is advocated for integrating the lived experiences of people with disabilities.
Automating accessibility checks (, ). We observe a popularity of automation in the testing phase, conducted in two contexts: audits and developer testing. Auditing involves the use of an external tool or service that reports inaccessible components of a developed software. It is deemed as a quick mechanism for developers to detect which area of their code needs fixing, and for users to understand a product’s accessibility. It can also be a resource for learning about accessibility (DC98, DC122, DC281, DC330, AC104, AC105, AC98, AC277, AC283). Depending on the raw audit reports, however, is noted as an inefficient technique that often demotivates developers from addressing the accessibility issues. Since audits generate repeating issues on UI components used in multiple pages, it is suggested to conduct a review process for grouping up and prioritizing the issues before handing them over to the developers. Component level reports are observed as more intuitive and manageable, as opposed to page-wise audits, which are reasonable for very small websites. This practice also leads us back to design level accessibility; if the UI is designed to be accessible, audits are easier to manage, or even redundant at best (DC31, DC40, DC122, DC169).
While audits are generally dependent on a service or team external to the core development team,
our data suggests that automated tools are now being integrated into the development and testing processes. Developers utilize tools available on the browser, or create their custom setup. For instance, Android’s Accessibility Scanner [
84] can be integrated with Espresso[
29] or RoboElectric [
77] that provide automated testing features (DC322). Practitioners view automated tests to significantly reduce the overhead of evaluating accessibility. In particular, if integrated into the development and deployment pipeline using Continuous Integration (CI) technology, such tools can drastically streamline the process of evaluating accessibility. With automated testers, developers do not need to wait until the project is deployable and handed to auditing teams; they themselves can check the accessibility of each new feature introduced in real time (DC54, DC161, DC222, DC281, DC330, DC322, AC3, AC89, AC90). Nevertheless, current automated practices and tools are criticized for their limitations. They are often not comprehensive enough to detect all existing issues, their performance are dependent on test coverage, and tend to generate false positives. Furthermore,
practitioners warn that no issues detected does not necessarily mean an accessible software (DC161, DC281, DC314, AC252).
Testing accessibility manually (, ). With the limitations posed by automated tools, manual testing — navigating one’s software using an AT to detect accessibility issues — is highly recommended by experts. Manual testing enables a broader and more context-specific assessment, as opposed to the WCAG-specific and generalized implementation of automated tools.
Practitioners deem it as the nearest mechanism to simulate user experience without a disabled user on board.
They also say that simulation was the biggest motivator for them to learn accessibility (DC49, DC118, DC161, DC281, AC1, AC3, AC18, AC33, AC43, AC243).
Literature supports these observations, discussing the importance of manual testing and its ability to provide better coverage and discover the issues that automatic tools cannot. [46, 58, 90] We observe that current practices for manual testing are conducted using ATs and alternative interaction methods. For instance, desktop and mobile screen readers, keyboard navigation with a blank screen, and with text or view enlarged. Tests are suggested to be conducted with multiple ATs, in different window sizes, on different browsers and devices (DC117, DC149, DC168, DC180, DC202, DC214, DC229, AC1, AC43, AC243). However, practitioners say that it is not readily adopted in testing processes as it requires testers to learn different ATs. For teams with financial limitations, some ATs may be too expensive. Testers complain that, unlike audit reports, no formalized documentation template exists for creating accessibility statements from manual testing, and unlike automated tests, no programmatic mechanism to integrate it into the development pipeline. And finally, despite best efforts, manual testing cannot fully replicate a disabled user’s experience (DC27, DC92, DC147, DC243, AC128, AC250).
User tests cannot be excluded (, ). Our results suggest that involving disabled users in the testing process provides the most insight on the accessibility of a product. User insight covers more factors and provide more nuanced feedback than accessibility checkers, which are limited by WCAG-driven heuristics.
Developers and users alike state that testing with ATs is more efficient and effective by disabled users, who are knowledgeable of different AT features and workarounds, and more proficient than abled developers. For instance, screen reader announcements that developers may regard as too short or very detailed in a manual test, are reported by a disabled user as properly concise or too cumbersome respectively. “Center the lived experiences of people with disabilities, not that of non-disabled testers” (AC250). Therefore, the accessibility community advocates for user testing, despite the inclusion of automated and manual tests. However, despite companies starting to integrate the practice,
we find that strategies for such testing are still not formalized or mainstream enough for easy adoption. Furthermore, Aizpurua et al. [
2] have reported about potential personal biases in the process. Software teams must be trained and/or services can be introduced who will connect teams to professional testers (DC17, DC94, DC161, DC171, DC239, AC3, AC23, AC39, AC128, AC144, AC166)[
11,
23,
65].