
在外包项目里,怎么把里程碑和验收标准聊得明明白白?
说真的,每次启动一个IT研发外包项目,最让人头秃的其实不是代码本身,而是“扯皮”。尤其是项目快到一个节点,或者快结尾的时候,甲方和乙方就像两个说着不同方言的人,互相觉得对方在找茬。
“这个功能你们当初说要做啊!”
“我们做了啊,但没说要做到这种程度啊!”
“这玩意儿根本没法用,验收肯定过不了!”
“怎么没法用?点得开,跑得动,怎么就过不了?”
这种对话,是不是听着特别耳熟?为了避免这种心累的局面,我们在项目开始前,就得把里程碑(Milestones)和验收标准(Acceptance Criteria)像签婚前协议一样,一条条掰扯清楚。别怕麻烦,前期多费点口水,后期就能少流很多眼泪。
今天咱们就抛开那些教科书式的废话,聊聊在实战中,到底怎么把这俩东西定得既科学,又能让双方都舒舒服服地签字画押。
一、 先搞懂本质:里程碑和验收标准不是一回事儿
很多人容易把这两个概念搞混。简单粗暴点说:
- 里程碑(Milestones): 是时间轴上的大旗子。它告诉你“我们现在走到哪了”。比如“完成UI设计”、“完成核心支付模块开发”。它主要用来把控进度。
- 验收标准(Acceptance Criteria): 是插在旗子旁边的小纸条。它写明了“这面旗子插得对不对,合不合格”。比如“支付模块必须支持微信和支付宝,且响应时间小于2秒”。它主要用来把控质量。

如果只有里程碑,没有验收标准,那就是耍流氓。你按期交付了一个半成品,对方也没法说你没干活,但东西没法用,这就是最大的坑。
二、 怎么设定一个“有血有肉”的里程碑?
设定里程碑最忌讳的就是“拍脑袋”。比如老板说“三个月后上线”,然后你就把这当成了唯一的里程碑。这不叫里程碑,这叫“死线”(Deadline)。
一个好的里程碑设定,应该遵循“切香肠”原则,把一个大项目切成若干个大小适中、看得见摸得着的小阶段。
1. 拒绝“大而全”,拥抱“小而美”
别把里程碑定得像“完成整个系统开发”。这种里程碑毫无意义,因为它中间发生了什么你完全不知道。
你应该怎么切?
- 按业务模块切: 比如用户中心模块、订单中心模块、后台管理模块。
- 按软件生命周期切: 需求确认、原型设计、UI设计、前端开发、后端开发、联调测试、上线部署。

举个例子,做一个电商小程序。
错误的里程碑:
1. 项目启动
2. 项目开发中
3. 项目测试
4. 项目上线
正确的里程碑(颗粒度适中):
1. M1:需求规格说明书(PRD)评审通过 —— 双方对要做什么达成一致,冻结需求范围。
2. M2:高保真UI设计稿确认 —— 视觉风格确定,交互流程走通。
3. M3:核心交易流程(MVP)开发完成 —— 包含商品浏览、下单、支付(先接通模拟支付)。
4. M4:后台管理功能联调通过 —— 管理员能查单、发货。
5. M5:UAT(用户验收测试)环境部署 —— 客户可以在这个环境里真实操作。
6. M6:生产环境上线 —— 正式发布。
你看,这样分下来,每个里程碑都是一个独立的、可交付的成果。到了M2,你至少能拿到一套看着像样的设计图;到了M3,你至少能跑通一个完整的购买流程。这对甲乙双方都是巨大的心理安慰。
2. 里程碑必须是“可交付物”(Deliverables)
什么叫可交付物?就是你能把一个东西打包发给对方,对方能接收并查看的。
比如“完成编码”不是可交付物,因为对方看不到代码跑起来的效果。但“部署到测试环境,并提供测试账号和链接”就是可交付物。
在定里程碑时,一定要问自己:到了这个节点,我能给甲方爸爸看什么?
- 文档?(PRD、API文档、测试报告)
- 设计稿?(Sketch、Figma文件,或者导出的PNG)
- 可运行的软件?(测试环境URL、安装包APK)
如果答不上来,说明这个里程碑定义得有问题。
3. 给里程碑留点“喘息期”
计划永远赶不上变化。开发过程中总会遇到坑:第三方接口挂了、服务器炸了、某个技术难点卡住了。
所以在排期的时候,别把每个里程碑卡得太死。如果你的开发周期是10天,最好把里程碑定在第12天。多出来的2天不是给你摸鱼的,是用来应对意外的缓冲(Buffer)。
如果每个里程碑都紧巴巴的,一旦延期,后面的所有计划都会像多米诺骨牌一样全倒。到时候又是无休止的争吵和加班。
三、 验收标准:魔鬼藏在细节里
这是最容易扯皮的地方,也是我们今天要重点聊的。验收标准写得好,能帮你省下一半的沟通成本。
好的验收标准,必须满足一个核心原则:SMART原则(具体的、可衡量的、可达到的、相关的、有通过/失败标准的)。
但在实际操作中,我们得把它翻译成“人话”。
1. 功能性验收:别只说“好用”
甲方最喜欢说的一句话是:“我要一个好用的登录功能。”
啥叫好用?100个人有100个标准。作为乙方,你得把“好用”拆解成具体的动作。
比如针对“登录功能”,我们可以这样写验收标准:
- 输入框校验:
- 手机号格式错误时,提示“请输入正确的手机号”。(具体提示文案)
- 密码少于6位时,登录按钮置灰,并提示“密码长度不能少于6位”。
- 交互逻辑:
- 点击登录后,若账号密码正确,页面跳转至首页。
- 点击登录后,若账号密码错误,提示“账号或密码错误”,且不泄露具体是哪错了(安全考虑)。
- 连续输错5次密码,锁定账号30分钟。
- 异常处理:
- 断网状态下点击登录,提示“网络异常,请检查连接”。
- 服务器超时(>5秒),提示“请求超时,请重试”。
你看,这样一写,谁也没法抵赖。做得到就是做得到,做不到就是做不到。
2. 非功能性验收:性能、安全与兼容性
很多外包项目最后烂尾,是因为忽略了非功能性需求。甲方会说:“你这系统怎么一并发100人就崩了?” 乙方委屈:“你又没说要支持100人并发。”
所以,以下这些点,必须在验收标准里白纸黑字写清楚,尤其是涉及到钱的、涉及到数据量的项目。
| 维度 | 验收标准示例(参考) | 备注 |
|---|---|---|
| 性能 | 核心页面(如首页、列表页)首屏加载时间不超过1.5秒(在4G网络环境下)。 | 不要只说“快”,要给具体数字和测试环境。 |
| 并发 | 系统需支持500个用户同时在线,且接口平均响应时间小于300ms。 | 如果甲方预算有限,别承诺太高,否则压测过不去。 |
| 兼容性 | Web端兼容 Chrome 80+, Firefox 75+, Safari 13+ 最新版本;移动端兼容 iOS 12+ 和 Android 8.0+。 | 明确支持哪些版本,不支持的版本不要承诺修复Bug。 |
| 安全性 | 用户密码需加密存储(如MD5加盐或BCrypt);敏感接口(如修改密码)需校验Token;防止SQL注入和XSS攻击。 | 这是底线,特别是涉及用户隐私数据的。 |
| Bug修复率 | 严重(Critical)和主要(Major)Bug必须100%修复;次要(Minor)Bug修复率需达到95%以上。 | 允许有极少量的轻微瑕疵,不影响主流程。 |
3. 用“场景化”来描述验收标准(Gherkin语法)
如果你觉得写表格太死板,可以试试用“场景化”的描述方式,这在敏捷开发里很常用,叫Gherkin语法(Given-When-Then)。这种方式读起来像讲故事,非常直观。
场景: 用户下单时余额不足
- Given(假设): 用户A的账户余额为50元,购物车里有一件商品价格为100元。
- When(当): 用户A点击“提交订单”按钮。
- Then(那么): 系统弹出提示“余额不足,请先充值”,且订单状态保持为“未生成”。
这种写法特别适合逻辑复杂的业务流程。它强迫你把所有前置条件、操作动作、预期结果都列出来。如果开发人员按照这个逻辑写代码,测试人员按照这个逻辑测试,基本不会出现“理解偏差”。
四、 避坑指南:那些年我们踩过的坑
理论谁都会讲,但实战中总有妖风。这里有几个我亲身经历过或者见过的坑,分享出来给大家避雷。
1. “需求变更”的陷阱
项目进行到一半,甲方突然说:“我觉得这里加个功能会更好。”
这时候,如果这个功能影响了当前的里程碑,一定要停下来。不要为了讨好客户就一口答应“好好好,马上做”。你要做的是:
- 评估这个变更对当前里程碑的影响(时间、成本、技术风险)。
- 明确告知客户:如果要做这个,原定的里程碑日期会推迟X天,或者需要增加预算Y元。
- 如果客户坚持要加,那就走变更控制流程(Change Request),签字确认。
记住,口头承诺在IT项目里等于自杀。
2. “我以为你懂”的默契
有时候,乙方觉得某个功能很简单,就不写详细的验收标准。比如“做个导出Excel功能”。
结果交付时,甲方炸毛了:“我要的是带表头、带筛选、带数据透视的,你怎么就给我导出个纯数据表格?”
乙方也委屈:“你也没说要带表头啊……”
对于每一个看似简单的功能,都要多问一句:“具体长什么样?有没有参考案例?” 哪怕是画个草图,也比凭空想象强。
3. 验收阶段的“拖延症”
有时候乙方按时交付了,验收标准也都符合,但甲方就是拖着不验收。理由可能是“老板出差了”、“最近太忙没空测”。
这在合同里其实是有风险的。通常合同里会约定:如果乙方交付后,甲方在X个工作日内(通常是3-5天)不提出书面异议,视为验收通过。
所以在定里程碑的时候,最好把验收动作也定死:“乙方交付后,甲方需在3个工作日内组织验收,并出具书面验收报告(邮件确认也算)。” 这样能逼着甲方及时反馈,避免项目无限期挂起。
五、 让工具成为你的“公证人”
光靠嘴说和Word文档,有时候还是不够。我们需要工具来记录这些约定,让它成为双方的“公证人”。
- 项目管理工具(Jira/Trello/飞书): 每一个里程碑对应一个大的Epic或者Sprint。每一个验收标准对应一个具体的Task或者User Story。所有的讨论、附件、修改记录都在这里留痕。
- 原型工具(Axure/Figma): 很多验收标准其实藏在交互说明里。比如“点击这个按钮,弹窗从右侧滑入”。把这些交互说明直接写在原型旁边,比写文档更直观。
- 在线文档(Confluence/语雀): 把最终确认的PRD和验收标准沉淀下来,形成一个双方认可的“知识库”。以后扯皮的时候,直接把链接甩出来:“看,这是当时我们共同确认的文档。”
六、 最后的碎碎念
设定里程碑和验收标准,本质上不是为了在出问题时追究谁的责任,而是为了降低沟通成本,确保项目能顺顺利利地交付。
它需要乙方有经验,能把模糊的需求拆解成具体的任务;也需要甲方有配合度,愿意花时间把这些细节确认清楚。
最好的状态是,双方坐下来,对着屏幕,一条一条过:“这个功能,输入这个,点击那个,出来这个结果,对吧?” “对。” “好,写下来,签字。”
虽然过程可能有点枯燥,甚至有点较真,但相信我,当你看着项目按期上线,没有扯皮,没有返工,那种成就感,比写出什么牛逼的代码都要爽得多。
下次项目启动会,不妨试试把这些方法带上桌,看看对方的反应。如果对方也觉得这样很清晰,那恭喜你,这个项目大概率能成。
员工保险体检
