几乎每次关于软件项目的首次交谈,都从同一个问题开始:要花多少钱?这是个合理的问题,也是我最无法负责任地用一句话回答的问题。在为各类公司开发软件 25 年之后,我明白:在尚未理解问题之前给出的报价不是估算,而是一个猜测,日后总有人要为此付出代价。

本文不会给出价格,因为我在这里写的任何数字对您的项目都不会准确。它给出的是真正影响成本的因素清单,让您在收到报价时能够判断,也让您能够做出既降低成本又不损害结果的选择。

为什么针对“同一件事”的两份报价会相差如此之大

如果您请三家公司为“客户门户”报价,很容易收到三个相差很大的数字。这很少是因为某一家多收费,通常是因为每家想象的门户不同。一家假设只是简单登录加发票列表;另一家假设有基于角色的访问、文档上传、邮件通知、管理后台和支付网关;第三家假设在此之外还有移动应用。

软件的特别之处在于,同一句话可以描述工作量相差一个数量级的产品。因此,任何诚实估算的第一步,都是把一句话变成范围:对工作完成时将存在什么的书面描述。对于没有范围就给出的报价,要保持警惕。

成本的主要驱动因素

1. 范围:它能做多少事

每个功能都是一项工作:设计、构建、测试,并在周围一切变化时让它持续可用。功能之间还会相互影响。增加第五种用户角色,成本并不是比第四种多五分之一;它会涉及每一个检查权限的页面。列出需求时,请把第一天就需要的和以后有更好的区分开。这一点是您手中最有效的成本杠杆。

2. 不确定性:对问题的理解程度

一个被充分理解的问题,例如存储记录并发送邮件的表单,可以精确估算。而如果没有人确定流程应如何运作或数据是什么样子,就无法精确估算。不确定性并不会让工作变得不可能,但会让固定价格对双方都有风险:要么供应商抬高价格以覆盖未知因素,要么项目在“包含什么”的争议中偏离方向。预先花一点时间降低不确定性,例如通过简短的调研阶段、原型或真实数据样本,通常省下的比花费的更多。

3. 集成:涉及多少其他系统

对接支付网关、财务软件、CRM、快递服务或政府门户,往往是估算最容易出偏差的地方。每个外部系统都有自己的规则、自己的特殊之处,有时还有与代码无关的审批流程。文档完善的现代 API 比较简单;没有文档的旧系统,或只能导出文件的系统,则不然。如果您的项目涉及集成,请要求在估算中明确列出这些集成,以及您需要取得的各项审批。

4. 用户、数据与性能

供十位内部用户使用的软件和供一万名客户使用的软件,是两种不同的工程问题。用户更多、数据更多、并发活动更多,就需要更多地关注数据库设计、缓存、托管和监控。大多数业务应用并不需要特殊的架构,但您应如实告诉开发人员预期的规模,包括两三年后希望达到的规模,这样基础才不会过小。

5. 平台与设备

能在桌面和手机浏览器上运行的 Web 应用是一回事,原生 Android 和 iOS 应用、离线运行、推送通知和应用商店发布则是另一回事。Flutter 和 React Native 等跨平台工具可以在 Android 和 iOS 之间共享大部分代码,因此常常是商务应用的合理选择,但这并不意味着工作可以免费完成。请确定哪些平台对您的用户真正重要。

6. 对质量、安全与合规的要求

测试、代码评审、备份、日志、访问控制和安全加固不是可有可无的附加项,但投入的深度各不相同。处理支付或个人数据的系统,比宣传性网站需要更多的谨慎。如果您有合同或监管方面的要求,请在一开始就告诉开发人员;事后再补充,成本要比一开始就纳入设计高得多。对于声称拥有无法证明的认证或保证的人,请保持谨慎。

7. 数据迁移与现有系统

如果您要替换现有系统,旧数据就必须迁移过去。清理、映射和校验这些数据的工作量常被低估。满是自由文本条目、重复客户和不一致日期的电子表格,需要真正花力气才能变成干净的数据库。请尽早问清楚,旧数据中您真正需要多少。

8. 上线之后

软件上线并不意味着完成。服务器需要打补丁,库需要更新,缺陷会在实际使用中暴露,业务也在不断变化。请为托管、维护以及一系列小改进做好预算。作为一个大致的习惯,应把第一个版本视为与软件长期关系的开始,而不是一次性买断。

一份诚实的报价是什么样的

无论最终数字是多少,值得信赖的报价都有一些可辨认的特征。它用通俗的语言描述范围,让您能核对是否与您的设想一致。它列出假设,例如“支付服务商的沙箱可用”或“您以电子表格提供产品数据”。它把工作分解为里程碑,让您能看到进展,必要时可以停止。它说明哪些内容不包含。它还说明如何处理变更,因为变更一定会有。

如果估算采用固定价格,应说明需求变动时会怎样处理。如果采用按时间和材料计费,应给出一个范围,并说明您将如何了解开支情况。我们的固定价格与按时间和材料计费的选择指南对此决策有更深入的讨论。

如何在不削减价值的前提下降低成本

  • 起步比您认为的需要更小。由真实用户使用的、聚焦的首个版本,比一份冗长的规格说明更能让您有所收获。在了解哪些真正重要之后,再添加第二批、第三批功能。
  • 尽早提供真实样例。样本文档、电子表格、现有流程的截图,以及一份棘手例外情况的清单,比开会更能快速消除不确定性。
  • 说出您不确定的地方。开发者如果知道某个未知因素,就能围绕它进行设计。意外情况才是花钱的地方。
  • 先考虑是否真的需要软件。有时,配置一款现成工具、编写一个小型自动化脚本,或调整流程,就能以更低成本解决问题。优秀的开发者会如实告诉您,即使这意味着项目更小。

坦率的回答

定制软件的成本取决于您要开发什么、您对需求的理解程度、它要对接多少其他系统,以及您打算让它运行多久。如果有人在了解这些之前就能给出确定的报价,那他要么是在猜,要么是在卖标准化产品。

IT Labs India 提供免费的初次咨询和书面估价,不公布价目,正是因为只有理解了您的问题之后,才有合适的数字。如果您想开始这场对话,可以进一步了解我们的定制软件开发服务,或联系我们。