"The hardest part of solving a problem is understanding it" - ?
The reason its hard to estimate development time is because programming involves design, design is a creative task.
Nobody can predict how long it takes to be creative, its a universal unknown. Creative workers (such as graphic artists) often estimate the design phase by giving themselves a hard limit and then just choosing the best idea they could come up with.
Most programmers dont even acknowledge their work is a creative expression, so they are bad at estimating what a reasonable "hard limit" might be. But even so, im not sure the same method of 'choosing the best idea within a given time limit' is suitable to programming. Some things just have to meet certain objective benchmarks or there is no point continuing.
Best idea i can come up with is to allocate your self "design time" first, which wont be long enough. Then you should be able to get a reasonable estimate of implementation time.