I have just finished reading Defensive Design for the Web, written by the fine folks at 37signals. The book is divided into 10 chapters, the first 9 broken down into 40 "guidelines". The guidelines cover all areas of defensive design, or "contingency design", as mentioned throughout the book. These guidelines are used to drive home the overall purpose of the chapter.
The writers keep the technical talk to a minimum, and really focus on what contingency design is, how it helps users, and how it is implemented in various sites around the web, if it is implemented at all. It also gives pointers on how to avoid these pitfalls in your own development. Also, it gives alternative examples to prove a point, relating it to something physical rather than electronic.
One example is comparing the annoying flash ads that appear on top of sites, disabling the functionality of certain elements, to trying to leave a travel agent office, and instead, the agent has blocked the door and keeps handing you brochures.
The sites chosen by the author as examples are very popular sites that a majority of readers have at least heard of if not visited. They range in variance from search engines, to e-commerce sites, to general sites with little application implementation. Many sites are mentioned in multiple chapters, sometimes having great contingency design for what the chapter is about, sometimes not. It is interesting to see that some sites succeed in certain areas while at the same time failing in others.
The "Head to Head" features are also great. This takes to sites that would be seen as competitors (Barnes and Noble vs. Amazon, K-mart vs. Wal-Mart, Foot Locker vs. Finish Line, etc.) and shows how they each handle the same contingency design element in different ways.
After reviewing the areas of contingency design, there is a "Contingency Design Test" that you can use not only to test your site yourself, but also give to others to test your site. The test gives certain tasks and uses a point system to score how well a site did with certain guidelines.
The book closes with a chapter on developing a plan for testing, correcting, and implementing contingency design in your site. It gives examples of ways to catalog various design guidelines such as using a knowledgebase for staff members to reference when a problem occurs, testing a site thoroughly at all points of development, and other techniques.
Anyone involved in building or managing websites with any degree of web application integration would do well to read this book. Many items seem like common sense, but you would be surprised at how easy it is to overlook them in the development process. In the end, your users will thank you for it.