1) делать подробное тз.
2) разделить тз и раздать тем кто его будет реализовывать.
3) каждому звену, который делает проект предоставить время ознакомления с проектом и попросить определить примерное время за которое он сможет реализовать свою часть.
4) собрать данные о времени у сотрудников - проанализировать.
и только теперь вы можете предоставить примерное время разработки клиенту.
p.s. суть этого метода в том, что сотрудники сразу ознакомлены с тем, что им предстоит делать. и в 90% случаях не бывает ситуаций, как вы описали "Оказывается что модуль требует на разработку больше часов чем ожидалось."
p.p.s. понятное дело что такой метод тоже не даст вам 100% точный дедлайн, но много проблем точно отпадет.