We spend crazy amounts of time creating personas and charting down user flows. We nail the product to its core and define different usage patterns and provide solutions to the various complexities involved. Often times we know that the one’s who use our products have different preferences, and so we go ahead and give users the ability to configure the product to their usage. This article will give you some guidelines in creating a good settings/preferences for your product.

Developers generally assume always-on connectivity and design their software with that premise. But such applications crash when they can't reach the Internet or have poky connections. If you want happy users, design applications that can function remotely.