Nowadays I am working almost entirely on GUI products. I am building a Visual Studio like IDE at work. On the other hand MiniBluebox, the home-grown project I develop part-time also involves user interface design.
For years I had the usual conviction that "GUI programming is dumb". But I found that it is actually the opposite. It is equally hard if not harder than server side programming, not necessarily in programming terms though.
The hardest bit may involve a mindset change, a realisation in full humbleness that no matter how smart you are, your usability perception as a developer is a much smaller component than what users usability expectations are.
You need to get interaction design right, and that often involves user engagement. It is not something you can imagine and expect it to work for everyone.
The ultimate tips I may disclose are,
- Get as many field trials as possible. Be humble and let users be brutal in their criticism. Make sure your product website attracts feedback from users. Be an observant and listener. Try to understand what makes them happy or stressed out and then groom out the UI accordingly.
- There may be tensions between usability and performance. Almost always favor usability if performance penalty is bearable.
- Don't be scared of cutting out controls. Think this way if I remove this button or replace it with a slider control what would happen. Would that make my user happier.
- Make sure to sketch out user personas. Will plumbers, house-wives, executives, game players be using your product. What is the persona or personality that will likely be using your product. There will always be tensions between their usability expectations. You need to come up with a persona that would serve all of them reasonably well. But your persona may be dominated by just one of them. This is more of an art form or a Director's job than a Developer's it may sound. But it is the extra mile that would make a difference. Draw cartoons of him/her. Try to imagine them in their daily life. Try to imagine them, what is crossing their mind, when they sit down before they start your program.
Finally my best kept secret is this and rather than being a mere tip deserves to stand on its own right:
Your ultimate design criterium should be to make users happy about themselves when using your product. They shouldn't feel stupid or unconfident.