Here's one piece of feedback that I've shared with almost every development team I've worked with: you are not the customer!
In other words, people who build software are typically much more sophisticated than users of that software. Development teams need to take that into account and build for users' less-sophisticated needs, instead of their own more-sophisticated needs.
Some examples:
- features that developers might like to use themselves will often be too complicated for most real users
- developers often underestimate the importance of "un-sexy" things like "Getting Started" documentation, clear error messages, and other parts of software which are not much fun to build but which are key to user adoption.
- development teams (and marketing teams!) often overestimate the number of features that most users will use, and therefore prioritize completing many features over making a few features really, realy easy to use.
- teams often underestimate how much time it takes, once core functionality is complete, to get the level of usability, ease of use, and UI fit and finish necessary to appeal to relatively unsophisticated users. In other words, a command-line interface may not be good enough. :-)
The best solution I've found to help a development team understand end-users' need for simplicity and ease-of-use is to get developers talking with real customers or watching those real users interact (e.g. in usability testing, in video capture, etc.) with the software they build. The closer developers are to the user, the easier it is for them to remember how different real users are!