How do you account for the hours you spend "communicating", and will there be hours left for real work?
Also, committing code multiple times a day with meaningful comments also helps.
Make separate milestones for QA and UAT rounds.
Breaking the project in very small but presentable milestones helps in keeping non-technical clients updated and happy.