In my experience accessibility is the most poorly understood, unappreciated, and least valued of all of the Foundations I'm talking about in this series. Fundamentally I think the reason it is not valued highly enough is that it isn't understood, and the value it creates in a product both directly and indirectly is unappreciated.
Many people know about one or two accessibility features (usually hotkeys and keyboard navigation) but not everything involved, so I want to lay out both all the things involved in getting it right and the results for both the direct and indirect users of the features.
Keyboard Accessibility
The primary audience for this feature is a person who is able to use the keyboard relatively easily but has trouble with the mouse and mouse alternatives (trackballs, touchpads, etc.). They may not have an easy time with fine muscle control, or have carpal tunnel issues, have had a stroke, arthritis, or many other issues.
Keyboard Navigation
The first level of support is to make sure all UI elements are navigable from the keyboard. In other words, can I tab between all the controls, use spacebar or enter to use them. Can I fully use your program without a mouse? If so, you've met the minimum bar. If not, please find another career because you should not be producing software, you suck far too bad. Try Starbucks, you might be able to become a barista.
I'm sorry, that was uncalled for.
I didn't mean to insult baristas, I do enough with coffee myself to have high regard for skilled baristas.
Quick and Convenient Keyboard Access
The next level is to make all the main user actions fast and efficient through keyboard access. If one of the primary tasks your user is going to do requires launching two dialogs, going to the fifth tab of a property page, and moving through 12 controls in order to accomplish it, you're not streamlining your UI to your customers' needs either way. If you can accomplish the same task with two clicks of a mouse instead, however, you're causing a more serious accessibility problem for your users who can't (or prefer not to) use one.
The burden you put upon your users is relative, of course. For the carpal tunnel victim the extra keyboard strokes may not be that big of a deal, and depending on your application's performance may be faster than the equivalent mouse actions. What about the quadriplegic who interacts with the computer via a wand they grip in their mouth and type into the keyboard? In the latter case maximization of every keystroke is critical to their efficiency and ability to use your application.
Power Users
The indirect beneficiaries of this work are your Power Users (with a high correlation between them and carpal tunnel sufferers...). Many interactions with applications can be done faster with hotkeys and keyboard navigation, and once a user is comfortable they can increase productivity by learning them. For my example above where the user had to do a bunch of strange steps instead of two mouse clicks for a primary task they will perform in your program, let's say instead you made a hotkey for the same task. Now instead of two mouse clicks it is one keyboard stroke. You've just made your program more usable and your customer more efficient, thus increase the value of your application!
High Contrast
Windows' High Contrast color schemes assist those who cannot see well, are color blind, etc. In my experience very few programs run correctly in these modes. In fact, I just switched my Windows XP Tablet Edition into High Contrast #1 with extra large fonts on a 1024x768 display and found bugs in CopyDesk where the menu bar and more than half the toolbar buttons are unreadable or unusable. Why?
The new background for the menu and toolbars is black, the correct text color would be white but in this case all the menus are still drawing their text in black. Black text on black background makes for a difficult user experience. I don't mean to pick on this application, it just happens to be the one I'm writing this article in while I do the experiment. In reality you put most applications in this mode and they will be awful. I've know more than one tester, when faced with the need to build up their bug count, to put their computer into high contrast mode with extra large fonts on the minimum 'supported' screen resolution and let the party start. We call it a 'bug farm'.
By contrast (haha sorry) you can tell the very mature, high quality applications by the fact that they handle all of these without issue. I launched Word in the same situation and it looked great (under the circumstances). However, when I selected this article and pasted it in, the text from the article was black on black even when I tried pasting with destination formatting. Guess I'll let them know they have a bug.
To try this out you can either use the Accessibility Wizard or set the color scheme to one of the High Contrast schemes in the Display control panel (your Windows and buttons setting must be Windows Classic style for Windows XP).
High DPI
High DPI displays are not an accessibility feature but rather the cause of additional accessibility problems. Most applications are built assuming 96 DPI displays (because that's what most displays are currently). If you make that assumption on a computer with a higher DPI display it can make it unusable, including (and why it is in this article) UI elements that are way too small and difficult to click with a mouse, etc.
I'll talk more about High DPI Displays in a later Foundations article.
Large Fonts
When a user tells the operating system that they want to use large or extra large fonts (Appearance tab of the Display control panel), all applications running for that user should respect the setting and act accordingly. This means your GUI needs to scale, allow room for the larger strings, and in general accommodate a user who has said they want things bigger and easier to read.
Instead, what often happens is the applications use the correct font size for common controls and their own favorite font and font size for their own custom controls. This leads to a mix-n-match UI that looks horrible, amateurish, and is more difficult to use. Alternatively, the UI can all have font sizes the same: still small and difficult for the user to read.
Furthermore, be careful when you store font information. Just as hardcoded font names and sizes on the web is bad (and it is), saving for instance '12pt' when you mean 'standard size' and '16pt' when you mean 'larger than standard size' means things won't work right if and when the settings are changed.
Microsoft Active Accessibility
First, the more general MSDN page on developing accessible applications.
MSAA is a set of APIs used by hardware and software developers to create assistive technologies for people who have disabilities that prevent or impair them from using computers and/or the more widely used input devices.
Examples of assistive devices and software:
- Screen readers - Software that reads the text on the screen to those who can't.
- Screen magnifiers - Acts like a magnifying glass to enlarge the active area of the screen.
- Speech recognizers - Allow the user to interact with speech instead of keyboard or mouse input.
- Braille displays - Show either the active or the entire screen in a Braille texture surface.
- Alternative pointing devices - Other approaches to indicating points on the screen besides the mouse.
And more, limited only by what creative people can design to make interaction with computers easier or even possible for some.
What developers of UI need to do is either use common UI controls (and set the accessibility properties of them correctly) or implement IAccessible on their custom controls and give complete and correct information via that interface. That way, when the assistive technology code talks to yours and asks it what it should tell the user via a screen reader, or what it should show in a Braille display, or what your control does, what its label is, etc. it will have the correct information and user will be able to use your program painlessly.