When interacting with software (or other blackbox devices), people make mental models of the system. They learn over time that when you press that button, it sends such and such event, and such and such side effect. They even learn the bugs in your system.
The goal of a good design is to make the mental model simple. Mental models are hard to build, and as they get more complicated, are hard to use. As the mental model reflects the system behaviour, which is really defined by the source code, if the source code is complicated the mental model is complicated. Thus, the software is hard to use if it is hard to write.
Therefore, make user interface code as simple and elegant as possible. Simple underlying code, fewer cases, less warts makes an easier system to learn, use, and extend.
But, this doesn't mean you have to be lazy. Sometimes, a lot of work has to be put in to make something simple. Simplicity in design is separate from ease of design.
Related concepts are
To break the Zen, this page is hard to write, and therefore it is hard to use. IfItIsHardToWriteItIsHardToUse is not something I'd like to write very frequently. The sentence is also much harder to understand as a full concept, unlike many of the two-word pages here. The confusion makes it harder to contribute to as well as harder to remember.
I have a problem with this opinion. To some extent it is true, but as time goes on, the interface to the code gets better. I've done mail with VMS, with Pine on UNIX and Outlook, and while electronic mail is essentially pretty tricky, there's no reason for it to have VMS' pine mail interface when it can have Pine or Outlook.
It is mostly an excuse to not comment your code, and there really is no excuse for not commenting your code. (I have a friend who got burned by this. He had processor emulator code that he received from his thesis advisor that he was supposed to make into an SMP emulator and even worse. It took him 3 months to understand the code and make it run correctly, unaided by the prof, who worked under the "If it's hard..." philosophy.)
If it was hard to write, it is your duty to make it easy to extend, to fix, and to understand.
I mean this more in the way of Wiki:DoTheSimplestThingThatCouldPossiblyWork. It takes a lot of energy to make a system simple. I know this quite accutely right now, as I am cleaning up the "throw away" GUI code. Maybe this page should be renamed. EleganceMakesEase?? --ss
I'll bet you anything that it was harder to code MS Windows AltTab behaviour that it is to cycle through the process list.
I don't think it was easy to make http://www.apple.com/macosx/features/expose/ but I find I very easy to use. I do however believe that if it's hard to do, you're doing it wrong. Using the wrong methode will make everything harder then it has to be, using the right methode makes everything much easier. -- AnonymousContributor?