软件外包报价从7万到41万:同一份28页需求文档,钱到底差在哪
2023年4月,我帮一个做社区团购的朋友看了5份外包报价。需求文档是他自己写的,28页,功能点列了63条,含小程序端、团长后台、仓储分拣、微信支付分账。5家给的报价分别是7.2万、12万、18.6万、26万、41万。他第一反应是“7.2万那家最实在”。我让他把5份报价单里的“人员配置”那一页翻出来摊在桌上对着看:7.2万那家写的是“资深全栈工程师1名”,公司注册在某三线城市,企查查上社保缴纳人数3人,官网案例全是2019年之前的;41万那家配了产品经理1、UI 1、前端2、后端2、测试1,7个人,工期14周。差的真不是良心,是最终坐在电脑前敲代码的人的单位时间成本。7.2万那家大概率是把项目转给了个人开发者,中间抽走2到3万差价,你付的钱里有一半买了“转包”这个动作。所以比价之前先问一句话:最终写代码的是谁,在你们公司社保名单上吗?能不能在合同里写上具体姓名和身份证后四位?
三种外包模式,成本结构完全不是一回事
很多人以为外包只有一种,就是“我给你钱,你给我一个软件”。实际上市面上跑的是三种模式,成本结构和风险方向是反的:
| 模式 | 计价方式 | 2024年行情参考 | 外包方毛利 | 谁管进度 | 退出成本 |
|---|---|---|---|---|---|
| 整包(固定价) | 按项目一口价 | 8万~80万不等 | 35%~50% | 外包方 | 高,代码熟不熟只有他们知道 |
| 驻场人力 | 按人天 | 初级1300-1800/人天,中级2000-2800,高级3000-4500 | 15%~25% | 甲方 | 低,代码在自己仓库 |
| 混合(核心自研+边缘外包) | 模块分包 | 单模块1.5万~8万 | 30%左右 | 甲方 | 中 |
整包模式里有个很隐蔽的成本:需求变更费。我见过一份合同写“超出需求文档范围的功能,按每个功能点2800元计费”。结果甲方中途想加一个“团长等级自动升降”,外包方拆成了12个功能点,报价3.36万。而这件事在驻场模式下,就是一个中级工程师两天的事,4000块。所以别只盯着总价,先算一次性总价之外的东西——变更单价、年维护费(一般是合同额的15%~20%/年)、服务器和第三方服务的账号在谁手里。
真正决定你要不要签这份合同的,我建议就一个指标:退出成本。把这句话原封不动问出去——“如果三个月后我们换团队,新团队需要多长时间能接手?”靠谱的答案会具体到“代码在你们Git上,有README,数据库有ER图,部署有docker-compose,大概3到5天能做完整环境搭建”。不靠谱的答案是“我们的框架是自研的,需要我们的工程师支持一下”。后面这句话翻译过来就是:你被锁死了。
需求文档里那句“支持高并发”,是所有扯皮的起点
我见过太多项目死在验收环节。28页文档写得很认真,但里面藏着一堆无法验收的形容词:界面要“简洁大方”、系统要“稳定”、要“支持高并发”、用户体验要“流畅”。这些词在签合同的时候双方都点头,做完了必然吵架——因为每个人的标准都不一样。
改法很笨但很有效,就是把形容词换成数字。我帮朋友改过一版验收标准,举几个实际替换:
- “支持高并发” → “单机4核8G环境下,订单创建接口压测 QPS ≥ 800,P95 响应时间 < 300ms,压测脚本由甲方提供,部署在甲方服务器上跑”
- “界面简洁大方” → “以甲方提供的Figma稿为准,还原度偏差不超过2px,字体、色值走设计稿标注”
- “系统稳定” → “连续运行72小时无重启,接口错误率 < 0.5%,日志接入甲方现有Sentry”
- “数据安全” → “用户手机号在数据库里AES-256加密存储,密钥由甲方保管,外包方不得留存副本”
写这些条款大概要多花两天时间,但能省下后面两个月的来回。还有个经常被忽略的点:测试数据归属。验收时用的真实数据(哪怕脱敏了)必须约定项目结束后30天内删除并出具书面确认,不然你的用户数据就永久留在外包公司的测试库里了。
合同里必须写死的7条,少一条都可能出事
代理过几起外包纠纷之后,我总结了一份清单,谈的时候直接甩给对方,看反应就知道靠不靠谱:
- 代码托管在甲方账号下。GitHub/Gitee/自建GitLab都行,但仓库owner必须是甲方,外包方只给协作者权限。每周至少push一次,不接受“做完一起交付”。
- 禁止使用闭源自研框架或低代码平台交付。这条我是被坑过才写进去的。2021年有个项目,外包方用某低代码平台搭的,看着挺快,后来要加一个定制报表,平台不支持,导出源码是一堆混淆过的JSON,最后整体重构花了4个月、17万。
- 人员变更条款。报价单上写了“高级工程师张三”,结果第二周换成实习生,这在驻场模式里非常常见。约定核心人员变更需提前7天书面通知,且替换人员资历不低于原人员。
- 里程碑付款,按验收付。3:4:3或者2:3:3:2都行,别接受“签约付50%”。每个里程碑要有可运行的演示环境,不是PPT。
- 第三方组件清单和授权。开源协议要列清楚,GPL类的传染性协议不要出现在闭源商业项目里。
- 交付物清单。源代码、数据库设计文档、部署脚本、接口文档(Swagger导出)、第三方账号清单(短信、支付、地图、云服务)。缺一项扣一个里程碑的钱。
- 违约金按里程碑算。延期每天按该里程碑金额的1%扣,上限20%。这条不一定真用得上,但写上去之后,对方的排期会认真很多。
什么时候,你真的不该外包
说句可能得罪同行的话:外包不是万能的,有三类东西外包出去基本等于给自己埋雷。第一类是核心业务逻辑,比如你的分账算法、定价策略、风控规则,这些是公司的命根子,代码出去一次就收不回来了。第二类是需要长期高频迭代的模块,迭代越快,沟通成本越高,外包模式下每次改需求都是一次报价。第三类是强合规场景,涉及医疗、金融、个人信息出境的,外包方的资质和安全能力你很难审得动。
一个粗略的判断标准:如果一个模块未来12个月的预期变更次数超过8次,或者它的逻辑只有你们内部两三个人说得清,那就自己招人做。反过来,一次性交付、逻辑标准、行业里有成熟方案的(比如支付对接、短信、OCR、ERP标准模块),外包是划算的。
最后附上我每次陪朋友谈外包都会问的5个问题,你可以直接抄:
- 这个项目最终写代码的几个人,能给我看社保记录吗?
- 代码仓库建在谁的账号下,多久push一次?
- 如果我们三个月后自己接手,需要多久?
- 超出需求文档的功能,按什么单位计费,单价多少?
- 项目结束后,我们的数据和你们测试库里的副本怎么处理?
这5个问题问完,对方的反应比报价单上的数字有用得多。