The problem with software estimation is that the requirements change constantly because customers often don't know what they want until they see a prototype or a mock of the system. Then, you constantly get unspecified, subtle requirements in endless emails starting with "I would also like to ...", without the customer realizing what they are asking for and how that might effect the deadlines.