很多软件项目签合同时,只写了开发哪些功能、多少钱、什么时候完成。
等系统快做完了,双方才开始讨论:源码是不是也要给?系统为什么不能直接放到客户自己的服务器?上线以后有问题是不是都要免费改?
这些看起来像项目细节,实际上直接决定软件由谁控制、运行环境由谁负责,以及开发方后续还要承担多少工作。
所以,一份完整的软件开发合同,除了功能、价格和工期,还必须把源码交付、系统部署和售后范围写清楚。

一、付了开发费,不代表默认交付全部源码
很多客户会认为,既然自己付钱开发了系统,源码自然应该全部交付。但在实际合作中,源码是否交付,要根据双方约定的交付模式确定。
1. 系统运行在开发方服务器
开发方负责服务器、部署环境和系统维护,客户通过账号或域名使用系统。这种方式更接近 SaaS 服务或软件使用授权,客户购买的通常是系统使用权和约定范围内的服务,并不默认包含源码。
2. 系统部署到客户自己的服务器
开发方将编译、打包后的系统部署到客户服务器,由客户承担服务器、域名、备案和相关费用。客户拥有自己的运行环境,但“部署到客户服务器”和“交付完整源码”仍然是两件不同的事情。
3. 完整源码交付
开发方在项目验收并结清款项后,按照合同交付前端代码、后端代码、数据库脚本、部署说明等资料。源码交付后,客户通常可以自行修改、重新部署或交给其他团队维护,因此价格和责任范围往往也会更高。

合同中至少应写清楚以下内容:
• 是否交付源码;
• 交付哪些源码和资料;
• 是否包含数据库脚本、部署文档、接口文档;
• 交付时间是在测试阶段、验收阶段,还是尾款结清后;
• 源码交付后,后续维护责任如何划分。
否则,即使合同里出现了“系统开发”“软件定制”这样的字样,后续仍可能因为源码是否交付、交付到什么程度而产生争议。
二、系统部署在哪里,决定后续责任由谁承担
软件做好以后,还要部署到服务器上才能正式运行。很多合同只写“上线”“交付使用”,却没有说清楚系统部署在哪里。
如果系统部署在开发方服务器上,开发方通常需要持续维护服务器、运行环境、安全配置、备份和访问稳定性。客户使用系统,但不一定掌握服务器管理权限。
如果系统部署在客户自己的服务器上,客户应当提供服务器、域名、备案、短信接口、支付接口等必要资源,并承担相应费用。开发方负责按照合同约定进行部署和技术配置,但服务器续费、安全策略、第三方账号管理等事项,就需要在合同中另行明确。
合同中建议至少写清楚:
• 系统部署在谁的服务器;
• 服务器、域名、备案、SSL 证书由谁购买和维护;
• 部署环境由谁提供;
• 上线所需第三方账号由谁注册、认证和付费;
• 项目验收后,服务器迁移或重新部署是否另行收费。
尤其是涉及微信支付、短信服务、地图接口、对象存储、云服务器等第三方服务时,合同应说明这些费用不包含在软件开发费中,除非双方另有明确约定。
三、售后服务不是无限免费修改
软件项目上线以后,客户通常会关心售后问题。但“售后”两个字本身非常模糊,必须拆开写。
合理的软件售后通常可以包含:
• 原需求范围内的 Bug 修复;
• 系统运行异常排查;
• 基础使用指导;
• 小范围配置调整;
• 合同约定期限内的技术支持。
以下内容通常不属于免费售后:
• 新增功能;
• 业务流程重新设计;
• 页面风格大幅调整;
• 第三方平台规则变化导致的改造;
• 服务器迁移;
• 客户自行修改源码或环境造成的问题。

合同不能只写“免费售后六个月”,还应说明这六个月具体服务什么、通过什么渠道反馈、多久响应,以及哪些情况需要另行报价。
例如可以约定:项目验收后提供六个月原需求范围内的 Bug 修复服务。新增功能、业务流程调整、第三方平台规则变化、服务器迁移及非开发方原因导致的问题,不属于免费售后范围,双方另行评估费用和周期。
四、付款节点要和交付节点对应
源码、部署和售后写清楚以后,还应与付款节点对应起来。
• 首付款到账后开始设计和开发;
• 阶段款到账后提供测试环境或阶段成果;
• 验收完成并结清尾款后进行正式部署;
• 需要源码交付的项目,在尾款结清后交付源码和部署资料;
• 正式验收后开始计算售后期限。
这样既能确保客户按节点获得约定的交付物,也能避免项目尚未结算,源码和全部控制权就已经提前移交。
写在最后
软件项目不是只完成几个页面和功能。从源码归属、服务器控制权,到上线后的维护责任,每一项都会影响项目价格和后续合作。
真正专业的软件合同,不是条款写得越复杂越好,而是让双方都清楚:项目结束时交付什么,系统运行在哪里,出现什么问题由谁处理。
这些边界在签约前说清楚,往往比项目结束后反复争论更节省成本。
夜雨聆风