Lots and lots of discipline. It's not easy to predict the future, and it's tough to do with a moving target, so the best way to attempt being a fortune teller is to remove as many variables as possible. In our experience, we found that waiting to test products at the end of the development phases led to long Alpha and Beta periods. Waiting until the end of development to start testing is not ideal, there should NEVER be unexpected delays at the end of a project. Delays should be known well before going into a testing period. Also, avoid adding new features without removing features. When new ideas get added to the product, old ideas should be challenged and re-prioritized. If 3 points of work get added, then 3 points of work should be removed. There are always multiple phases to a project, and not everything needs to be done at once.