From Murphy's laws for programming:
If something is easy, it'll take only twice as much as you thought.
If it is difficult, it'll take at least ten times as much. : )
No jokes now, project time estimate is a serious matter.
I agree with the steps above, and I offer useful 'trick':
Of course you will try to start 'Detailed Specs' right after finishing 'Rough', without waiting, but you need to won time… Like in chess game, to won you need to use your opponent’s time to think about your own next step.
Obviously if you thought you need about 2 weeks to do something and they wasted 10 days reading specifications and responding to your questions, you still need 2 weeks to finish the job, right?
Also, take into account you need some time in the evening to ‘recall’ where you finished last time. I call it ‘time for swap’. And like with disk swap, the more often you swap, the less time is available for a useful work. Looks like a lot of weekend work to me.
You may also ask questions:
I read a horror story about case when guy agreed to program in night something for his daytime company, was asked to take another guy to participate, then the other guy got behind schedule. To make for missing time he started sneaking into ‘night project’ during the day, and his day manager was not excited, because he wanted him to work overtime for day project, what was also behind schedule. As it happens, specifications were changed a little, he missed deadline a little, was required by his night manager to accept penalty…
As a result, he left company with bad feelings with his day time colleagues and manager, and was not paid fair price.
His advice: don’t do that, if you do not have full control.
My advice: You’ve been warned. : )