Vertical Slicing
本 Skill 只决定切片的形状、顺序、依赖边,以及合入与放量的节奏。拆票流程、征询与发布归 to-tickets;逐票 token 预测归 ticket-sizing,它评估本 Skill 产出的最终切片。依赖 Skill 按当前运行时目录定位;缺失时交付切片清单并注明未发布。
工作方式是 small batches:先上一片 walking skeleton,再一片片加厚。每片合入 main、部署到生产、有人亲手体验,下一片的拆法再按体验修正。合入与部署逐片发生;对外放量按里程碑发生。
词汇
- 垂直切片:一张票。它穿过实现一个行为所需的各层,交付一个人能从真实入口触发并看到的结果。Avoid:小模块(与 Module 撞名)、子需求、子任务。
- 业务主线:story map backbone。用户按时间顺序完成的活动序列,每个活动是一个动词短语。所有切片挂在它上面。
- 核心闭环:产生业务结果所需的最少 backbone 活动。其余活动各自作为加厚片补上。
- walking skeleton:第一片。只覆盖核心闭环,每个活动只走最简单的一条路径,端到端跑通,可以简陋。
- 加厚片:在骨架已有的 seam 后补一个变体:路径、规则、数据或界面。
- 结构片:make the change easy。只改结构、行为不变,服务紧随其后的行为片。
- 收尾片:删掉隐藏手法留下的第二条路径:toggle、旧 adapter、旧列。
- 完成:合入 + 部署 + 至少内部可体验。flag 关着、只对内部账号开放也算完成;对外放量按里程碑记录,不阻塞下一片。
- 波次:依赖图的层。第 1 波是没有入边的片;后一波的片只被更早波次阻塞。同波次并发开发,每片完成即单独合入,不等同波次其他片,也不等里程碑。
- 里程碑:story map 上的一条 release 切线。它的片全部完成后,打开这批片的 release toggle,让目标用户真正使用,并触发验收、结算等对外节点。里程碑只决定放量,不决定合入。Avoid:阶段合并、批量发布。
Module、Interface、Seam 的定义沿用目标项目的架构词汇;目标项目未定义时按通用含义使用。
切片检查
每片逐项过;任一项答不上来,这片就要重切。
- 删除测试:删掉这张票,会有一个人能观察到的结果跟着消失。结构片和收尾片例外,它们分别指向自己服务的行为片和要删掉的路径。
- 可独立部署:单独合入 main 就能部署,现有行为保持不变。
- small batch:开发加检查目标为数小时到两天,上限一周;分支是 short-lived branch,约两天内合回 main。
- INVEST:重点答 Independent、Valuable、Testable。体验结果写成「谁 · 从哪个入口 · 做什么 · 看到什么」。
- 一种变更:结构变更和行为变更分开,各占一片。
- 隐藏有期限:用了 toggle、dark launch、branch by abstraction 或 expand-contract,就要有对应收尾片。release toggle 的收尾片紧跟所属里程碑的放量。
- 挂在主线上:能指出这片加厚的是哪个 backbone 活动。
切分 spec 或地图
-
画业务主线。 读输入的验收标准、目标项目术语与相关代码。写一句话业务结果,列 backbone 活动,指定体验人,圈出核心闭环。再标出终点要穿过的 seam:入口、跨 Module 的 Interface、持久状态。完成条件:每个 backbone 活动都有真实入口坐标,或标为 Unknown;核心闭环已圈定;seam 清单可指向代码。
-
切 walking skeleton。 核心闭环里的每个活动取最简单的一条路径;硬编码、单一用户、单一数据形态都可以。需要新建或改动的 Interface 尽量集中在骨架里,因为 Interface 后改最贵。骨架超出 small batch 时,先硬编码非核心的一段,仍超出再把核心闭环缩到更短的业务结果。Interface 形状或技术可行性还答不上来时,先切 spike 片,产出答案而非生产代码。完成条件:骨架的体验结果写成一句完整的「谁 · 入口 · 做什么 · 看到什么」,small batch 判断为上限内,并通过切片检查。
-
加厚。 核心闭环外的每个 backbone 活动各成一片;每片从骨架的 seam 后补一个变体或一个活动,拆法见 拆法库。先做强制规则和价值最大的路径;拆法优先选能让低价值部分被延后或丢弃的那种。完成条件:输入里每条验收标准都落到某一片,或明确列入「延后」「丢弃」并写理由。
-
补结构片与收尾片。 某片需要先加深一个 Module,才能把改动变小,就在它前面放一个结构片。未完成部分合入时需要隐藏,按拆法库的隐藏手法表选手法,并补收尾片。完成条件:每个隐藏手法都有收尾片;每个结构片都点名它服务的行为片。
-
连依赖边。 只在两种情况下连阻塞边:后片调用前片新建或改动的 Interface;或者后片依赖前片提供的能力(服务、配置、数据)。两片只改同一 Module 的 Implementation,是合并冲突风险,不是依赖。完成条件:每条边写明它依赖的 Interface 或能力;没有入边的片可以并发开工。
-
排波次与里程碑。 按阻塞边给每片标波次号。再沿业务主线画 release 切线:
- 里程碑 1 是骨架,加上让目标用户第一次能真正使用所需的最少加厚片。缺了会让流程不可用、或会造成资损与数据错误的规则,归进同一里程碑;没有刹车的车不发。
- 之后每个里程碑只多交付一个对外可感知的业务结果,并配一个自己的 release toggle。
- release toggle 存活一两周以内,所以里程碑从首片合入到放量也在一两周以内;超出就把它切成两个对外结果。
- 每个里程碑写明放量对象(灰度或全量的外部目标用户;内部体验已由每片的「完成」覆盖)、验收人与验收结果,以及目标项目约定的对外节点(演示、验收、结算或催款)。
完成条件:每片有波次号与所属里程碑;每个里程碑都有放量对象、验收人和验收结果;不存在一个 toggle 一直覆盖到最后一片的计划。整份输入只排出一个里程碑时,写明理由。
-
交付切片清单。 按波次顺序给出下面两张表,交给
to-tickets征询与发布,再交ticket-sizing估算。完成条件:每片已过切片检查,用户在发布前看到两张表。
| 片 | 波次 | 里程碑 | 类型 | backbone 活动 | 体验结果(谁 · 入口 · 做什么 · 看到什么) | small batch 判断与依据 | 隐藏手法 / 收尾片 | 阻塞边(依赖的 Interface 或能力) |
|---|
类型取值:骨架、加厚、结构、收尾、spike。
| 里程碑 | 包含的片 | 对外业务结果 | 放量对象与动作 | 验收人与验收结果 | 对外节点 | 收尾片 |
|---|
审查现有拆票
单张票:先过切片检查。全部通过就保留原票;超出 small batch,或含多个可独立体验的结果时,把这张票当输入走「切分 spec 或地图」。
多张票:逐票跑切片检查,再看整体:第一片是否是端到端骨架;所有票能否拼回业务主线;依赖边是否都有 Interface 或能力依据;波次与里程碑能否按「排波次与里程碑」排出。
重点信号:按层或按技术组件分票;先建全套基础设施再写功能;单列「联调」「集成」票;小票合入后攒成一次大发布,或按「阶段」攒齐再一起合并;所有 toggle 留到最后一张票才打开或删除;没有 backbone,越切越碎,切到核心时尺寸骤增。
每条 finding 指向具体票号与未过的检查项。重切方案按「切分 spec 或地图」各步完成条件交付两张表。已派发或已被 claim 的票只提建议,不改写。
执行交接
切片发布后,按依赖并发执行与逐票上线交给 delivery-pipeline 的独立票模式(delivery_mode: ticket_release)。ready 只看本票阻塞边,一票一 MR,部署读回后关票。合入授权与部署读回按该模式的 release_stage 规则执行;它的状态止于 deployed。里程碑的放量与对外节点按里程碑表执行,可映射到 tracker 的 milestone。宿主没有 delivery-pipeline 时,按目标项目自己的分支与发布合同逐票合入。


