As a contractor, I avoid milestones like the plague. They're appealing to buyers because, on average, buyers use them to extort additional work out of the contractor or as an excuse to defer payment (because the contractor's only recourse is court). I used to make an exception and do milestone projects for clients I trusted, but I even got screwed by them. It's just too hard to estimate software projects for both sides to come out of a milestone project on top.
EDIT: Note that I'm not claiming that people who use milestones are evil. The problem is that milestone billing for software creates lots of incentives on the client side to underestimate and underspecify work, because the contractor eats most (if not all) of the cost of identifying those problems and negotiating to get the milestone revised to include them.
EDIT: Note that I'm not claiming that people who use milestones are evil. The problem is that milestone billing for software creates lots of incentives on the client side to underestimate and underspecify work, because the contractor eats most (if not all) of the cost of identifying those problems and negotiating to get the milestone revised to include them.