Я много лет работаю в  IT. Стоимость проекта может меняться на этапе согласования ТЗ, именно потому, что часто заказчик сам не очень хорошо понимает, что ему нужно, и его требования меняются по мере того, как он понимает свои потребности и ваши возможности.Но если программист не знает, что ему нужно будет сделать, чтобы внести изменение в программу, написанную им самим, он некомпетентен. Но еще более некомпетентен менеджер, который ведет переговоры об оплате.