There is no perfect recipe for obtaining a fantastic product that users will love. However, when it comes to usability, some general guidelines and practices can be considered and followed. They are:
1. Know your end user and their working environment: Find out how the software you are developing will be used and get to know the end-user’s working environment. Look at the product from the end user’s perspective and use the existing product yourself to get a better idea. If possible, try to interact with the end user on certain functionalities to understand his/her expectations of the product.
2. Know the data that you are going to present to the user: Consider the volume of data, how the user is going to use the data (e.g. reports, graphs, etc.) while designing the user interface. This will impact the kind of controls you would choose to present the information and how the user would utilize the information.
3. Keep the UI simple: Show only useful and relevant information to the user. Do not clutter the screens with too many controls, buttons and other widgets. Think about how to present the information (data) in a powerful way to the user (e.g. grids, images, graphs etc.).
4. Navigation is important: Simpler the navigation – faster the task accomplishment. Provide clear entry and exit points for different functionalities. Ensure that the user can return to the appropriate location of the page from where the last action was taken. Make your navigation flexible to accommodate future requirements (e.g. tabs).
5. Be Consistent: Consistency in both appearance and behavior enables users to build an accurate mental model of the way the application works and accurate mental models lead to lower training and support costs. Use templates and a consistent approach while designing screens.
6. Create a match between your application and the real world: Always use words, phrases, and concepts that are familiar to the user. For example, say “Patient Chart” instead of “Patient Database Record”, show calendar icon for dates and so on.
7. Use standard GUI controls without altering their behavior: Users know how to use standard GUI controls. Do not change their behavior for your requirements. Avoid the usage of non-standard GUI controls, whenever possible. Position the controls for easy usage and group them properly.
8. Design for minimum inputs required from the user: Ensure that common inputs are required only once from the user. Do not ask the users to do more work for data entry, retrieval of information and operations. Spend more time on programming and minimize the user’s work (wherever possible, pre-populate the data).
9. Keep your user informed: Always let the user know what is happening in your application by providing appropriate feedback. When the user performs an action, provide feedback to indicate that the system has received the input and is operating on it. For example, if the user is deleting critical data, ask for confirmation before deleting the data. Make sure that the error messages use simple language, states the problem and provide solutions so that the user can fix the problem.
10. Expect that the user makes mistakes: Ensure that no matter what the user does,they can’t mess up. If they make a mistake, provide a mechanism to undo these mistakes and ensure that data is protected.
11. Consider technology impacts on UI design: Consider implementation techniques like Ajax, multiple image/content servers, personalization techniques to make the user experience pleasant.
12. Do time-study: User should be able to access important areas of the application with minimum amount of time and effort. Provide multiple paths to the user for all the important areas of the application. Do a time study on how the user would use your screens.
13. Do Hallway testing: Bring 2-3 people to play around your product and observe carefully, without commenting, while they are using it. Listen to their feedback – what they say and what they don’t.


"Online communities, iterative methodologies and software scalability" with Andres Camacho - Vice President of Engineering at Vinfolio 