Recently I was talking to a friend of mine who had worked in the XML group at Microsoft. We were talking about designing and implementing a product. Being in the CRM business I never realized how much usability and customer understanding goes into your decision making. I came from a C++ and Java background where focus was on the core code and not much on customer facing elements. Having been at SugarCRM for 5+ years it is amazing how some of this has crept in without me even being aware. Now I am not saying my decision making in this sense is perfect, but now a days whenever a design decisions comes in front of me I am trying to think about how the customer would use it.
For the longest time I had considered software engineering as software engineering. You could apply the same principals across the board. In talking to my friend it hit me that we were in two totally different spaces. His decision making went into configurability, extensibility, making it better for the developer. He would have preferred to create more configuration options in order to cover every possible permutation a developer/user could ever need. I realized that if I cross a similar problem I am thinking about the user. Sometimes what I think is right and what is best for the user are inline but sometimes they aren’t. Maybe adding an extra few screens so it is not as “pure” but easier to understand is the way to go. Maybe removing some configuration options although not as flexible but less confusing is correct.
Looking at how your users will actually want to use it is something we should always have at the forefront of design.