价值三问
给谁用、解决什么问题、比现有做法好在哪。三问若答不出,说明需求还停留在想法,未转为可讨论的问题——此时先回到场景,而不是先写代码。这三问同时也是说明产品价值的开头。
边界回答「本轮做到哪」,规约回答「做到什么算完成」。两者都写在文件里:前者供小组判定优先级,后者给 Harness 与验收共同使用。
先说清价值,再列这一轮要交付的能力。
给谁用、解决什么问题、比现有做法好在哪。三问若答不出,说明需求还停留在想法,未转为可讨论的问题——此时先回到场景,而不是先写代码。这三问同时也是说明产品价值的开头。
一条一句、编号排列,每条都要能单独被演示或被测试。清单之外的能力不是被否定,而是由后续课次按规约增量加入;这正是最小可用产品(Minimum Viable Product, MVP)的定法——先确定本轮可交付的边界,再逐轮扩大。
把清单交给一位没参与讨论的同伴,请他复述本轮要做什么。能完整复述,边界就是清楚的;复述时不断追加「还有……」,说明边界还没定完。这是需求评审中最省事的一致性检查:复述者不需要懂技术,只需要能读懂清单。
用 /opsx-propose 起草一份变更,四份文件各管一件事。
| 文件 | 写什么,为什么单列一份 | 写完的标志(判据) |
|---|---|---|
proposal.md | 为什么做、本次做到哪、与既有约定的关系。动因单独成文,是为了让不读代码的人也能判定本次改动的必要性 | 不读代码亦可判定本次改动的必要性;至少写出一条被放弃的候选方案 |
design.md | 技术选型、分层结构,以及两到三条关键取舍与理由。取舍单独记录,后来接手的人才知道当时放弃了什么 | 每条取舍都能说明被放弃的候选方案是什么 |
specs/能力/spec.md | 每条能力(capability)一组场景,含失败路径。只有这一份能被逐条判定,其余三份服务于它 | 场景能被逐条执行并判定通过与不通过 |
tasks.md | 可执行的任务清单,编号可勾选,骨架任务排在最前。顺序写在这里,执行者就不必重新排序 | 按编号顺序做完即完成本次改动;换一位执行者也不需要调整顺序 |
三段式,不写形容词:「前置条件 / 操作 / 可观测结果」。
场景:连续提交同一份作答
前置条件:学生已登录;作业已发布且未截止;该学生尚无提交
操作: 以同一个幂等键(idempotency key)连续提交两次同一份作答
可观测结果:提交记录一份;批改记录一份;第二次返回首次结果
三条:一条机器检查,一条人工检查,一条对应关系检查。
/opsx-validate 变更名 --strict 不通过,说明规约不完整——先补规约,不要先写代码。