It's ironic that making something complex is far easier then making something simple. How could this be? Here are some common and not so common things to consider.
- Developed by me, used by others. - The most common problem I see are companies that design and develop tools for people other then themselves. If you don't plan to use the software yourself why would someone else use it? Designing software without first hand experience requires you to leap into someone else's head. The developer or program manager designs software in a manner that fits his own mental model and doesn't always verify that this model is the same as his customers. Whenever possible try to be your own customer. Use your own products daily to serve a job function that's as similar as possible to your actual customers.
- 80% vs. 20% - Most applications have one core piece of functionality that accounts for 80% of how the application is used. However this critical piece accounts for just 20% of the code. Teams spend a disproportionate amount of time designing and developing the non-critical components to satisfy edge conditions. At the start of your project phases determine what you feel are your critical features. Never let a non-critical feature negativity impact the interface flow and simplicity of your critical UI.
- Consistency takes more time - To make something simple you need a clean and consistent model across the entire application. To create such a model and ensure that it's consistent throughout takes a lot more time then having each feature perform independent to all the others. If the project is large or will take a long time make sure everyone is sharing specs and actually reading them. If there are shared concepts there can be shared user interface components as well.
- Features Creep - More features don't always make a product better. Many sales and marketing managers feel that adding features to a product will always help you sell more of your product. There is a constant pressure to add more features. You will rarely hear, "Figure out a way to get rid of features X, Y and Z or fold them into existing functionality." Instead of features concentrate on scenarios. Here's the difference:
Feature - Allow users to print their photos Scenario - Allow users to share their photos with friends and family
A good scenario helps your product tell a story. A feature is just a page in that story.
- Out of time - I've seen this on a few projects where the team spends a lot of time designing the back-end technology and at the end of the project they ask to "slap on an interface." Designing software for the user can't be an after thought. Imagine a construction company building the plumbing and electrical work for a high rise and then asking an architect to throw on a facade.
Designing simple software doesn't have to be hard but it does take time and planning. People make mistakes and to make software "friendly" we have to teach the software how to be more forgiving to our mistakes.