I usually end up doing a lot of the thinking about the problem while talking to whoever is requesting it. That's the only way to guide them to easier, cheaper, cleaner paths. There's still a lot of finer details to work through, but it's usually enough to get started coding.