I moderated a talk yesterday on accessibility at Microsoft. I think it went over pretty well. In any case, one of the central points I made during the talk bears repeating in a more public forum.

Accessibility is not a feature.

“Whoa, wait, what?” I hear you saying. So, let me clarify this. Accessibility is part and parcel to an application's overall usability. It cannot and should never be thought of as a work item to do during the next coding milestone, or (and this is the worst) something to hopefully incorporate during the next product release. Whenever you're thinking about the usability of your application it is vital to take some time and ponder how your user model will work for users with cognitive, sensory, or physical impairments.

By designing software in such a way that it is usable for everyone, usability will be enhanced for all of your users. This may seem tautological or self-evident, but I don't think it really is. You may discover some interesting synergistic effects on overall usability by making your application accessible to users with an impairment

Warning: Contrived Example Below!

As a demonstration, let's go over a scenario: An application monitors the health of a network. It has a status indicator that is colored either green or red, depending on current conditions. The status indicator has no text associated with it. Most users will have no problem differentiating between a healthy system and dangerous conditions, but a color-blind user may, very well, be completely unable to to tell the difference between the two states. Additionally, a user who relies upon a screen-reader software package will also have no idea that there could be an adverse situation underway without additional cues. For starters, adding a label with a textual description of the current system state will help a lot. However, there's still more that can be done.

What happens if your sysadmin has turned off the monitor plugged into that computer, or if they're using a KVM switch, or... Well, you get the idea. In fact, the solution I gave above of just introducing a textual indicator will not solve all scenarios. Perhaps an audio cue could be introduced as well. Whenever the network status goes to red, a text label could state this, and the system could start beeping on one or two second intervals until the problem is solved.

Anyway, I think it's worth taking some time to think about the usability of your application for everyone. How would you use your app if you couldn't manipulate the mouse, or if you couldn't differentiate between two certain colors? Would it impact how you design it?