don't know how your situation had, but as my experience - just make sure before you set an agreement, you got the scope of app which will built... client know what he want and developer get what you needs, client give developer detail (yes, very-very detail) data and information ie forms, reports, process, validation, diagram, flow-process, how it's works or better client has app mock-up and etc.. etc... so developer can start write the code with confidence... there were unpleasant feel situation while in the middle to end phase of development the client change (add/remove) the requirement that out-of scope and never been discuss before.
Set the timeline of development longer as developer can achieve, it's better the app finish sooner rather than out of timeline.