您永远无法知道确切的价格或接近准确的价格,因为它取决于许多因素。例:
案例分析
您收到了一个基于WordPress的小型网站的请求。您唯一需要做的就是:与您的设计师合作来创建精美的图形,然后创建网站本身(没有什么技术性,只需将一组插件添加到WordPress中),然后进行部署。这项工作真的很容易,您报价$ 600。
您的设计师创建了第一稿。客户解释说,他认为它根本没有吸引力。第二稿,第三稿和第四稿也是如此。最终,经过两周的努力,设计师终于得到了草图,并被客户接受。
但是可悲的是,设计师被公交车撞了,唯一得到的就是他发送给您的JPEG,而不是原始的PSD,所以您必须从新设计师开始。最后,您得到了图形并开始工作。
惊喜:您发现插件A与插件B不兼容,插件C不能按预期工作,并且插件D无法安装在最新版本的WordPress上,而插件A只能安装在这个最新版本上。现在,您必须手动进行许多PHP编码,并且由于您是Python开发人员,并且从未在PHP中编写过一行代码,所以这并不是最简单的任务。
同时,客户开始向您发送可怕的电子邮件,询问为什么工作仍未完成,而截止日期是一周前。您最终完成了PHP编码,一切都在您的计算机上运行良好。顾客很高兴。
然后,您开始将网站部署到托管服务器,以发现不仅网站因某种神秘错误而失败,而且托管公司不支持您在代码中使用很多的PHP功能。
最后,在这个项目上花费了超过3,000美元之后,您就可以启动并运行该网站。客户由于截止日期而生气,因为“没有任何事情能像您期望的那样工作”。您要价600美元吗?3,000元?
为什么会发生?
我在此示例中说明的情况比您想象的要频繁得多。为什么?因为您无法预测太多变量,因此增加了风险。在这里,风险通过以下方式增加:
- 与视觉设计有关的规范不明确,
- 设计师之死,
- 您选择的插件不兼容,
- 您选择的插件的不良支持,
- 您以前没有使用过PHP的事实,
- 开发环境与生产环境之间的差异以及没有过渡。
可以使用特定方法解决这些问题:
- 明确而精确的功能和非功能要求,
- 忙碌的场景管理(即设计师必须与您共享每个文档,以便他可以在任何时候死掉而不会影响项目),
- 您必须使用的工具和语言的先验知识(这需要大量工作),
- 暂存,强化测试等
唯一的问题是,采用这种方法时,您必须告诉客户他首先要支付至少5,000美元,因为这实际上是要求,规格,设计,测试等的价格。该客户有可能接受您的报价极低。
没事做吗
如果您不能给出非常精确的价格,您仍然可以给出一个近似值,该近似值将工作的每个部分都考虑进去,并且风险指数会受到影响。可预测的风险越高,价格越高。
您有两种方法可以做到这一点:
1. Watefally方式
如果您从事适合Waterfall / V-Model的项目,则可能会起作用:
列出项目的功能和非功能需求。以与客户签署合同相同的方式获取客户签署的文档。
获得此文档后,您将已经:
逐步与您的团队一起,分析每个需求并评估:
该项目这部分的平均价格,
不考虑风险的最高价格,
风险指数。
将考虑这三个因素,以确定您将给客户的价格。
资产风险不取决于特定需求,而取决于需求之间或总体上与系统之间的兼容性。
瀑布式方法的优点:考虑到您对要完成的工作和可能产生的风险有清晰的了解,因此客户可以得到非常精确的价格。
瀑布式方法的缺点:在给出价格之前,您必须写一个200页的文档。如果客户同时取消该项目或同时进行该怎么办?整个过程也非常繁重,以后的需求无法更改。
2.敏捷方式
如果您从事适合Scrum或其他敏捷模型的项目:
- 要么不给出项目的整体价格,而是给出每个组件的价格,
- 或者您可以在开始时指出一个非常近似的总体价格,然后给出越来越精确的价格。
在这两种情况下,您都应该在您和客户之间建立起牢固的信任,或者在销售部门拥有出色的人才。除此以外,
敏捷方法的优点:客户可以随时取消。另外,如果她在早期取消,她仍然有一些可以使用的源代码。
敏捷方法的缺点:价格太不精确或什至没有给出。如果您不告诉他们必须支付多少费用,大多数客户将不愿意与您开展业务。