When I use a Web application, I want things to go smoothly. I don't want intrusive errors popping up to tell me I did something that the system can't handle. I don't want to be interrupted. I don't want to know the system doesn't work. And I definitely don't want to be blamed for its shortcomings by an error message that tells me I did something wrong.
Our users don't want these things either.
When we perform a task in an application that results in an error message, we blame ourselves. After all, we're the ones not smart enough to use the application correctly. We don't understand what it is we're supposed to do, and that's why we're doing it wrong.
But somehow, because we're computer-savvy, when we find out that other people using an application we built are having problems, we think those people are just too dumb to use it. We blame them. After all, they're the ones not smart enough to use the application correctly. They don't understand what it is they're supposed to do, and that's why they're doing it wrong.
Clearly, there's a problem with our logic.
Because I spend all my time designing Web applications, and because I don't want to perpetuate these obnoxious error messages and make my users feel stupid, I've spent quite a bit of time considering how errors are displayed, what causes them, and when they are shown. Through this, I've managed to come up with one fairly obvious conclusion:
The best way to handle errors is to prevent them from ever occurring.
When an application is bad, it's bad for a thousand different reasons. When it's good, it's good because the user is able to glide through each and every interaction effortlessly, without hassle and without being forced to learn how the underlying system works to accomplish the user's goals.
To rise to this seemingly unreachable level of quality, we need to handle errors before and after they occur. The goal is not to tell the user something has gone wrong. The goal is to design the system in such a way that the user never has a chance to make a mistake. And if a mistake does occur, we need to make it as painless as possible to get back on track quickly.
There are plenty of places mistakes can be made. Good design can cure most of them.