一、双方提前沟通好需求并形成文档作为合同附件,签完合同后,收取定金后再开动
外包项目定金的收取,一般会分三段式,需求确定签合同时、项目中间、项目交付时收尾款。
比例一般是50%,30%,20%,头重脚轻式的。当然也可以双方协商,但建议头款多收一些,下面会说明原因。

记住,千万别不收定金就开始开发,合同不签,不给需求文档,不打钱,永远不要开动你的电脑。
签完合同后先收取50%的定金,不要太少,以防止对方乱改需求。乱改需求很可怕的。如果您是客户,在需求不明确的情况下不建议提前签订合同。
程序员面对的是一群对开发流程完全不懂的外行人,这并不可怕,可怕的是,他们往往认为改需求的成本很低很低。
这就导致了开发历史上,以及现在不断发生的改需求的状况。而对于处于软件开发产业链最底端的程序员,往往承担着背锅的种种苦楚。
不管需求怎么改,老板、客户、产品,都不会为自己的需求分析不到位而担负任何责任,注意,是任何责任。而同时工期不变,这就意味着程序员的时间被压缩,工作量加倍。
所以,收取定金后,如果甲方改需求,乙方可以按劳动时间来折算损失再改需求,或者原有约定的需求继续开发,改的需求在做完项目后重新提,算新需求。
这个主要看双方如何洽谈了,对于我,由于之前的经验,宁可不做这单生意,也不会同意对方频繁改需求的。
二、规范详细的业务流程及惩罚措施
大部分的公司的程序员,之所以一直存在产品乱改需求的情况,不在于业务流程不完善,而是没有规定惩罚措施。
产品改了需求,这是产品前期没有把产品需求分析到位,是产品工作的失职,而现在国内的情况就是,产品过来说几句好话,或者吵一架,再告状说程序员难管,就完事,最终工作还是落程序员自己本身,而产品失职的责任成功转嫁给程序员。
程序员做开发,是以原型或需求文档为目标,在规定的时间内实现,这是职责内的。需求没做好,当然算产品的,程序没开发出来,程序背锅,需求改了,难道还是程序来背吗?
应该如何解决?
在项目开始,就制定好改需求所付出的代价,要么延长工期,要么扣产品的奖金,两者选一。当然,底层的程序员没法做这个工作,需要由技术的领头人来协调这个。
如果改需求的是老板和客户怎么办?
没有怎么办的,这是产品的活,协调工作本身就是产品份内的工作,要么协商老板和客户延长工期,要么删减现有的功能。这时,如果程序员为了显示自己的技术,而开口说这很简单,很快就完成,接下来的工作就麻烦了。