The Iron Laws of Software Development
You can't give an estimate until you've come up with a design.
You can't come up with a design until you understand the requirements.
You won't really understand the requirements until you've finished the project.
By the time you finish the project, the requirements will have changed.