Users are lazy
Here is something important to remember when designing systems and interfaces: users are lazy. Worse, not only are users lazy but they're very good at detecting pointless work.
What is pointless work? Simple: it's work that the user doesn't see any visible benefit from performing (or doesn't understand the benefit and so discounts it, or feels that the benefit is a lot smaller than you're making it out to be). Of course, the work is not pointless to you or to your application (well, hopefully), but the user doesn't care about that, all they care about is what they can see.
It is useless to ask users to do pointless work. They won't. They're (rationally) lazy.
(If you force them to do it anyways, they will pick default answers or fill in the simplest possible values. If you make them work too hard at that, they will discard your program.)
The best way to deal with this is to make users do as little work as necessary; you should ruthlessly eliminate pointless work, and when you're figuring out what's pointless, remember to view it from a user's perspective, not from a system designer's view. The corollary to this is that if you absolutely have to make users do work, you should try hard to give them a visible benefit from it. The visibility is important; generally, a big but hard to see benefit might as well not exist.
(Fundamentally, this is why things such as the accidental BitTorrent problem are so intractable. You could solve the problem by getting users to configure whether or not their BitTorrent client should run on each network they connect to, but to most users, configuring the characteristics of the various networks that they connect to is pointless work, so they just won't do it.)