I'm currently being asked to come up with an estimate of the effort to implement a large feature in our system. I always find this a difficult task. The best way I found to do it is to break the task down into small pieces, estimate the effort on each piece, and add them all up. I then add in a percentage for debugging and testing. I'm seldom very confident in the answer, however. Sometimes, I can work faster than I expected. Sometimes, something I thought was simple ends up being much more difficult than I expected.
What's more important, however, is how these estimates are used. You can't just make a plan then check back at the end to see if it's finished. The plan should be continuously tracked throughout development and adjusted as needed. In Scrum, they do this by a burn-down chart which graphs the work left to do over time and predicts when you'll be finished as a result. Just don't expect the development to match your original estimate.
Download