理论
基本原则
1. 以终为始,确定好真实目标
最佳实践
- DoD,确定好完成的定义,减少团队内部的理解不一致。
- 用户故事,细化出有价值的需求。
- 持续集成,通过尽早集成,减少改动量,降低集成的难度。
- 精益创业,减少过度开发不确定性产品带来的浪费。
- 迭代 0,在项目开始之前,做好一些基础准备。
- 计划倒排,先确定时间,再看功能是不是需要砍掉一些,人力是不是需要补充一些、
思想细节
- 任何事物都要经过两次创造:
- 一次是在头脑中的创造,也就是智力上的或者第一次创造(Mental/First Creation),
- 然后才是付诸实践,也就是实际的构建或第二次创造(Physical/Second Creation)。
- 在更大的上下文内发现自己的“终”。
- 通过推演,找到通往“终”的路径。
- 用可度量的“数字”定义自己的“终”。
实战指南
- 遇到事情,倒着想。
- 在做任何事之前,先定义完成的标准。
- 尽早提交代码去集成。
- 默认所有需求都不做,直到弄清楚为什么要做这件事。
- 扩大自己工作的上下文,别把自己局限在一个“程序员”的角色上。
- 在动手做一件事之前,先推演一番。
- 问一下自己,我的工作是不是可以用数字衡量。
- 设计你的迭代 0 清单,给自己的项目做体检。
2. 任务分解,找到实施路径
[[任务分解指北]]
3. 沟通反馈,解决与人打交道的问题
4. 自动化,解决于机器打交道的问题
DOD
DOD: Definition of Done ,其本质就是完成的 checkList
TDD
TDD: Test-Driven Development,在明确要开发某个功能后,在开发功能代码之前,先编写测试代码,然后编写功能代码并用测试代码进行验证,如此循环直到完成全部功能的开发。

[[向上管理]]
自动化
开发必须纳入自动化的部分
- 持续交付
- 验收测试
SOLID 原则
- 单一职责原则(Single responsibility principle,SRP)。
- 开放封闭原则(Open–closed principle,OCP)。
- Liskov 替换原则(Liskov substitution principle,LSP)。
- 接口隔离原则(Interface segregation principle,ISP)。
- 依赖倒置原则(Dependency inversion principle,DIP)。
具体实践
需求开发
需求澄清
请与产品/需求方对齐下列问题:
- [ ] 这个需求最终的效果是什么 ?用户的反馈收集过了吗?有具体的指标和测试吗?
- [ ] 什么用户会使用这个特性?什么场景会使用这个特性?用户会如何使用这个特性?
- [ ] 这个特性上线后如何衡量其有效性?
- [ ] 是否可以通过别的方式达到这个特性,而不是必须按现有方案实现?
需求澄清的细节参考[[需求澄清指北]]
完成这些问题之后,输出一份 DOD,用户故事
DOD 的编写可以参考[[DOD 最佳实践]]
用户故事的编写可以参考 [[用户故事 编写细则]]
路径推演
开发(build)-测量(measure)- 认知(learn)
在做事之前先分出几个阶段,并做好每个阶段的 checkList:
- 需求开发
- 验收测试
- 版本发布:版本发布 checkList
版本发布 checkList 的编写可以参考 [[版本发布 checkList 指北]]
任务分解
动手做一个工作之前,请先对它进行细粒度的任务分解(最好是立刻就可以停下来的那种)。
任务分解的关键在于:小。小到什么程度呢?有时甚至可以小到你可能认为这件事不值得成为一件独立的事。比如升级一个依赖的版本,做一次变量改名。
对于开发者
- 这个需求的影响范围?
- 这个需求的模型?
- 潜在的风险?出现问题后如何及时挽回?
- 流程图?
- 功能流程图?
- 数据流图?
- 上线流程?
- FAQ?
具体的开发顺序为:
- 编写流程图
- 编写 FAQ
- 编写部署流程
- 开发代码
- 验收
- 部署