从功能集合,
到优雅系统。
系统级产品设计思维
把复杂的现实问题,变成少量清晰、稳定、可组合的概念。再用真实约束与使用证据,让设计一步步成立。
More structure.
而不是用更多功能掩盖问题。
选一条适合现在的阅读路线
不用一次读完。每章结束后,用自己的话复述,再勾选完成。阅读位置与学习完成度分别记录。
你要练的,不是把功能做多
从“我还应该加什么”,转向“哪些概念与规则,能让能力自然生长”。
为什么有的产品像一张不断膨胀的功能清单,有的产品却简洁、强大,而且越用越觉得顺手?本手册把你想学习的能力称为系统级产品设计思维:把复杂问题组织成清晰的概念、关系、状态与边界,再把它们翻译成用户能够理解的体验。
这不是一种神秘天赋,也不只是写 PRD、画原型或选择技术栈。它是一套可以练习的判断方法:识别什么值得解决,建立恰当模型,在约束下取舍,再通过真实使用修正判断。
把需求逐条变成页面
需要接入模型 → 账号页
需要控制调用 → API Key 页
需要看费用 → 账单页
需要失败切换 → 再加一个设置
能快速开始,但若没有进一步建模,复杂度容易藏在页面之间。
先找到变化背后的结构
谁在使用什么资源?
一次请求与一次尝试是什么关系?
用量事实与计费规则是否分开?
失败后哪些事实仍然成立?
不是拒绝功能清单,而是让功能建立在明确的结构上。
对象抽象与过程抽象,要一起使用
对象视角回答“系统里有什么,谁拥有什么责任”;过程视角回答“事情怎样发生,状态如何改变”。只列对象,系统会静止;只画流程,责任和数据归属容易模糊。这两种视角并不等同于必须选择面向对象或面向过程的编程语言风格。
同一条流程,应能映射到对象的状态变化;同一个对象,也应能在真实场景里找到存在理由。优秀的抽象不是名词越多越专业,而是能解释更多场景,又不制造不必要的负担。
“顶级”不是功能最全,而是多个目标之间的平衡
| 观察维度 | 你应该问的问题 |
|---|---|
| 价值 | 它是否确实解决了某类用户的重要问题? |
| 理解成本 | 用户能否预测操作结果,而不是反复猜测? |
| 一致性 | 相同概念是否遵守相同规则?不同概念是否被错误合并? |
| 可靠性 | 失败、并发、误操作发生时,系统是否仍可解释、可恢复? |
| 演进成本 | 新增需求时,是否能局部修改,而不牵动整个系统? |
这是本手册提出的观察框架,不是经过统计验证的产品质量公式。不同产品对这些维度的权重不同,也不存在一套永远正确的架构。
一个很顺手的产品,究竟顺在哪里?
选一个你近期使用的产品。不要写“体验很好”,写出一个具体操作,以及它替你省掉了哪一步理解、判断或恢复工作。
展开参考思路
例如:“一次请求失败后,我不用分别查三页日志,就能看到尝试过哪些上游、当前是否计费、接下来能做什么。”这比“界面清爽”更接近可迁移的设计原则:把同一任务的状态、解释和动作组织在一起。
六种思维,互相校正
不是依次背完六门课,而是带着同一个真实问题,在六个视角之间切换。
第一性原理防止盲目照抄;领域建模防止堆功能;边界设计防止牵一发动全身;交互思维防止只顾内部优雅;工程约束防止只做演示;产品取舍防止无限膨胀。
01第一性原理从表面功能退回到根本问题。
看到一个 Agent 产品有 Skills、Hooks、MCP 与子 Agent,不要立即抄成需求清单。先问:它分别解决了什么无法省略的问题?“需要复用工作方法”与“需要连接外部工具”,并不是同一种需求。
| 看到的机制 | 更底层的问题 |
|---|---|
| 工具调用 | 模型如何影响外部世界,又如何获得执行结果? |
| 权限控制 | 哪些动作可以自动完成,哪些必须由用户确认? |
| 可复用知识与流程 | 如何避免每次从头交代同一套专业方法? |
| 生命周期事件处理 | 哪些检查必须在指定时刻由确定性机制触发? |
这是一种提问方式,不要求推翻所有已有规范。成熟协议、用户习惯和已有组件,可以成为约束与材料。先理解为什么,再决定是否沿用。
训练动作挑一个你喜欢的功能,连续追问“它避免了什么困难”,直到答案不再依赖该功能的名称。
02领域建模把功能集合压缩成有意义的概念系统。
03模块与边界把一起变化的放在一起,把不同原因的变化隔开。
高内聚,不是把很多功能塞进同一个模块,而是让它们围绕相关责任工作;低耦合,不是互不联系,而是通过明确契约联系,不依赖彼此的内部细节。
例如“上下文整理”可以有统一的使用契约,但不必立刻变成独立微服务。逻辑边界、代码边界与部署边界,是三个可以分别决定的问题。
阅读 Ousterhout 的软件设计著作时,可以重点思考:一个模块是否用清晰的接口封装了真正复杂的工作,而不是把复杂性转交给所有调用方。[1]
训练动作假设换一个上游供应商,列出必须改变的部分与不应改变的部分。解释每一处变化,而不只统计修改文件数。
04认知与交互把系统真实状态,翻译成用户能判断的语言。
用户会根据自己对系统的理解预测结果。界面表达与实际行为不一致,就容易导致困惑与错误。心智模型的作用,正是帮助我们审视这种预期差距。[4]
用户真正需要知道的,通常不是内部模块名,而是:现在发生了什么、结果是否确定、对我有什么影响、接下来能做什么。
“简单”不能靠隐瞒风险实现。正常路径可以简洁;失败路径需要更充分的解释。不要为了好看,把“结果未知”改写成确定的“失败”或“未扣费”。
训练动作找到一个报错页面,重写它的状态、原因、影响与下一步动作,再检查每一句是否有系统证据支撑。
05工程约束不仅设计成功,还要设计不确定、并发和恢复。
超时并不证明远端没有执行;直接重试,也可能重复产生副作用或加剧过载。AWS 的工程说明强调了重试、幂等、退避与随机抖动之间的关系。[6]
因此,在“点击后成功”之外,你还要问:响应丢失怎么办?重复提交怎么办?两个动作同时发生怎么办?部分成功怎么办?操作取消后,远端是否真的停止?
产品经理不必独自解决每个并发算法,但必须把业务承诺、可接受风险与无法保证的边界写清楚,再与工程方案对齐。
训练动作给一个核心流程补出成功、失败、并发、恢复、安全五类场景。每类至少写一个可观察的验收条件。
06取舍与克制用边界保护核心体验,而不是让配置无限生长。
面对新需求,先问:不做它,核心用户还能完成目标吗?能否由已有机制组合出来?它是否引入新概念?它带来的复杂度将由谁长期承担?
Shape Up 的“设定边界”强调先确定愿意投入的范围,再塑造方案;把时间作为约束,调整范围,而不是让方案无限扩张。[7]
克制不是越少越好。权限校验、对账、备份或风险提示,可能不显眼,却是核心承诺的一部分。真正应该删除的,是无法证明必要性的复杂度。
训练动作把你的需求分为“必须保证”“本轮可省”“等触发条件出现再做”,为每个暂缓项写一个重新评估的条件。
完整示范:从 API 网关到领域模型
用一个熟悉的产品类型,把抽象、关系、状态、规则和变更测试串起来。
第一步:把目标写成用户结果
“让团队通过统一入口调用多个模型,在上游异常时知道请求发生了什么,并能够核对用量与费用。”这比“做账号管理、分组、计费、报表”更适合用来判断功能是否必要。
发起一次调用;选择可用上游;观察执行结果;保留可追踪记录;解释用量与账务状态。
复杂分销、通用规则编辑器、多区域容灾、插件市场,以及没有实际需求的无限层级配置。
第二步:识别那些不能混为一谈的概念
| 概念 | 它表达什么 | 要避免的混淆 |
|---|---|---|
| 调用方与 API Key | 谁被允许使用入口、拥有哪些调用权限。 | 调用方的 Key ≠ 访问上游的凭证。 |
| 上游资源 | 一个可调用的服务入口及其能力、凭证引用和健康信息。 | 供应商品牌 ≠ 某个具体可用入口。 |
| 路由策略 | 在约束下选择候选资源的规则。 | 策略配置 ≠ 一次调用的实际选择结果。 |
| 逻辑请求 Request | 用户发起的一次业务意图。 | 一次请求 ≠ 只能有一次上游尝试。 |
| 执行尝试 Attempt | 向某个上游发起的一次具体执行。 | 某次尝试失败 ≠ 整个逻辑请求失败。 |
| 用量记录 Usage | 在明确来源与可信度下观察到的消耗事实。 | 用量事实 ≠ 按某种价格计算的金额。 |
| 结算记录 Settlement | 按明确规则版本对业务收费进行记录。 | 远端成本 ≠ 向用户收取的费用。 |
这里的目标不是把对象压到最少,而是避免把身份不同、变化原因不同、确定性不同的东西挤在同一个概念里。真实项目可能需要进一步拆分;也可能在更小范围里合并部分实现。
第三步:别让一个“状态”承担全部含义
一次请求可以经历多次尝试;执行完成与费用确认,也可能发生在不同时间。因此,“请求成功”“某次尝试超时”“用量待确认”可以同时成立于不同记录,不能用一个全局 status 含糊地表示。
上图仅表示一次尝试的简化生命周期。结果未知时,先核查或对账;核查后可能转为已确认结果,必要时进入人工处理。不能仅凭本地超时直接断定远端未执行。
| 遇到的情况 | 产品应该表达什么 | 不能随意承诺什么 |
|---|---|---|
| 发送前鉴权失败 | 请求未获得执行许可,没有发起上游尝试。 | 不应编造上游执行日志。 |
| 发送后未收到响应 | 执行结果尚未确认,费用也可能待核对。 | 不能仅据超时写“绝对未扣费”。 |
| 流式输出已经开始后断开 | 本次输出不完整,说明已收到内容与用量确定性。 | 不能假装切换上游后是同一段无缝续写。 |
| 用户点击取消 | 区分“已请求取消”与“确认停止”。 | 不能把前端停止显示等同于上游停止执行。 |
第四步:写出能验收的业务不变量
归属不串线。每条请求、尝试、用量和结算记录都能追溯到正确调用方;跨租户访问必须经过授权判断。
账务不重放。为同一个计费事件定义业务唯一键,重复处理不能生成重复扣款;更正采用可审计的调整记录。
不确定性不被伪装。缺少确证时保留“未知 / 待确认”,而不是把它默认写成成功或失败。
规则可追溯。每次结算能说明使用了哪一版计费规则、依据哪些用量事实。
这些是本例选择的设计约束,不是自动成立的工程事实。实现时仍须设计事务、唯一约束、授权检查、恢复机制与测试。“有请求 ID”也不等于系统就具备端到端幂等性。
第五步:用一次变化检验模型
给系统增加一家协议不同的模型供应商。合理的预期是:新增或修改协议适配、能力声明、凭证配置与相应测试;调用方身份、账务记录的基本语义,不应因此被整体重写。
但若新供应商带来全新的收费方式、异步任务或数据保留要求,模型也可能确实需要演进。低耦合不是零修改,而是修改与真实变化相称。
为什么要区分 Request 与 Attempt?
设想用户只提交了一次请求,但系统先后尝试两个上游。你要怎样展示执行记录、核算成本,并解释最终结果?
展开参考思路
Request 表达用户意图,Attempt 记录每次实际执行。这样可以保留一次请求与多个尝试的关系,分别表达最终结果、尝试原因与成本。是否把多个尝试的成本转嫁给用户,是另一个明确的商业规则,不能由数据结构悄悄决定。
内核清楚,边界可靠,体验才自然
同一个设计,要同时经得住内部变更、外部故障与用户理解的检验。
一条正常流程,不足以定义一个模块
假设要给 Agent 设计上下文治理。如果聊天界面负责截断,工具模块负责摘要,子 Agent 各自压缩,记忆系统又另存一份历史,问题不是“组件不够多”,而是责任散落,缺少统一的规则与事实来源。
可以先约定一个清晰边界:上下文模块接收任务所需材料与预算约束,返回构建后的上下文、来源清单以及截断或压缩的说明。至于内部采用什么算法、是否独立部署,可以随后决定。
| 契约要写什么 | 上下文治理示例 |
|---|---|
| 输入与归属 | 任务标识、可访问材料、预算;谁有权提供或读取它们。 |
| 输出与解释 | 最终上下文、引用来源、保留与省略内容的说明。 |
| 失败与降级 | 预算不足、来源不可用、压缩失败时,调用方如何处理。 |
| 版本与兼容 | 规则如何版本化,旧任务恢复时如何解释原有结果。 |
“把所有逻辑收进一个万能服务”同样会产生问题。模块要为相关责任提供清晰接口,而不是变成任何需求都能往里塞的容器。
把异常也做成产品的一部分
503 Service Unavailable用户不知道发生在何处,也不知道重试是否会重复执行。
请求已发往上游,但未收到完整响应。
- 用量与费用
- 待核对,尚不能确认最终费用
- 请求记录
req_demo_1024- 下一步
- 查看执行记录,确认后再决定是否重新发起
以上为教学文案,不是对所有 503 的统一解释。实际提示必须根据错误来源、发送阶段与日志证据生成。结果未知也不代表系统可以无限等待,应定义核查时限与人工处理入口。
用五条路径验收,而不只验收“成功”
| 路径 | 至少提出一个具体问题 | 你要留下的证据 |
|---|---|---|
| 成功 | 用户能否完成目标,知道结果在哪里? | 一次端到端运行记录。 |
| 失败 | 失败发生在哪一步,哪些动作已经产生影响? | 失败状态与错误来源。 |
| 并发 | 两个请求同时修改同一额度时会怎样? | 并发测试与一致性规则。 |
| 恢复 | 进程重启后能否继续核查,而不是忘记未完成动作? | 恢复前后记录与回归测试。 |
| 安全 | 用户能否访问不属于自己的任务或资源? | 授权测试与敏感数据处理说明。 |
发现过度设计的三个信号
没有真实使用者的通用性:为了“以后可能需要”建立万能插件系统。无法解释的层级:每层只转发一次调用,却增加理解成本。把决定都推给用户:每个技术参数都暴露成配置,但没有可靠默认值。
解决方法不是一律删除,而是追问:这层边界到底隐藏了什么复杂性,保护了什么变化,服务于什么已知场景?如果说不清,先用更直接的实现。
三类产品,三个观察切面
不是寻找一个万能模板,而是学习在不同约束下,如何形成一致的设计。
观察“可组合的能力”
官方文档把可复用知识与流程、外部服务连接、独立上下文执行、生命周期事件处理,分别组织为 Skills、MCP、Subagents、Hooks 等扩展。[5] 值得学习的不是名词本身,而是它们解决不同问题的职责区分。
拆解问题:什么属于核心执行循环?什么应按需加载?什么必须由确定性机制保障?扩展失败时,核心任务还能如何继续?
模型决定 → 工具执行 → 结果返回 → 继续判断,是一种教学用的 Agent 循环概括,不是完整的 Claude Code 内部架构。
观察“领域概念与运营动作”
用账号、凭证、路由、请求、用量与账务这些视角去观察界面,再提出你自己的模型假设。不要根据一个菜单名,就断定它在后端必然对应一个独立服务。
拆解问题:新增一个上游需要理解哪些概念?为什么有分组?分组影响权限、路由还是价格?一个概念承担多种责任时,会不会让修改产生意外影响?
这里提出的是逆向分析问题,未对特定版本的实际实现作事实判断。
观察“高风险动作的理解与确认”
以一个教学钱包为例,区分账户、网络、资产、交易、签名请求与权限。不要假定每种签名都是转账,也不要假定所有网络采用相同的账户模型。
拆解问题:用户正在允许什么?权限范围与有效期是什么?界面是否区分意图、签名、提交与确认?在哪一步必须让用户明确知情,而不能靠默认选项略过?
此处只讨论产品建模与交互,不提供投资、资产操作或特定钱包安全性建议。
| 研究对象 | 主要学习什么 | 不要直接照抄什么 |
|---|---|---|
| Agent | 能力组合、上下文边界、权限与扩展。 | 所有插件、配置和自动化机制。 |
| 网关 | 资源、策略、执行事实与计量的分离。 | 成熟系统为历史需求积累的全部层级。 |
| 钱包 | 风险表达、确认流程、状态可见性。 | 不适用于自己领域的账户或交易模型。 |
七步逆向训练,比抄功能更有效
在不知道内部答案时,先独立推导;再用真实实现和反例修正你的模型。
选择一个你熟悉、可以合法访问的产品。第一轮只研究一个闭环,不研究整个平台。比如:在一个网关里发起调用,并在失败后核查记录。
观察走完一个真实任务
记录用户目标、操作、状态、困惑与异常;先区分“我亲眼看到”与“我推测如此”。
交付物:场景清单 + 观察记录抽象提炼核心概念
不按菜单机械分类;先画对象、关系与责任,并为易混淆词写定义。
交付物:词汇表 + 概念模型建模补上时间维度
对象如何创建、改变、失效?哪些状态不允许直接跳转?哪些规则必须始终成立?
交付物:状态表 + 不变量划界把责任落实到契约
写出输入、输出、错误、权限与数据归属;区分逻辑模块与部署选择。
交付物:边界图 + 契约草案推演主动攻击自己的设计
加入超时、重复提交、权限变化、并发与新供应商,看看哪里需要被整体重写。
交付物:反例集 + 变更影响表对照研究真实实现的证据
在完成自己的草案后,再读相关官方文档或开源实现;分清事实、解释与猜测。
交付物:差异清单 + 证据来源重构保留约束,减少负担
删掉缺乏必要性的概念与层级;不要为减少数量而合并本来就不同的责任。
交付物:第二版设计 + 决策说明不要以“与原作者不同”判定自己错误
真实产品可能受到历史版本、团队规模、商业目标与迁移成本的影响。你的简化方案更小,不必然更优秀;真实实现更复杂,也不必然更合理。比较时要写清双方的约束,再评价取舍。
| 普通竞品分析 | 系统逆向训练 |
|---|---|
| 它有什么菜单? | 为什么这里需要一个独立概念? |
| 它支持多少功能? | 哪些机制可以组合出这些功能? |
| 它比我多了什么? | 它选择承担了什么复杂度,又放弃了什么? |
| 界面怎么摆? | 信息顺序如何帮助用户判断与恢复? |
让 AI 成为设计伙伴,而不只是写代码的人
五个阶段、五次质量检查;每个阶段都留下可检查的产物。
“帮我做一个世界级、功能完善、高内聚低耦合的产品”,表达了愿望,却没有定义判断标准。更有效的合作方式,是让 AI 围绕具体问题、约束、证据和反例推进。
事实、假设、场景
概念、规则、边界
风险、取舍、删减
代码、测试、证据
这些是职责,不一定是四个独立 Agent。同一个 AI 也能分阶段承担;更换角色或增加 Agent,并不自动带来独立判断。关键在于:评审是否能够指出反例,结论是否有证据,而不只是互相赞同。
五阶段可复制提示词
将方括号内容替换成你的项目事实。一次只执行一个阶段;阶段产物有重大缺口时,先修正,再向下推进。
01阶段 1 · 问题与边界先理解值得解决的问题,不画页面,不选技术栈。
你是我的产品研究与问题定义伙伴。我们这一轮只定义问题,不设计页面,不写代码,不直接给出技术栈。 【项目背景】 产品或想法:[填写] 目标用户:[填写] 我观察到的具体困难:[填写] 已有材料或证据:[填写;没有就标注“暂无”] 本轮可投入的时间、预算和人员:[填写] 不能违反的约束:[填写] 请按以下顺序工作: 1. 区分已知事实、待验证假设与未知项,不把推断写成事实。 2. 将需求改写为“什么人在什么情境下,要完成什么结果,现在被什么阻碍”。 3. 提取 3 个优先场景,为每个场景写触发、输入、期望结果、失败代价和现有替代方案。 4. 给出本轮目标、非目标、约束,以及能观察或测试的成功条件。 5. 指出最危险的 3 个假设,并建议成本最低的验证办法。 6. 输出一页项目简报,不增加未经论证的功能。 遇到关键缺失信息时,只提最影响判断的问题;若暂时无法获取,明确写出临时假设及其风险。 请停止在本阶段,不要自动进入架构设计。
02阶段 2 · 概念与流程让每一个概念,都能在真实场景中找到理由。
你是我的领域建模伙伴。以上一阶段的问题简报为约束,不照抄竞品菜单,不先设计数据库表。 【输入】 已确认的问题简报:[粘贴] 优先场景与约束:[粘贴] 请完成: 1. 提出少量核心概念,并说明各自的身份、责任、生命周期、归属与存在理由。 2. 写出易混淆概念的“是什么 / 不是什么”;区分对象、属性、规则、事件与查询结果。 3. 用对象视角画概念关系,再用过程视角走完一个完整场景;核对两者是否一致。 4. 对关键对象列出合法状态、触发事件、转换条件和结果未知的处理方式。 5. 写出 5—8 条可验证的业务不变量。 6. 给出至少两种合理模型,比较理解成本、变更成本、实现难度与适用边界。 7. 主动删除没有独立责任、没有现实场景支撑的概念;保留删除理由。 不要默认采用微服务、事件溯源或复杂 DDD 分层。标出任何尚未确认的抽象。 最后给出你的推荐及不推荐另一方案的原因;停止,等待本轮评审。
03阶段 3 · 边界、契约与体验同时设计内部责任和用户看到的状态。
你是我的系统与交互设计伙伴。只使用已经选定的模型,新增概念必须说明原因。 【输入】 选定的领域模型:[粘贴] 核心场景、约束、不变量:[粘贴] 请完成: 1. 按变化原因划分逻辑模块;说明数据归属、输入、输出、权限、错误和版本策略。 2. 区分逻辑边界、代码边界与部署边界,给出当前规模下最简单的可行实现。 3. 走通成功、失败、并发、恢复、安全五类路径。 4. 单独处理超时、重复提交、部分成功、取消、权限撤销与结果未知。 5. 对重试写明前提、幂等范围、次数或时间预算;不要声称一个请求 ID 就能保证端到端只执行一次。 6. 把系统状态翻译为用户能理解的文案:当前情况、已知影响、未知项、下一步动作。 7. 为最小闭环列出 Given / When / Then 验收用例。 请明确列出无法保证的行为、待验证工程假设与可能误导用户的文案。 不要为了界面简洁隐藏风险,也不要为了架构完整增加无依据的模块。
04阶段 4 · 对抗评审与删减不要让 AI 给自己的方案打一张漂亮的满分。
你现在是独立的设计评审者,而不是替方案辩护的作者。仅依据下面的材料判断。 【输入】 问题简报、模型、契约与验收用例:[粘贴或提供文件] 请审查: 1. 找出最可能导致用户损失、数据不一致或不可恢复结果的 5 个问题。 2. 找出职责重复、概念混淆、隐式依赖和没有实际场景的抽象。 3. 构造反例:新增供应商、重复事件、响应丢失、权限变更、进程重启、流式输出中断。 4. 对每个问题输出:证据或假设、触发条件、具体后果、严重程度、最小修复、对应测试。 5. 提出可以删除、推迟或由现有机制组合实现的功能;说明不会破坏哪些核心承诺。 6. 区分已证实缺陷与风险猜测,不为了凑数量编造问题。 7. 对有争议的选择给出两个方案及适用条件,不做无条件的“最佳实践”推荐。 最后给出:阻断项、可带条件接受项、后续观察项。没有运行证据的内容,不得标为“已验证”。
05阶段 5 · 最小闭环与验证让代码证明设计,而不是让代码量证明进度。
你是负责实现与验证的工程伙伴。以已评审设计为基线,先交付最小纵向闭环,不一次性铺满所有页面。 【输入】 已评审方案:[粘贴或提供文件] 阻断问题及处理结论:[粘贴] 开发环境与可用权限:[填写] 请按以下顺序执行: 1. 说明最小闭环包括什么,以及本轮明确不做什么。 2. 先列验收用例与关键不变量,再划分可独立验证的小步骤。 3. 每次只实现一个能端到端验证的切片;保留清晰边界,不提前建设通用平台。 4. 运行实际可执行的检查:正常流程、异常、授权、重复处理和必要的并发或恢复测试。 5. 报告修改内容、运行命令、实际结果、未运行项目和阻塞原因。没有执行过的测试不得声称通过。 6. 用模拟数据或桩实现的部分必须标明,不能包装成真实集成完成。 7. 发现模型不适用时,先记录冲突、备选与影响,不要用隐式特殊分支悄悄绕过。 8. 维护一份设计决策日志:背景、选择、放弃方案、证据、代价、重新评估条件。 涉及生产数据、付费外部操作、凭证或不可逆动作时,先说明风险与必要授权,不自动执行。 完成后,按验收用例逐条给出“通过 / 失败 / 未验证”及证据,再提出下一轮最值得验证的一个假设。
每次交接,固定携带这五样东西
不要只把上一轮聊天全文继续堆给 AI。将事实与决定整理成短而稳定的项目基线;在发生变更时记录版本与原因。这样你才能分辨它是在继续设计,还是悄悄换了一套前提。
十二周,把方法变成工作习惯
每周只沉淀一种能力,再把它放回同一个项目里验证。
可以按每周约 5–8 小时安排,也可以根据已有能力压缩或延长。十二周是练习结构,不是成为顶级设计者的保证。真正的判断力仍需要多轮真实项目与使用反馈。
W01识别价值选择一个产品与一个任务
完整走完一次核心流程,记录事实与推测;访谈或观察实际使用者,不用自己的猜想替代全部用户。
- 交付物
- 一页问题简报,3 个具体场景。
- 通过标准
- 能不用功能名,说清谁被什么阻碍。
- 避免
- 练习可以从自己开始,但应标明样本有限。
W02划定范围把目标与非目标分开
确定本轮投入边界,写下核心承诺、暂缓项与重新评估条件。
- 交付物
- 范围表与最小成功条件。
- 通过标准
- 能解释为什么某个看起来很酷的功能暂时不做。
- 避免
- 不要把安全或恢复能力当成随手可删的装饰。
W03统一语言提炼核心概念
列出对象、属性、规则和事件;为两个易混淆词写正反定义。
- 交付物
- 领域词汇表与关系图。
- 通过标准
- 每个核心概念都能回到具体场景。
- 避免
- 不要把页面名直接当作领域对象。
W04加入时间设计状态与不变量
走通创建、执行、失败、取消和恢复;明确未知结果如何处理。
- 交付物
- 状态表与至少 5 条不变量。
- 通过标准
- 能回答“超时后到底知道什么、不知道什么”。
- 避免
- 状态数量不重要,语义与转换条件重要。
W05划分责任设计模块与契约
写输入、输出、数据归属、权限和错误;先用简单部署形态。
- 交付物
- 模块边界与 2 个核心契约。
- 通过标准
- 每类数据与规则都有明确责任归属。
- 避免
- 逻辑模块不必一一变成微服务。
W06验证边界做变更与反例推演
模拟新增供应商、重复事件、并发更新和权限变化。
- 交付物
- 变更影响表与异常矩阵。
- 通过标准
- 能区分必要修改与不必要牵连。
- 避免
- 不要为了少改文件而固守错误模型。
W07翻译体验让状态与行动可理解
做低保真原型;把正常、空白、加载、失败和未知状态全部放入流程。
- 交付物
- 可走通的原型与状态文案。
- 通过标准
- 找他人操作后,能复述发生了什么和下一步能做什么。
- 避免
- 不以视觉精致掩盖流程问题。
W08独立评审找反例,而不是求认可
请 AI 或同行指出证据、触发条件和最小修复;检查不成立的前提。
- 交付物
- 评审清单与修订方案。
- 通过标准
- 阻断问题被修复,或范围被明确缩减。
- 避免
- “没有发现问题”不等于“已经证明正确”。
W09实现闭环从一个纵向切片开始
选一个最小任务,贯通界面、逻辑与记录;明确模拟部分。
- 交付物
- 可运行的第一版。
- 通过标准
- 一个用户目标能从头到尾完成。
- 避免
- 先可验收,再扩功能。
W10攻击实现补上异常、安全与恢复
运行重复提交、断连、权限、并发或重启测试,按风险选用。
- 交付物
- 测试证据与待解决缺陷。
- 通过标准
- 能区分通过、失败和未验证,不拿文案代替测试。
- 避免
- 开发环境通过不等于生产就有同样保证。
W11真实观察看用户实际怎样做
记录任务完成、误操作、求助与恢复过程,观察与你的预期差在哪里。
- 交付物
- 使用观察与优先问题列表。
- 通过标准
- 至少一个重要设计选择被真实证据校正。
- 避免
- 少量样本用于发现问题,不冒充统计结论。
W12删减与迁移形成自己的设计原则
删除无依据的复杂度;记录保留原因;把一个原则迁移到另一类产品。
- 交付物
- 第二版设计与决策复盘。
- 通过标准
- 能讲清“原来怎样想、证据是什么、现在怎样改”。
- 避免
- 不是写“学到了很多”,而是改变下一次决策。
用证据评审,而不是凭“高级感”打分
分数只是提醒;真正有价值的是你知道哪里仍然没有被验证。
下面是训练用的自评工具,不是科学量表,也不用于证明产品一定优秀。不同维度不能相互抵消:即使总分很高,严重权限漏洞或不可控扣费仍可能阻断交付。
已评 0 / 7 项。先写证据,再给分。
问题与价值
目标用户与重要场景是否清楚?
证据:真实任务、观察或访谈;不是一句“市场需要”。
概念与一致性
核心概念是否少而清晰,且能解释关键场景?
证据:词汇表、关系、状态与反例检验。
边界与演进
新增需求时,改动是否与变化原因相称?
证据:一次实际变更,或有约束说明的影响推演。
体验与可理解性
用户能否知道状态、影响与下一步?
证据:任务观察与误解记录,而不只是审美评价。
异常与恢复
失败、并发、未知结果和重启是否有可执行的处理?
证据:异常测试、恢复记录与未解决风险。
权限与风险控制
谁能做什么、会造成什么影响,是否明确?
证据:授权测试、确认机制与敏感信息处理检查。
取舍与验证
每个重要设计是否有理由,并允许被证据推翻?
证据:决策日志、被删除的功能与重新评估条件。
你的设计工作台
把一闪而过的判断,变成下一次可以复用的经验。
看到一个精妙设计,不要只收藏截图。记录它解决了什么矛盾,有哪些备选,为什么选择现在的方案,以及何时应该改变这个选择。
一页产品设计简报
一条真正有用的决策记录
设计品位观察日志
把学习记录留在自己手里
Markdown 用于阅读与归档;JSON 备份可在另一份手册中导入。导入会覆盖当前学习记录。
阅读地图与随手查阅
带着项目问题读;读完一个概念,就把它用于一次具体判断。
不需要先读完五本书才开始实践。下面按本手册的训练目标安排阅读切入点;顺序可以调整,每本书都配一项立即可做的练习。
十二个术语,用自己的话讲清楚
- 领域模型
- 用一组概念、关系与规则解释业务;不是数据库结构的同义词。
- 统一语言
- 在团队讨论与实现中保持关键概念含义一致。
- 限界上下文
- 一个模型和词汇含义有效的范围;跨范围需要明确转换关系。
- 业务不变量
- 无论执行顺序或异常如何,在约定边界内都必须维护的规则。
- 状态机
- 描述对象有哪些状态,以及什么条件允许发生哪些转换。
- 契约
- 调用双方对输入、输出、权限、错误与行为保证的明确约定。
- 高内聚 / 低耦合
- 相关责任集中;不同责任通过清晰边界协作,不相互窥探内部细节。
- 幂等
- 在约定操作与范围内,重复处理不会重复产生应只发生一次的业务效果。
- 纵向切片
- 围绕一个用户目标,贯通界面、业务逻辑与数据的最小可运行部分。
- 心智模型
- 用户对系统如何工作的理解;它会影响预期和操作。
- 变更影响面
- 一次变化实际牵涉的概念、模块与行为;不是单纯的改动文件数。
- 设计决策记录
- 保存选择背景、候选方案、理由、代价、证据与重新评估条件。
参考资料与案例边界
资料入口于 2026 年 10 月整理核对。本文是基于本次讨论整理的学习框架与原创练习,不是对任何一本书的完整摘要。引用支持相应概念;教学案例、评分标准与训练路线属于本手册的建议,不是原作者的统一规范。产品文档可能变化,请以原文为准。
- John Ousterhout · A Philosophy of Software Design ↗
作者主页;对应复杂度、模块与软件设计的延伸阅读。
- Eric Evans · DDD Reference ↗
作者团队提供的领域驱动设计术语与模式参考。
- Martin Fowler · Bounded Context ↗
限界上下文与模型之间关系的说明。
- Nielsen Norman Group · Mental Models ↗
用户如何形成对系统行为的预期。
- Claude Code 官方文档 · Extend Claude Code ↗
Skills、MCP、Hooks、Subagents 等扩展的职责区分。产品能力会演进。
- AWS Builders’ Library · Timeouts, retries, and backoff with jitter ↗
超时不代表没有副作用;重试、退避与幂等性的工程约束。
- Basecamp · Shape Up / Set Boundaries ↗
先确定投入边界,再塑造方案;固定时间、调整范围。
- Designing Data-Intensive Applications · 官方书籍网站 ↗
数据系统的可靠性、可扩展性与设计取舍。
- Don Norman · The Design of Everyday Things ↗
概念模型、映射、反馈、约束与人本设计。
本文件正文与交互不依赖网络。打开外部参考资料需要联网;这里不嵌入远程字体、追踪脚本或第三方资源。
今天,只完成一个小闭环
不要从“我要做一个顶级平台”开始,从“我要解释清楚一次请求”开始。
选你最熟悉的系统,只拿一个任务练手。以 API 网关为例:用户提交一次调用,上游响应丢失,用户想知道现在是否可以重试。
把一次“不确定”,设计清楚
1写用户目标,而不是功能清单:他需要知道什么,才能安全决定下一步?
2画 5–8 个概念,解释请求、尝试、结果、用量与结算之间的关系。
3给出正常和异常两条路径,写出系统已知、未知与禁止做出的承诺。
4让 AI 找 3 个能击穿设计的反例,再根据证据修正,不急着开发整个平台。
练完以后,用三个问题检查自己
抽象是否更清楚?我能否说明哪些应该统一,哪些必须区分。
取舍是否有依据?我能否解释为什么不做某件事。
验证是否真实?我能否指出哪个结论来自运行或观察,哪个仍只是一个假设。
不再只看到页面与功能,
而能看到背后的概念、约束与取舍。
用体验解释复杂,用证据修正判断。
AI 可以加快提出方案、寻找反例和实现验证的过程。但你要保留对价值与取舍的判断。每一次具体的观察、一次失败的推演、一次被证据推翻的决定,都会成为下一次更好设计的材料。