定制开发合同先看这五条:报价单上看不出交付质量
同一份需求文档发出去,回来的报价能差四成。多数人的第一反应是砍价,或者怀疑对方虚高。真正的差别常常藏在合同条款里:源码给到什么程度、逾期怎么算、维护从哪天起算、变更谁定价、数据落在谁的服务器上。这五条每一条都能让报价上下浮动,也每一条都能在项目后半段变成扯皮。
报价低的那家未必故意埋雷。它只是把不确定的部分留白,等交付时再谈。甲方拿到的是一个「先上线再说」的价格,后面每一步都要重新议价。
一、源码:不是给你代码,是给你能接着跑的代码
「源代码交付」这句话出现频率很高,含义差别极大。三件事不清,后续接手成本翻倍。
交付形态。合格的做法是交付完整 Git 仓库,含提交历史、分支记录、构建脚本、依赖锁文件、环境变量样例、数据库迁移脚本、部署说明。不合格的做法是给一个压缩包,能运行的目录,但没有版本历史、没有 CI 配置,依赖靠全局安装,锁文件缺失。
这两种形态在「能不能改」上差距很大。有锁文件的仓库,任何人 clone 下来依赖版本一致;没有锁文件,半年后重装环境,小版本漂移就可能编译失败。这不是理论风险,是接手项目最常见的第一道坎。
可复现的部署。要的东西很具体:Dockerfile 或部署脚本、网关与 Nginx 配置、定时任务清单、环境变量的名称与用途、第三方服务的回调地址配置。判定标准只有一条——让乙方在一台干净的空服务器上,只用交付物把系统跑起来,能不能在半天内完成。跑不起来,就是交付物不全。
第三方资产的注册主体。域名、云主机、对象存储、短信通道、支付商户号、邮件服务、CDN、SSL 证书,如果注册在乙方账号下,源码再完整也等于钥匙被人扣着。合同里应当附一张资产清单,逐项写明服务名、注册主体、管理员账号、续费日期、过户时间点。
知识产权条款还要补一句边界:著作权归甲方,乙方保留其在签约前已有的通用框架与组件,需列明清单。不写这句,甲方以为买断了全部权利;写得死板,乙方不愿意把基础库交出来。列清单是最省事的处理方式。
二、逾期赔付:看四处,不看「有没有写」
合同里出现「逾期按日赔付」并不罕见,真正决定这条有没有牙齿的是四个细节。
起算点。工期从哪天开始数?从合同签订日算最常见,也最不公平——付款、访谈、等甲方素材、等第三方接口审批,这些时间都吃工期。合理写法是自需求确认书双方签字之日起算,同时把甲方侧配合义务的时限写进去:素材 5 个工作日内提供、反馈 3 个工作日内给出,逾期则工期顺延。
按日费率。写百分比还是固定金额都行,关键是挂住合同额。费率太低,拖一个月赔的钱不够一个月的房租,等于没有约束。
上限。赔付上限最容易被忽略。写成「不超过合同总额的 10%」,看着合理,但对一个延误导致错过销售旺季的项目,10% 覆盖不了损失。
解除权。这一项比日赔付更有威慑力:延误超过约定天数(比如 30 天),甲方有权解除合同并要求退还已付款项。有解除权,乙方才会认真评估自己排不排得过来。
《民法典》第 585 条的规则是,约定违约金过分高于实际损失,法院可以根据当事人请求予以减少。所以把违约金写成天文数字没有意义,要的是双方都认、且真能扣得下来的区间。
【待核实:违约金上限在各地司法实践中的具体认定尺度,影响条款上限怎么设】
三、维护期:起算点和范围,比长度重要
「免费维护 3 个月」单独看是没有意义的,它没说从哪天起算,也没说维护什么。
起算点有三种常见写法:合同签订日、系统上线日、验收签字日。从签订日算是最常见的手法,开发周期两个月的项目,实际免费维护只剩一个月。从上线日算听起来好一点,但上线时间可以被乙方操控,把没做完的系统推上线,维护期就开始跑了。验收签字日最清楚:验收单签完当天起算,双方都有明确锚点。
维护范围要分四类写:缺陷修复(交付物自身的 bug)、环境维护(服务器、证书、依赖升级、被攻击后的恢复)、适配变更(第三方接口改版、平台规则调整)、新需求。前两类通常含在免费维护里,第三类看约定,第四类一律走变更流程。这四类不分开写,「维护」就变成各说各话的词。
响应时限要分级。业务完全阻断、主要流程不可用、个别功能异常,处理优先级完全不同。7×24 小时响应指受理工单的时间,不是修复完成的时间,这两个概念混在一起最容易起争议。可执行的写法是分级定义加两组时限:受理时限、恢复时限,并写明计时起点是工单在系统里提交的时间,不是双方口头沟通的时间。
四、变更:没有冻结点,工期就是活的
变更条款写不好,前面三条全部失效。项目拖期十有八九不是开发慢,是需求一直在动。
冻结点要设两个。原型或交互稿确认时签字,界面结构冻结;UAT 开始时功能范围冻结,之后只修 bug 不加功能。这两个点不设,开发永远在追一个移动的目标,工期估算失效,赔付条款也就无从判定。
计价方式提前定。按人天最简单,前提是人天单价写进合同、变更单上写清人天数和工作内容。按功能点更精细但容易吵,适合需求颗粒度已经清楚的二期项目。
变更单要有固定模板:变更内容、影响模块、增加工时、工期影响、是否额外费用、双方签字。口头答应、聊天里说「顺手加一下」,最后都会变成争议。
再加一条阈值:变更累计金额超过合同额一定比例(常见 15%~20%)时,触发一次完整的范围复核,重新评估剩余工期与总价。这条能挡住「小改动累积成大项目」的局面,也能让甲方在预算上早点看出趋势。
五、数据安全:归属、权限、退出
这一条在中小企业合同里经常整段缺席,出问题时才发现没有依据。
归属要一句话写死:业务数据、日志与衍生数据、账号资产归甲方所有,乙方仅在被授权范围内处理。注意「衍生数据」——埋点、报表、日志容易被默认成乙方的东西。
权限分层。生产数据库访问应当是审批制:谁能看、看多久、看完留痕。涉及个人信息的部分做脱敏,测试环境不允许直接使用生产数据。这条不写,测试库里躺着真实手机号是常态。
退出机制比防护措施更容易漏。合同结束时四项:账号权限回收清单、密钥与证书交接、数据导出格式与时限、乙方侧副本销毁的书面确认。这四项不写,项目结束半年后在对方服务器上还能找到你的数据,是很常见的情况。
六、把两份报价放一起比
拿到两份报价,先别比总价,把上面五条摊开对照。
| 条款 | 含糊写法 | 可执行写法 | 风险落在谁身上 |
|---|---|---|---|
| 源码 | 交付源代码 | 全量仓库含提交历史、构建脚本、资产清单过户 | 甲方,接手成本不可预估 |
| 逾期 | 逾期赔付 | 需求确认日起算,按日费率,上限加解除权 | 甲方,拖期无法止损 |
| 维护 | 免费维护 3 个月 | 验收签字日起算,四类范围分开,受理与恢复时限分开 | 双方,扯皮成本高 |
| 变更 | 需求变更另行协商 | 人天单价入合同、变更单模板、两个冻结点、累计阈值复核 | 甲方,预算失控 |
| 数据 | 保障数据安全 | 归属、权限分层、脱敏、退出销毁 | 甲方,合规风险 |
条款写细的那家报价通常高一些。差的那部分钱,本质是把风险买断。条款干净的报价往往包含更长的需求梳理期和更完整的测试与文档工作,这两块最容易被省,也最容易在交付阶段暴露。
还有一个常被忽略的对比项:签约主体。报价方与实际开发方是不是同一个主体,有没有转包。转包在定制项目里不算少见,条款写得再细,实际执行的是另一拨人的话,追责链条会变长。合同里加一句「未经甲方书面同意不得转包分包」,成本很低。
七、一句话的判断方法
看一家定制团队靠不靠谱,不用听它讲流程,直接要它把这五条写成条款发过来。愿意逐条落到纸面上的,交付管理一般不会太差;每条都回「到时候再说」的,项目后半程大概率要花双倍精力去救。
万枫科技把这五条作为合同附件,源代码全部交付、逾期赔付、3 个月免费维护写在条款里而不是宣传页上。这类承诺写进合同才有约束力,留在页面上只是话术。
条款之外有个没解决的问题:赔付再严,也补不回错过旺季的损失。所以选团队还得看它手上同时有几个项目,上一个项目的验收单愿不愿意给你看。