This brings up another way to gather intelligence on the problem at hand: build a prototype. Briefly, forget all the rules you have been taught about careful documentation and complete understanding of the project before you begin. Simply plunge into building a prototype with code you expect to throw away, and get a feel for the challenges involved in building the real thing. Your time estimate for the project after such a challenge will be far better.