DAY 2 · 需求与边界

需求工程 + Boundary

今天只回答一个问题:我们到底在设计什么,边界画在哪里?核心产物是一份 Boundary Pack(边界三件套)。

概念 1

需求三分类

功能需求

系统“做什么”。
下单、撤单、查持仓、拉 K 线。

质量属性

系统“做得多好”。
下单多快、行情断了怎么办、半夜挂了谁知道。

约束

系统“必须在什么框里做”。
单人运维、30 美元/月、必须用 Alpaca API。

生活类比:点外卖

  • 功能需求:“我要吃黄焖鸡”——吃什么。
  • 质量属性:“30 分钟内送到、送到时还是热的”——做得多好。
  • 约束:“预算 25 元、只能用手机下单”——框。
关键洞察:新手写需求只写功能。但功能决定“要做什么”,质量属性和约束往往决定“必须怎么做”——而架构师的大部分时间,花在后者上。

拆解一句话

“系统要在 1 分钟 K 线上跑 SPY 策略”——功能:拉 K 线、算信号、下单;质量:行情断了 5 分钟怎么办?下单超时了怎么办?约束:跑在 30 美元的服务器上,一个人运维,必须用 Alpaca API。

同一句话里藏着三类需求。新手只看到第一行,架构师三行都要看到。从今天起,每读到一条需求,先问:它是功能、质量,还是约束?

概念 2 · 预览

质量属性场景:三问版

判断一个质量目标是否合格,只问三个问题:发生什么?系统怎么响应?怎么判断响应合格?

EVENT
发生什么?
RESPONSE
系统怎么响应?
MEASURE
怎么判断响应合格?

Worked example:下单超时

发生什么:Alpaca Trading API 下单 5 秒无响应。

系统怎么响应:不能直接认定失败,进入 Unknown 状态,发起查询对账,不盲目重发。

怎么算合格:在预定查询窗口内完成确认;若无法确认,则保持 Unknown 状态并持续对账,且不产生重复下单。

关键洞察:度量是灵魂。“系统要稳定”没有度量,不算合格目标;“30 秒内必须明确最终状态”是未经验证的 SLA,把“希望”写成了“承诺”。写不出、验证不了的数字,不配叫度量。(完整六要素 Day 6 再展开。)
概念 3

Boundary(边界)

一句话定义:Boundary 回答“系统管什么、不管什么”,以及“和外部世界在哪里交接”。

生活类比:餐厅

  • 厨房管做菜,不管种菜。
  • 和外部交接的三个口:进货口(供应商)、点餐口(顾客)、外卖口(骑手)。
  • 每个口都要说清“交什么、什么标准”:菜几点送、坏了包不包退换;外卖超时谁负责。
反例:没有边界的系统 = “什么都管” = 什么都管不好。边界不清的代价是:所有风险都是你的。

Worked Example(讲透):奶茶店的边界

管什么:做奶茶、收钱。

不管什么:不种茶叶(找供应商)、不自己送外卖(用外卖平台)。

外部依赖:茶叶供应商、糖浆供应商、外卖平台、支付通道。

交接契约:茶叶“每周二送达,坏包退换”;外卖“接单后 40 分钟送达,超时平台赔付”。

“不管什么”往往比“管什么”更重要——敢写“不管”,才是架构师的勇气。

讲透三层

第一层:边界不是“墙”

边界是“交接清单”——在每个交接点说清谁负责什么、交什么、什么标准。

第二层:边界定义责任与风险暴露

边界决定责任主要归属在哪里,也定义哪些风险由外部承担、哪些仍需系统检测和缓解。记住:Boundary ≠ 风险消失。

第三层:边界带来可预期性红利

厨房可以按“供应商应在周二送货”安排流程,但仍要考虑延迟交付怎么办。Contract creates expectations, not certainty——契约创造的是可预期性,不是确定性。

核心产物

Boundary Pack:边界三件套

为统一小样场景画边界,要交出三样东西:

  1. 管什么 / 不管什么清单:各至少 4 条,“不管”每条加一句“为什么不管”。
    例(管):拉行情、算信号、风控检查、下单撤单、订单状态跟踪、对账与告警。
    例(不管):不自己撮合(交易所/券商撮合)、不管资金托管(钱在券商账上)、不做高频做市、不管税务申报。
  2. 外部依赖清单:每个写一句“它坏了会怎样”。
    例:Alpaca Trading 坏了 → 下不了单,需触发交易安全开关;告警通道坏了 → 出事没人知道。
  3. 一句话 Boundary Contract:每个交接点一句话写清谁负责 / 交什么 / 失败怎么办。
    例:券商负责返回订单执行结果;超时无响应时系统进入 Unknown 并发起查询对账,不盲目重发。
“不管”≠“不校验”:“不管资金托管,钱在券商账上”——但如果券商账上的钱和本地算的对不上,谁说了算?券商说了算(它是 truth source),靠每天对账发现。边界定的是“谁负责”,不是“谁不看”。

与后续的衔接

Day 3 Contract = 一句话 contract 的展开 + 超时语义;Day 4 Structure 的划分必须落在 Day 2 的边界内——边界是 Structure 的外框,Day 4 不许画出界;Day 6 把三问版升级为完整六要素;Day 7 检查点复用这份 Boundary Pack。

学完检验

Day 2 过关线

  • 能用自己的话说出需求三分类,并各举一个交易例子;
  • 会用三问版写轻量质量场景,度量可检验、不写未经验证的 SLA;
  • 为小样场景产出 Boundary Pack(三件套齐全);
  • 理解“不管 ≠ 不校验”:边界分配责任,也保留必要的数据与验证职责。
红队一问(自测):奶茶店如果决定“自己送外卖”,边界发生了什么变化?风险发生了什么变化?——检验“边界 = 风险分割线”是否真懂。

← 回 Day 1 查看完整大纲

Day 3(Contract:超时、幂等、所有权)讲义即将发布,敬请期待。