Before you start your design, ALWAYS imagine that your users are the followings:
- They are hotheaded and impatient
- They are NOT like you
- They only care about their goal
- They rarely think
- They does things habitually, i.e., based on familiarity. They don't learn unless it's REALLY necessary.
For those who have experience in design will understand why such imagination/assumptions are so important. 90% of users share these similar traits.
Another tip I want you to have is to less optimistic and be more realistic. Honestly speaking, no users REALLY care about your passion or wonderful systems, they ONLY care about whether your systems/products can achieve their goal quickly and reliably. If you cannot bypass this optimism, you will fail certainly.
Now, the next thing is to look at more concrete design guidelines.
- Audience - Who are your users? What are their typical behaviors, and specifically, what are their goals? More importantly, what they DON’T need or DON"T care? This step is sooooo important but much much harder than you think, and I can wholeheartedly say that only a few exceptional people can answer this question related to their products in a clear manner. If you can beat this guideline, you can simply skip the rest guideline...seriously...that is how powerful this guideline is. Sadly most designers simply overlook this simple guideline and seek more "quick-to-fix" guideline.
- Discoverability - What can I do? The functions that users can do should be clear to them. More importantly, those functions should impose certain priority within them. Where do you get these priorities? See above 1. Don't hide things just for the sake of aesthetics. Make important things visible. A rule of the thumb “Do not assume users know”. Remember, your users rarely think thus they will not have much clue. They just want to "finish" their tasks at hand, so they want to "discover" quickly what they can do or not do.
- Conventions - Humans are habitual, i.e., they do things based on familiarity. Don’t give me too much mental load or don't ask me to learn your stuff! Things should be simple, predictable, and consistent. These can be achieved by leveraging conventional standards how things should be and be consistent with how your interaction works. Whenever you introduce very new stuff that users may not know before, do it cautiously and make it learnable.
- Feedback - Users rarely think or just don't like to learn because it's tiring!. Thus what users do subconsciously and intuitively is to learn from feedback. What just happen? What happens next? Be clear what is the current status of the interaction. Having a simple yet effective feedback mechanism will ease the process of learning and interaction for users.
- Support novice and expert mode - interaction should facilitate both novice and expert users. Different users have different skill set or expertise. But all users want to achieve their goal quickly. Thus, your job is to design in such a way that supports both types of users. Create menus for those novice users. Create a command line or keyboard shortcuts for expert users. This is just one example. Also, don't forget to provide some default settings for novice users, while allowing more expert users to customize or active some advanced features.
- Multiple endings - Different users do differently but is able to reach the same goal. This is just human nature. Thus designers should not think of only one workflow. Imagine different contexts. Allow users to do their own way while still restricting users to some set of rules. You will be surprised how your users use your tool to reach their goal.
- Cheap errors - interaction should not heavily penalize users for any mistakes. We should also prevent any accidental errors from users (e.g., by graying out some menu item when they are not applicable). Also, allow users to learn cheaply through trial and error with an easy recovery and detection system.
- Interaction tradeoffs - design is so so difficult because of "tradeoffs". If we can always apply all the "good" design principles, then we are good. But design is pretty much a "Star-wars balance of the force". Speed vs accuracy? Convenience vs. security/privacy? Usability vs. User Experience? Trust me, it is very difficult to get the best of both worlds. You essentially need to figure out your users' priorities. Where do you get these priorities? See above 1.