Vibe Coding 的 MVP 垂直切片:用一条可交付路径约束生成范围
先生成整套页面、再补后端与测试,会留下大量无法验收的半成品。本文示范如何沿一个用户结果切穿界面、接口、数据和验证,并让每轮 AI 改动都可运行、可删除。
本文要点
- 主题聚焦:AI、Vibe Coding、DevOps
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
许多 AI 项目的第一周看起来进展惊人:几十个页面、完整侧栏、数据库表、API 目录都已生成。到第一次演示时,却发现上传页使用假数据、接口没接权限、表结构无法表达真实状态,测试只能验证组件渲染。这是“横向铺层”的结果:每层完成了很多,用户仍不能完成任何事情。
MVP 垂直切片从目标用户与主路径中截取一个最小结果,纵向穿过必要的交互、业务规则、数据持久化和验证。它不是把完整产品做得粗糙,也不是用 Mock 假装交付。Scrum Guide 对 Increment 的要求是可用且满足 Definition of Done;这里把这一原则具体化为 Vibe Coding 的任务边界。
先定义切片的输入和出口
以“把客户反馈 CSV 归成候选主题”为例,完整愿景可能包含登录、团队协作、自动同步、多语言、趋势图和分享。第一片只承诺:一个已授权用户上传规定列的 CSV;系统处理最多 100 行;用户看见每个候选主题及其原文依据;结果保存到当前项目;刷新后仍能打开。出口证据是一个可重放的导入样本、持久化结果页和对应测试回执。
用以下六问压缩切片:
- 没有哪一步,用户就拿不到核心结果?
- 哪个输入样本足以暴露最重要的业务风险?
- 本轮必须持久化什么,什么可在会话结束后丢弃?
- 出错时最小但诚实的恢复方式是什么?
- 哪条安全、权限或数据约束不能因“只是 MVP”而取消?
- 怎样从入口运行到出口并判断通过或失败?
回答后写 slice.md,包含入口条件、样例数据摘要、步骤、业务不变量、完成证据和 non-goals。关于问题价值仍未确认的内容留在假设与未知问题账本,不要伪装成实现任务。
按结果切,不按目录切
“先生成所有 React 页面”“先设计完整数据库”“先写全部 API”都是水平任务。垂直切片的实现序列更像这样:
- 用一个真实形状、已脱敏的 CSV fixture 固定输入边界;
- 建立只支持本切片的最小数据关系和约束;
- 写一个完成上传与处理的接口,并给成功、拒绝和失败响应示例;
- 做一条从选择文件到查看依据的交互;
- 加入重复上传、非法列、空结果和越权的关键测试;
- 从干净环境运行迁移、启动服务并重放主路径。
每一步都服务同一个结果。数据库不预建“也许以后会用”的通知、计费和组织层级;UI 不先生成尚无数据合同的统计卡;接口也不为了 REST 对称性补齐所有 CRUD。数据规则怎样落库由数据模型与业务不变量说明,接口的可观察行为由API 合同与请求响应示例固定。
切片小不等于跳过真实边界。若核心风险是模型输出不稳定,首片就必须保存输入摘要、模型版本和可追溯依据;若核心风险是隐私,就必须验证数据不进入未批准的供应商;若核心风险是多人并发修改,就不能用单用户内存对象掩盖。可以删功能,不能删掉决定方案是否成立的那条风险。
给 Agent 一次只发一个可验收改动
把整个切片交给 Agent 后要求先输出依赖顺序和文件范围,再按 checkpoint 执行。例如第一个 checkpoint 只建立 fixture、解析合同与失败测试;第二个建立持久化;第三个接通接口;第四个完成 UI。每次都查看 diff、运行当前门禁并更新切片状态,禁止一次生成全部再集中修错。
每个 checkpoint 的 Prompt 应包含“保持哪些已有行为”“允许修改哪些路径”“这一步不做什么”“运行哪些命令”“失败时报告什么”。Agent 若发现需要扩展数据模型或引入服务,先提交理由和对切片的影响,不自动继续。这样上下文中的决策数量保持有限,错误也容易定位和撤销。
临时实现要有明确身份。可替换的分类器、存储适配器或功能开关标注 owner、移除条件和期限,不能留一个永远为真的 isMvp 分支。Martin Fowler 对 feature toggle 的分类和生命周期提醒我们:开关会增加系统动态复杂度。只有需要控制暴露或可逆发布时才加,并测试开、关两种状态;普通未完成功能应留在分支外,而不是藏在永久开关后。
用“可演示”之外的证据验收
手工演示一次成功路径只能证明某次点击有效。切片验收包至少包括:冻结输入 fixture 及摘要;从入口到出口的自动化路径;关键错误和越权用例;数据库迁移与回滚说明;本轮改动 diff;依赖和配置变化;已知限制;下一片候选。所有结果必须绑定当前代码版本,旧截图不能证明新提交。
UI 状态矩阵确保加载、空、错误和权限分支没有被 happy path 掩盖;Definition of Done 与交付边界决定证据达到什么标准才可称完成。若切片只能在作者机器的预置数据库上运行,或者必须由作者口头解释哪个按钮别点,它仍是原型,不是可交付 Increment。
演示后只做三个决定:接受并选择下一片;基于新证据修改问题或主路径;停止并删除实验。不要因为已经生成许多代码就继续扩张。对 AI 生成物而言,删除一片失败尝试的成本很低,维护一个方向错误的“完整架构”才昂贵。
垂直切片让进度从文件数变成用户结果:每一轮都有人能从真实入口走到可信出口,且团队知道哪条风险已被验证。Vibe Coding 的速度优势因此落在缩短反馈周期,而不是提前生产未来可能用不到的层和页面。
Related