要想在不同组织之间跨越信任和猜忌的鸿沟,并让大家共同工作,合同是必要的。但传统合同的底层逻辑是“不信任”和“自保”哲学,特别是“固定范围、固定时间、固定价格”合同,并没有考虑业务环境和软件开发中的不确定性。按时计价类项目未基于已交付的价值收费,导致某些团队耗时多,产出少,真正有价值的成果乏善可陈,同样难以让客户得到经济收益。在合同执行过程中,人们耗费大量时间和精力,讨论到底谁该为变更买单。
这些都将客户和厂商置于“楚河汉界”的两边,而不是促成他们的协作。《敏捷宣言》强调“客户合作高于合同谈判”,强调要拥抱变化,要实现双赢,经过敏捷社区许多年的探索,终于摸索出了一些好的解决方案。
Alistair Cockburn(水晶方法论的创始人、《敏捷宣言》签署者之一)总结了10个策略可用于签订合同。其中一个引自Bob Martin(《敏捷宣言》签署者之一)的观点如下:
“(我)赞同在为每个完成的故事点付费的同时,还以小时计算工作费用。例如,假设你接手的项目有1000个故事点,一个4人团队的速率大约是每周完成50个故事点,这就相当于80人周的工作量。以每小时100美元计算,就需要支付320000美元。那么,我们可以把每个小时的费用降到30美元,然后向客户提出每完成一个故事点支付224美元的要求。”
——Bob Martin
Martin Fowler(持续集成、微服务的主要提出者,《敏捷宣言》签署者之一)也介绍了一个ThoughtWorks 公司做过的定额合同。在双方签订了一份固定投标合同(Fixed Bid Contract),并逐步建立了信任后,形成了一个更加灵活的收费方案。
在我看来,这个故事的关键在于,从一开始我们就寻求公司之间的合作基调(Collaborative Note),而不是对峙基调(Confrontational Note)。固定范围合同的最大问题在于,它将甲方和乙方置于对立面,双方互相争论需求是否变了、谁该为这些变化买单。敏捷方法将试图将对峙关系转化为协作关系(客户合作高于合同谈判)。
——Martin Fowler
敏捷合同关键在于信任关系的建立,Mary Poppendieck(精益软件开发的提出者)在一次关于敏捷合同的演讲中,以丰田公司和通用公司如何处理与供应商的关系,以及丰田公司如何得到更多的信任为例,表述了建立信任及信任带来的货币价值的重要性:
“丰田占到了四分之三的美国供应商份额,而通用只有不到二分之一的份额;与通用相比,丰田只花费了一半的财力和时间。”
——Mary Poppendieck
基于这些理念与敏捷先驱的实践探索,我们总结了如下几种敏捷合同模式。
1.“不劳而获,变更免费”合同
很多时候,在双方没有建立起信任感之前,再加上已有的传统流程束缚,双方不得不签订“固定范围、固定时间、固定价格”合同,但我们可以增加一些敏捷要素。
Jeff Sutherland(Scrum 创始人之一)提出“不劳而获,变更免费”(Money for nothing and change for free)。
“变更免费”是指当总量不变时,需求的增减免费,优先级的改变免费。这对客户而言,可以随时调整需求,不用像瀑布开发那样提前确定好所有需求细节。同时,乙方可以要求客户积极参与项目。
“不劳而获”是指客户可以在任何阶段随时终止合同。在这种情况下,客户要为未完成的工作支付20%的款项。这个条款允许客户在任何时刻认为,所有优先级相对较高的功能都开发完成,剩下的那些没有价值或价值较小的功能不再需要时,可以终止合同。终止合同时客户可以节省大部分资金(如80%),如果使用传统合同,则资金基本是无法拿回的。同时提供服务的乙方可以无偿拿到额外的20%的款项,这一部分算是对乙方的一次性补偿,没有任何成本,算是“不劳而获”。
例如,总合同额为1000万元,当合同执行一半时,如果客户希望取消剩余的合同,那么客户可以拿回剩下的500万元的80%(400万元),乙方可以无偿拿到20%(100万元)。
这种机制能够提高客户参与度,节省资金,对乙方也有相应的免费补偿,对双方来说是双赢。
2.分级固定价格合同
双方依然签订“固定范围、固定时间、固定价格”合同,但是价格与时间可以是一个变量,产生不同的级别组合。Thorup和Jensen 提出了分级固定价格合同,由双方共同承担相关进度变化的风险和机会。如表2-4所示,项目按时完成,是一个标准价格;提前完成,是一个对乙方激励的价格;滞后完成,是一个对乙方惩罚的价格。
表2-4 完成时间不同,价格不同
3.固定价格,单项调整
Mike Griffiths提出双方签订一个固定价格的工作包,将工作说明书(SOW)分解为若干单独的工作包,每个工作包都有自己的固定价格,然后随着工作的进展,乙方可以基于新信息和新风险重新评估剩余的工作包价格,客户可以根据不断变化的成本重新安排剩余工作的优先级。这样,可以通过减少被评估工作的范围和成本来降低低估或高估大量工作的风险,如图2-24所示。
4.固定价格与时间,但范围可变
双方就服务的时间与价格确定后,具体要交付的内容是可以随时变化的,例如,通常的纯人力外包模式,由客户安排具体的工作,比较适合 IT 服务、运维支持等项目。
图2-24 固定价格,单项调整
5.固定基础价格与时间,按价值成果分成
双方就服务的时间与价格确定一个基础保障性价格,这个价格可能只会让乙方不亏,具体要交付的内容可以随时变化,但双方更关注的是最终能够达成的价值成果,根据成果分成。例如,在某个项目功能交付后,如果能够带来30%的收益增长,那么双方可以就这一部分额外收益按比例分成。
6.组合模式
可以把上面几种方式进行有机组合,核心要点是双方共赢。