For me the key difference between estimating for software development and servicing a car is that, in general the mechanics have experience in servicing this type of car, they know how long it will take and what parts they will need. Most software development is solving problems the team have not solved before with different constraints and a constantly shifting toolkit. We can get better at estimating software development by reviewing how well our estimates work out, but with so much variability, for me, it is more of an art than a science.