上QQ阅读APP看书,第一时间看更新
客户合作优先于合同谈判
软件不能像日用品那样下单订购。不可能写一份文档来描述自己想要的软件,然后交给某人,要求他按固定时间和固定价格把它开发出来,这是不可能的。以这种方式对待软件项目,只会迎来一次又一次地失败。有的时候,失败的代价还很高。
公司管理者喜欢将需求告诉开发同事,希望他们一会儿就做出可以满足这些需求的系统。但这种工作模式会造成质量低下和项目失败。
项目要想成功,需定期和频繁地得到客户反馈。作为软件的客户,不能只依赖于合同或工作说明。相反,要和开发团队紧密合作,尽量提供频繁的反馈。
一份规定有项目需求、时间表和费用的合同存在根本性的缺陷。大多数时候,早在项目完成之前(有时甚至早在合同签署之前!),它所规定的条款就已经失效了。规定有开发团队和客户合作方式的合同,才是好合同。
我在1994年谈了一个大型的、要持续多年的、50万行代码的项目。当时签下的合同就很成功。作为开发团队,我们每月只拿相当低的固定报酬。只有在交付特定的主要功能块时,才有大笔收入。合同没有规定功能块的细节。相反,合同只是说在功能块通过客户验收后就付钱。合同中也没有规定验收的细节。
项目进行期间,我们与客户紧密合作,几乎每周五都向他发布软件的新版本。下周的周一或周二,我们拿到软件的变更清单。我们为这些变更制定优先级,并安排在未来几周完成。由于客户一直在和我们密切配合,所以验收一直都不成问题。由于每周都在见证功能块的进展,所以他知道功能块何时可以满足需求。
这个项目的需求一直在变。重大变更并不少见。整块功能被移除,其他功能块被插入。尽管如此,合同和项目都存活下来,并且取得了成功。成功的关键在于和客户紧密合作,同时合同管理的是合作方式,没有规定方方面面的细节,也没有制定一个收取固定费用的时间表。