One of the best decisions I've seen when it comes to this situation is to **cut scope wherever possible.** Sometimes, this is possible, and this is the best approach.
Why the best?
* Overtime is demotivating for team members (especially in the long-term) and burns them out
* Pushing back may not be possible if the company made promises to a customer
Asking the customer is good (if they say yes and are understanding); if they say no, you're in trouble.
The best thing is to communicate status early, and not get into a last-minute situation where you're "suddenly" three months late. Projects don't _suddenly_ fall behind schedule; they fall behind one hour at a time.