There are two crucial parts for making the estimation that will be met in the future.
- First, the estimation should be correct (the amount of work to be done predicted without mistakes).
- Secondly, the scope will likely change. So new tasks should be evaluated in addition to the cost and time you've agreed before.
You only asked for the first part, so here is what I think based on my experience.
- Ask the person (or the team) that will actually perform the job to make estimations.
- Compare the estimation they made to the time the similar tasks took in the past.
- Make sure that the project is decomposed to a number of small tasks of 4 to 8 hours each max.
If the estimation differs a lot from a similar task's estimation from your prior experience, this means you should either find out the reason, or expect the task to take longer (like it already happened before).
If the estimated tasks are expected to be done in more than 4-8 hours, it means they may be too big to be estimated properly, so you may want to ask to decompose them further.
You could also outsource some tasks. In that case you may want to have the contractor that has already proven its/her/his ability to do the proper job for you, or start with small not important tasks.
Finally, you should analyse the possible risks and increase time estimation accordingly, so that you promise the date that is further in the future than what you was promised by your team.
And one more thing, that is also important. Once you notice that somebody falls behind the schedule, you should act right now, don't let the delay to increase.