I much prefer billing by hours/days with clear payment terms in the MSA, and iterative delivery,. Clients understand that if they don't pay, they're not going to get much. Project-based estimates with up-front payment probably is good for clients unfamiliar with software development processes, but I avoid projects like those.