How does one improve one's problem-solving ability?
I'm focusing on becoming a better developer and one area I'd like to focus on is improving my problem solving skills.
The really good developers I know understand the problem very well and know how to approach HOW to find out what they don't know. I've often heard that a developer must know his problem domain well or his code can't be built upon a poor understanding of the business. I've almost never been in an environment where I was given time to sufficiently learn the business enough.
Can others share their thoughts on best practices of how to approach solving a problem, or more importantly... how to best approach finding out the information you need to know in order to get to a reasonable answer or hypothesis?
Are there any good books or resources for this?