Another good book to read along this vein is <i>The Design of Everyday Things</i> by Donald Norman. He talks a lot about designing things which <i>afford</i> being used correctly; that is, you can't help but use them the right way, just based on the way they work. His favorite anti-pattern is the "Push" door with a "Pull"-handle on it, or a "Pull" door with a "Push"-plate on it. The door, like the programmer's interface, exposes more options than are relevant to the actual use case.<p>This is actually a very empowering mindset: If you push a "Pull" door, or pull a "Push" door, <i>you</i> are not the moron! In fact, it is the person who put a "Pull"-handle on a "Push" door! This viewpoint turns PEBKAC on its head. If a user runs a script that he thinks will configure his bootloader, but instead it erases his filesystem, who is the moron? The user, or the process which produced a script that can be run in a way that will erase your filesystem?<p>The worst offenders I've ever seen in this vein are Atlassian. The admin interface to their products, particularly JIRA, is basically a glorified database query GUI; there is no indication how each of the parts fit together, and 9 out of every 10 possible configurations you can create are actually broken.<p>The problem is that you can't design a better interface without thinking about how other people will <i>actually</i> use your app, and that's extremely difficult. However, it's useful to look out for signs that you are Doing It Wrong. The "programmer's interface design" from the article is one of them. Another is the phrase "Well, at some point, somebody might want to..." If you hear this phrase repeated frequently during discussions about feature or interface design, panic! It means you don't know what your <i>use cases</i> actually are.<p>This is one of the ways I think Agile development can be extremely helpful, but no one seems to practice it in a way that leverages this type of benefit. Thinking about things in terms of user stories <i>forces you</i> to make these kinds of decisions, and you almost can't help but design the interface better.