Understanding accessibility is a process of relating four main categories of abilities to software development. These broad categories are:
For each category, the needs of users needs to be considered. It must also be understood that every person has a range of abilities, and that range can very depending on things that include a person's age, their environment, and other activities they may be engaged in. Some examples of solutions to problems faced by people with abilities outside the 'normal' range include:
Individuals who have visual impairments include abilities ranging from complete blindness to people who can't read small text without their glasses. Solutions to these problems might include things like text equivalents for images and keyboard only navigation. They may need to use high contrast color schemes or large fonts. They may not be sensitive to differences in color, requiring the software to communicate with the user using some other channel of information.
Individuals who have hearing impairments need solutions such as closed captions and transcripts of spoken audio, or other visual means that communicate the message a sound is conveying.
Individuals who have mobility impairments may need solutions such as voice controls or keyboard shortcuts. They almost certainly need software that does not impede or interfere with alternative access software running on their computer.
Individuals who have cognitive impairments need solutions such as simplified terminology, example inputs, and unified page layouts.
As a software developer, there are practices that can either help or hinder the accessibility of the software you work on. For example, if you are working on desktop software, and you create custom GUI controls, then the tools that people with visual impairments use might not be able to interact with those controls unless you make extra effort to make those controls accessible. If you are developing web-based software, the structure and content of the pages can likewise either help or hinder people with disabilities that are using your site.
Information and Communication Technology (ICT) Standards and Guidelines: Section 508
Information and Communication Technology (ICT) Standards and Guidelines: Section 508 Refresh
Accessible Rich Internet Applications (WAI-ARIA) 1.0 (W3C Recommendation, March 2014)
Web Content Accessibility Guidelines (WCAG) 2.0 (W3C Recommendation, December 2008; also available as ISO/IEC 40500:2012)
Guidance on Applying WCAG 2.0 to Non-Web Information and Communications Technologies (WCAG2ICT) (W3C Working Group Note, September 2013)
User Agent Accessibility Guidelines (UAAG) 1.0 (W3C Recommendation, December 2002)
User Agent Accessibility Guidelines (UAAG) 2.0 (W3C Working Group Note, December 2015)
Authoring Tool Accessibility Guidelines (ATAG) 2.0 (W3C Recommendation, September 2015)
Implement the contract of the role-specific protocol (NSAccessibilityButton, NSAccessibilityImage, NSAccessibilityGroup, etc) within the NSAccessibility protocol that best matches the behavior of the GUI element being rendered.
Linux / BSD
For GNOME applications, the GNOME Accessibility Implementation Library (GAIL) bridges GNOME widgets and the Accessibility Toolkit (ATK). ATK bridges to the Assistive Technology Service Provider Interface (AT-SPI). AT-SPI is currently used by GTK2, Java and OpenOffice.
Microsoft Windows SDK includes all the tools necessary for MSAA and/or UI Automation. The IAccessibleEx interface the bridges between the two worlds.
Windows Automation API SDK Tools – Microsoft Windows UI Automation Blog