The Design of Everyday Things changed my life.
Before I read it, I blamed myself if I couldn't figure out a piece of software. I believed "the software's always right," and thought I was just not smart enough to use a program if I couldn't get it to do what I wanted it to do.
Worse, I felt the same way about other people that couldn't do something with their computer. If I knew how to do what they wanted, I felt superior, like I had mastered a trick they weren't competent enough to grasp.
But I was wrong. We've all come across programs that were easier to use than others: software that didn't fight us, but worked for us to accomplish our goals. The difference between friendly software and difficult software lies solely in its design, not in the person using it.
Since my change in perspective, I try to notice good user interface design in the software I use in order to imitate it, and watch for bad design so I can learn not to make the same mistakes. If I design a webpage, I try to follow the usability guidelines discovered by others through rigorous testing. In the software I'm writing for my wife's work as an occupational therapist, I'm constantly getting her opinion on how she expects things to work, so I can meet those expectations.
I do it because I know that every user that comes away frustrated with something I've created is a result of a failure of my design. It's my problem, not theirs, and I should do everything I can to prevent that failure from happening.
What software drives you crazy with its bad design? What would you change about it, if you had the chance to talk directly to the developers?