没有历史数据时,可行的做法不是猜一个精确数字,而是把预算拆成“确定要花的固定部分”和“随范围变化的浮动部分”,用下限、中位假设、上限三档给出区间,并写明每档对应的前提。区间预算的价值在于暴露假设,而不是让数字看起来更可信。
固定部分指不随页面数量、功能数量明显变化的一次性支出:域名、基础托管、必要的开发环境、基础安全配置。范围成本指随需求线性或阶梯上升的部分:页面数量、定制模块、第三方接口对接、内容迁移、测试与验收工时。
把两类分开后,区间就有了结构:固定部分给一个较窄的区间,范围成本给一个较宽的区间。例如假设某项目固定部分在 A 到 B 之间,每增加一个定制模块增加 C 到 D 的工时成本,那么总预算区间就等于固定部分加上模块数量乘以单模块区间。这里的数字只是假设的比较方法,不构成对任何实际报价的预测。
如果只给一个总数,读者无法判断这个数字在什么条件下成立;给出区间后,需求方可以反向检查:我要的功能数量落在区间的哪一段。
第一个变量是需求边界。同样叫“一个列表页”,带筛选、分页、权限控制和不带这些,工作量差别可能很大。第二个变量是内容与素材的到位程度。文案、图片、数据接口如果由需求方提供,开发侧成本下降;如果需要代做或反复修改,成本上升。第三个变量是验收标准。只说“能正常使用”和写明“在指定浏览器与设备上通过哪些用例”,对应的测试工时不同。
这三个变量在无历史数据时最容易失控。处理方式是:不追求一次算准,而是先锁定其中一到两个,把其余作为区间宽度的来源。例如先锁定内容由需求方提供,那么范围成本的不确定性就主要来自功能数量和验收标准,区间可以相应收窄。
假设你参考了一个同类项目,它只有少量页面和单一角色,成本落在较低区间。你据此推断自己的项目也在这个区间内,但你的项目需要多角色权限、审批流和跨系统同步。此时原样本的结论失效,不是因为原样本错了,而是因为它的前提——单一角色、无外部系统依赖——在你的场景中不成立。
这个反例说明:区间预算必须写明适用条件。当功能数量、角色数量或外部依赖超过样本覆盖范围时,应切换到更高的假设档,而不是在原区间内微调。
可验证的假设至少包含三项:数量、单价区间、触发条件。可以用下面的清单自检:
如果清单中某项无法回答,说明该部分还不具备给区间的条件,应先补充信息,而不是先填一个数字。
在拿到区间后,不要急着向供应方要一个确定报价,而是先做一次范围确认:把功能清单、内容责任方、验收标准写成可勾选的条目,让相关方确认哪些在范围内、哪些不在。这个动作的结果会直接影响下一步——确认后的范围可以压缩区间宽度;如果范围仍无法确认,则说明项目还不适合进入报价阶段,继续给精确数字只会制造假精确。
区间预算的作用是让讨论聚焦在前提上,而不是让数字承担它无法承担的确定性。