价值十万的“大厂高阶产品架构师+AI Agent协同”内部培训课。
融合传统大厂严谨PRD规范与最前沿AI Agent(Cursor/Cline)开发协议。
🚀 致入门PM:停止写“散文式”PRD!AI时代高阶需求逻辑闭环与Agent落地终极指南
前言:认清现实,你的PRD正在被研发和AI嘲笑 很多刚入门的产品经理,写PRD就像在写“散文”或“小说”:“用户点击按钮,系统判断一下,如果不对就提示错误,然后跳转到下一页……” 错!大错特错! 在研发眼里,这叫“天书”,充满了未定义的边界和黑洞;在 AI Agent(如 Cursor、Cline、Devin)眼里,这叫“乱码”,它根本不知道你的“判断一下”到底是写 If-Else 还是查数据库。 PRD的本质,不是功能说明书,而是「多边契约」与「机器可读的编译脚本」。 今天,我将用10年老兵的经验,从底层思维→图表降维→AI协议(Gherkin)→标准模板→全链路实操,逐层扒光你的“逻辑漏洞”,教你写出一份研发无法反驳、AI直接生成代码的终极PRD。
🩸 第一篇:认知重塑——为什么你写的PRD全是漏洞?
新手PM的逻辑漏洞,90%不是因为“没画流程图”,而是缺乏“防御性编程”思维。你只想着用户怎么“乖乖听话”(Happy Path),却忽略了真实世界的残酷。
1.1 新手PM的“五大绝症”
1.2 高阶PM的“防御性思维”(核心内功)
在你动笔写任何一个功能前,脑子里必须条件反射般闪过这三个系统级防御机制:
- 幂等性(防重):用户网卡了,狂点10次“提交订单”,系统是扣10次钱,还是只认第1次?(PRD必须规定:前端按钮防抖置灰+后端流水号唯一校验)。
- 并发控制(防覆盖):两个管理员同时编辑同一篇文章,谁保存听谁的?(PRD必须规定:引入乐观锁,后保存者提示“数据已被修改,请刷新”)。
- 降级与熔断:调用的第三方实名认证接口挂了,主流程是直接白屏崩溃,还是允许“跳过/延后处理”?
🗡️ 第二篇:逻辑闭环的“四维手术刀”(告别低级漏洞)
不要再去背什么空洞的“五大维度”了,真正能落地的逻辑校验,只有以下四把手术刀。
维度一:边界锁死法(In/Out Scope)
任何需求开篇,必须用表格划定红线。
| In Scope (本期做) | 1. 手机号+验证码登录2. 密码错误5次锁定账号 | 核心MVP闭环 |
| Out of Scope (绝不做) | 1. 微信/苹果第三方授权登录2. 扫码登录3. 多语言适配 | 统一放到二期,研发敢做直接打回 |
维度二:状态流转矩阵表(抛弃蜘蛛网状态图)
专家警告:当实体状态超过5个,Mermaid的State图就会变成一团乱麻,AI读不懂,研发看不清。高阶PM只用“状态流转矩阵表”!
以“企业级审批工单”为例,这才是真正的无歧义契约:
| 草稿 | 变为[待审批] | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 |
| 待审批 | ❌ 不允许 | 变为[已通过] | 变为[已驳回] | 变为[已撤回] | 变为[已超时]+催办 |
| 已驳回 | 变为[待审批] | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 |
| 已通过 | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 |
(注:表格中的 ❌ 和 触发的系统动作,就是 AI Agent 生成代码时最需要的 If-Else 逻辑边界!研发看到这张表,绝对对你心服口服。)
维度三:异常兜底穷举法(5大异常场景)
写功能时,强制自己填空以下5个异常场景:
维度四:RBAC权限矩阵(防越权漏洞)
| 超级管理员 | 全部 | 全部 | 全部(含硬删除) | 系统内置,不可删除 |
| 部门主管 | 本部门数据 | 仅本部门 | 新增/编辑/软删除 | 跨部门数据自动隐藏 |
| 普通员工 | 仅个人数据 | 仅个人 | 新增/查看 | 无编辑和删除权限 |
📊 第三篇:图表降维打击——什么时候画什么图?
很多新手为了显得专业,画了一堆图,结果全是错的。结合 Mermaid(目前对 AI 和 Markdown 最友好的代码绘图工具),你必须记住以下 “PM 绘图三定律”。
1. 业务流转:跨角色泳道图(Flowchart)
用途:梳理跨角色、跨系统的业务主干,防止流程断链。 Mermaid 高阶代码(直接复制到语雀/飞书/Markdown):
#mermaid-svg-CmIFmZ74lmtxdg0I{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CmIFmZ74lmtxdg0I .error-icon{fill:#552222;}#mermaid-svg-CmIFmZ74lmtxdg0I .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CmIFmZ74lmtxdg0I .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CmIFmZ74lmtxdg0I .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CmIFmZ74lmtxdg0I .marker.cross{stroke:#333333;}#mermaid-svg-CmIFmZ74lmtxdg0I svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CmIFmZ74lmtxdg0I p{margin:0;}#mermaid-svg-CmIFmZ74lmtxdg0I .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster-label text{fill:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster-label span{color:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster-label span p{background-color:transparent;}#mermaid-svg-CmIFmZ74lmtxdg0I .label text,#mermaid-svg-CmIFmZ74lmtxdg0I span{fill:#333;color:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I .node rect,#mermaid-svg-CmIFmZ74lmtxdg0I .node circle,#mermaid-svg-CmIFmZ74lmtxdg0I .node ellipse,#mermaid-svg-CmIFmZ74lmtxdg0I .node polygon,#mermaid-svg-CmIFmZ74lmtxdg0I .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CmIFmZ74lmtxdg0I .rough-node .label text,#mermaid-svg-CmIFmZ74lmtxdg0I .node .label text,#mermaid-svg-CmIFmZ74lmtxdg0I .image-shape .label,#mermaid-svg-CmIFmZ74lmtxdg0I .icon-shape .label{text-anchor:middle;}#mermaid-svg-CmIFmZ74lmtxdg0I .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CmIFmZ74lmtxdg0I .rough-node .label,#mermaid-svg-CmIFmZ74lmtxdg0I .node .label,#mermaid-svg-CmIFmZ74lmtxdg0I .image-shape .label,#mermaid-svg-CmIFmZ74lmtxdg0I .icon-shape .label{text-align:center;}#mermaid-svg-CmIFmZ74lmtxdg0I .node.clickable{cursor:pointer;}#mermaid-svg-CmIFmZ74lmtxdg0I .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CmIFmZ74lmtxdg0I .arrowheadPath{fill:#333333;}#mermaid-svg-CmIFmZ74lmtxdg0I .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CmIFmZ74lmtxdg0I .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CmIFmZ74lmtxdg0I .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CmIFmZ74lmtxdg0I .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CmIFmZ74lmtxdg0I .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CmIFmZ74lmtxdg0I .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster text{fill:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I .cluster span{color:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CmIFmZ74lmtxdg0I .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CmIFmZ74lmtxdg0I rect.text{fill:none;stroke-width:0;}#mermaid-svg-CmIFmZ74lmtxdg0I .icon-shape,#mermaid-svg-CmIFmZ74lmtxdg0I .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CmIFmZ74lmtxdg0I .icon-shape p,#mermaid-svg-CmIFmZ74lmtxdg0I .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CmIFmZ74lmtxdg0I .icon-shape .label rect,#mermaid-svg-CmIFmZ74lmtxdg0I .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CmIFmZ74lmtxdg0I .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CmIFmZ74lmtxdg0I .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CmIFmZ74lmtxdg0I :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
财务系统
业务网关
用户端
凭证合规
凭证违规
通过
驳回
成功
失败
发起退款申请
上传凭证
创建退款工单
拦截并提示重传
财务人工审核
调用微信退款API
更新工单为已拒绝
通知用户退款到账
进入异常重试队列
2. 系统交互:业务时序图(Sequence Diagram)
⚠️ 专家警告:绝对不要画“前端->后端->MySQL”的技术底层时序图!那是架构师的活! PM只画跨端、跨系统、跨第三方的业务时序图,界定“谁负责提供什么数据,谁负责承担什么风险”。
微信支付API
订单系统
业务网关
用户终端
微信支付API
订单系统
业务网关
用户终端
#mermaid-svg-sn39JzhLabNjXS6z{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sn39JzhLabNjXS6z .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sn39JzhLabNjXS6z .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sn39JzhLabNjXS6z .error-icon{fill:#552222;}#mermaid-svg-sn39JzhLabNjXS6z .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sn39JzhLabNjXS6z .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sn39JzhLabNjXS6z .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sn39JzhLabNjXS6z .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sn39JzhLabNjXS6z .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sn39JzhLabNjXS6z .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sn39JzhLabNjXS6z .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sn39JzhLabNjXS6z .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sn39JzhLabNjXS6z .marker.cross{stroke:#333333;}#mermaid-svg-sn39JzhLabNjXS6z svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sn39JzhLabNjXS6z p{margin:0;}#mermaid-svg-sn39JzhLabNjXS6z .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-sn39JzhLabNjXS6z text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-sn39JzhLabNjXS6z .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-sn39JzhLabNjXS6z .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-sn39JzhLabNjXS6z .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-sn39JzhLabNjXS6z .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-sn39JzhLabNjXS6z #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-sn39JzhLabNjXS6z .sequenceNumber{fill:white;}#mermaid-svg-sn39JzhLabNjXS6z #sequencenumber{fill:#333;}#mermaid-svg-sn39JzhLabNjXS6z #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-sn39JzhLabNjXS6z .messageText{fill:#333;stroke:none;}#mermaid-svg-sn39JzhLabNjXS6z .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-sn39JzhLabNjXS6z .labelText,#mermaid-svg-sn39JzhLabNjXS6z .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-sn39JzhLabNjXS6z .loopText,#mermaid-svg-sn39JzhLabNjXS6z .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-sn39JzhLabNjXS6z .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-sn39JzhLabNjXS6z .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-sn39JzhLabNjXS6z .noteText,#mermaid-svg-sn39JzhLabNjXS6z .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-sn39JzhLabNjXS6z .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-sn39JzhLabNjXS6z .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-sn39JzhLabNjXS6z .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-sn39JzhLabNjXS6z .actorPopupMenu{position:absolute;}#mermaid-svg-sn39JzhLabNjXS6z .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-sn39JzhLabNjXS6z .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-sn39JzhLabNjXS6z .actor-man circle,#mermaid-svg-sn39JzhLabNjXS6z line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-sn39JzhLabNjXS6z :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
异步回调阶段
1. 发起支付请求(订单号, 金额)
2. 校验库存并锁定(防超卖)
3. 返回锁定成功
4. 请求预支付参数
5. 返回支付凭证(PaySign)
6. 唤起收银台
7. 异步通知支付结果
8. 更新订单状态为已支付
3. 数据字典:ER图与字段规则表
不要只写“输入框”,必须用表格锁死数据格式,这是前端校验和后端建表的唯一依据。
| 手机号 | phone | String(11) | 是 | ^1[3-9]\\d{9}$ | 无 | 需做唯一性校验 |
| 昵称 | nickname | String(20) | 否 | 禁止包含 < > & 等特殊字符 | 用户ID | 超长截断… |
🤖 第四篇:核武器降临——BDD与Gherkin语法(AI Agent秒懂协议)
这是整篇文章最值钱、最能拉开你与普通人差距的部分! 在 AI Agent(Cursor/Cline)时代,大模型有“上下文遗忘”和“幻觉”问题。你丢几万字散文给它,它写出来的代码绝对跑偏。 高阶PM必须掌握行为驱动开发(BDD)的标准语法——Gherkin。使用 Given (前提) – When (动作) – Then (结果) 的结构,你的 PRD 将直接变成 AI 可以执行的自动化测试脚本。
实战:用 Gherkin 定义“购物车结算”逻辑
把这段代码直接贴进你的 Markdown PRD 中,然后丢给 Cursor,它会惊呼“你太懂我了”:
Feature: 购物车结算逻辑闭环与并发控制
Scenario: 正常结算且库存充足
Given 用户购物车中有商品A (数量: 2, 单价: 100)
And 商品A的当前系统库存为 10
When 用户点击"去结算"并成功支付
Then 订单状态变更为"待发货"
And 商品A的系统库存扣减为 8
And 购物车清空商品A
Scenario: 结算时库存不足 (并发兜底)
Given 用户购物车中有商品A (数量: 2)
And 商品A的当前系统库存为 1 (被其他用户抢先购买)
When 用户点击"去结算"
Then 系统拦截支付请求
And 弹出强提醒"商品A库存不足,已为您自动移除"
And 页面跳转回购物车,并刷新商品A状态为"失效"
Scenario: 网络超时导致的状态未知 (幂等与重试)
Given 用户已提交订单并唤起支付
When 支付网关回调超时 (超过 5 秒未收到成功信号)
Then 订单状态保持为"支付中" (绝不变更为失败)
And 触发后台定时任务,主动轮询支付网关查询真实结果
为什么这很牛?
📝 第五篇:标准严谨PRD架构模板(直接Copy套用)
抛弃Word,拥抱 Markdown + Mermaid + 本地代码库。你的标准PRD目录必须是这样的:
1. 文档元数据与术语字典
- 版本记录:V1.0 -> V1.1 修改了什么?影响了哪些接口?
- 术语字典:统一语言。比如“封禁”和“黑名单”在全文必须统一叫“账号风控限制”。
2. 全局通用规则(写一次,全文复用)
- 全局交互:所有列表加载必须显示骨架屏(Skeleton);所有成功提示用 Toast(2秒消失),所有失败提示用 Dialog(需手动关闭)。
- 全局报错:HTTP 401 统一跳转登录页;HTTP 500 统一提示“服务器开小差,请稍后再试”。
- 时间格式:全局统一为 YYYY-MM-DD HH:mm:ss。
3. 核心业务模块设计(单功能标准模板)
以“文件上传与解析”为例:
【功能名称】 Excel批量导入用户数据
- 文件超过5MB:前端直接拦截,提示“文件过大”。
- 解析中途服务器崩溃:记录失败日志,页面提示“导入失败,请联系管理员查看日志”。
- 包含重复手机号:跳过重复行,在结果报告中列出“第X行手机号重复”。
4. 非功能需求(决定软件生死)
- 性能:列表接口响应时间 < 500ms;导出10万条数据支持异步任务,不阻塞主线程。
- 安全:所有敏感数据(密码、身份证)脱敏展示(如 138****1234);防 SQL 注入。
- 埋点:统计“导入按钮”的点击率、导入失败的原因分布。
5. 验收标准(Gherkin 脚本)
(直接贴入第四篇写的 Gherkin 代码)
🛠️ 第六篇:AI Agent 协同开发 SOP(Cursor/Cline落地指南)
在 AI 时代,产品经理不再只是“画图仔”,而是 “规则定义者+AI调度员”。以下是利用 AI Agent 开发完整成品软件的标准 SOP:
步骤 1:环境搭建(本地代码库化)
不要用微信传Word文档给AI! 建立一个本地的 Markdown 文件夹:
- PRD.md (业务背景、边界、数据字典)
- flow.mmd (Mermaid 流程图)
- test.feature (Gherkin 验收脚本)
步骤 2:喂给 AI 的终极 Prompt 模板
打开 Cursor 或 Windsurf,将上述文件作为 @Context 喂给 AI,使用以下高阶 Prompt:
# Role
你是一个拥有10年经验的资深全栈架构师兼测试专家。
# Context
请仔细阅读 @PRD.md 中的业务规则、数据字典,以及 @test.feature 中的 Gherkin 验收脚本。
# Task
1. 请使用 Python (FastAPI) + Vue3 编写“Excel批量导入用户”的前后端代码。
2. 核心要求:
– 必须严格遵循 @PRD.md 中的【异常兜底】规则(如文件过大、重复手机号处理)。
– 必须实现并发控制,防止多个管理员同时导入导致的数据覆盖。
– 代码结构必须符合 Clean Architecture。
3. 请根据 @test.feature 中的 Scenario,自动生成对应的 Pytest 自动化测试用例,并确保代码能 100% 跑通这些测试。
# Output
先输出你的技术方案和防重/并发设计思路,确认无误后再输出核心代码。
步骤 3:PM 的底线与验收
- 底线:绝对不能让 AI 决定业务规则!如果 AI 问你“库存不足要不要允许超卖?”,你必须依据 PRD 给出明确指令,而不是让 AI 自己猜。
- 验收:不要只看界面,直接运行 AI 生成的自动化测试脚本。全绿(Pass),才算需求闭环!
🛡️ 第七篇:全栈工具栈与避坑 Checklist
7.1 现代 PM 神兵利器
- 文档与知识库:Obsidian / Notion / 飞书文档(原生支持 Markdown 和 Mermaid,对 AI 抓取极其友好)。
- 图表绘制:Mermaid Live Editor(代码生成图表,随时修改) + Draw.io(处理极度复杂的跨部门泳道图)。
- 原型设计:Figma(配合 FigJam 做前期脑暴) + 墨刀/Axure(复杂交互)。
- AI 协同 IDE:Cursor / Windsurf(直接把 PRD 喂给 AI 写代码的终极利器)。
7.2 高阶 PM 避坑自查清单(Checklist)
每次提交 PRD 评审前,逐条打勾,少一个都不准开会:
- 是否明确了 In Scope 和 Out of Scope?
- 是否提供了状态流转矩阵表,而不是模糊的状态图?
- 是否穷举了网络超时、并发冲突、第三方宕机的兜底方案?
- 是否定义了所有输入框的正则校验、极限长度、特殊字符拦截规则?
- 是否提供了权限矩阵表,明确了越权访问的拦截提示?
- 是否将核心验收标准转化为了 Gherkin (Given-When-Then) 脚本?
- 是否定义了**空数据(缺省页)和加载态(骨架屏)**的UI表现?
🩸 老兵的最后忠告
作为入门 PM,你现在的迷茫,是因为你试图用 “文科生的散文思维” 去指挥 “理科生的机器”。
真正的严谨,不是写了几万字的废话文档,而是你的逻辑像数学公式和代码脚本一样,无懈可击,机器可编译。
把这篇万字长文吃透,用状态矩阵和 Gherkin 语法去重写你手头的第一个需求。当你看到 AI Agent 一次性跑出毫无 Bug、且完美符合你业务兜底逻辑的代码时,你会回来感谢我的。
去战斗吧,让行业看看什么是真正的 AI 时代高阶产品经理!

