Ты должен определить, что такое на самом деле «готово», ещё до того, как начнёшь работу. Я вижу, как люди попадают в ловушку, потому что думают, что устного соглашения достаточно, или полагают, что клиент понимает, что входит в объём работ. Всё должно быть в письменном виде - точные deliverables, сколько раундов правок включено, что считается change request'ом, и что происходит, когда клиент просит что-то новое. А потом придерживайся этого. Звучит жёстко, но это единственный способ остаться в здравом уме и сохранить справедливость.
Главное, что упускают большинство: тебе нужен процесс, чтобы соглашаться на изменения, не неся убытки сам. Когда клиент просит что-то дополнительно, не просто откажи или неохотно добавь это бесплатно. Вместо этого проведи открытый разговор: «Это выходит за пределы исходного объёма, но я могу это сделать. Это займёт X часов и будет стоить Y». Зафиксируй это в письменном виде и получи одобрение, прежде чем начинать. В половине случаев они поймут, что дополнительные деньги не стоят того, и откажутся. А те, кто согласится? Теперь ты получаешь справедливую оплату за дополнительную работу, и они не смогут потом сказать, что ты превысил смету.
Одна ловушка, на которую мало кто обращает внимание: будь осторожен с клиентами, которые пристают к тебе мелкими «быстрыми изменениями», которые кажутся недостойными формального change request'а. Это накапливается быстрее, чем ты думаешь, и к концу проекта ты потерял часы на stuff, которые казались незначительными. Проведи черту где-то - может быть, всё, что менее 30 минут, бесплатно, всё остальное требует change order'а. Так ты не будешь выглядеть мелочным, но и не будешь истекать кровью из-за смерти от тысячи порезов.