需求与边界
复习
- 从算法到软件:软件要长期使用与维护
- 抽象:加一层,把复杂藏起来
- 输入与输出:程序处理数据并给出结果
TL;DR
- 需求是“要解决什么问题”
- 边界是“明确不解决什么”
- 说不清边界,就容易做不完、做错方向
- 先弄清需求,再动手
正文
做软件的第一步,不是写代码,而是搞清楚要做什么。这听起来是废话,却是最多项目栽跟头的地方。
需求:到底要解决什么
需求(requirement)描述的是:用户真正想要解决的问题,以及希望达到的效果。
这和算法题很不一样。算法题里,输入、输出、规则都被出题人规定好了;而真实的软件里,用户往往只说一句“我想要个方便记账的东西”——细节全是模糊的。把模糊的期望,变成清晰、可实现的目标,就是需求分析。
边界:明确不做什么
比“要做什么”更容易被忽略的,是“不做什么”。
任何一个软件都不可能承担无限多的功能。如果不划清边界(scope),就很容易陷入一种困境:
- 功能越加越多,永远做不完
- 中途发现方向不对,返工代价巨大
- 该做的没做,不该做的却花了大功夫
所以,明确“本次不做 X”,和明确“要做 Y”同样重要。 边界不是偷懒,而是把有限的精力集中在真正重要的目标上。
说不清的代价
需求不清、边界不明,会带来一连串问题:
- 你以为要做 A,用户以为要做 B,最后谁都不满意
- 做着做着发现漏了关键前提,推倒重来
- 无法判断“什么时候算做完了”
“解决问题,先从理解问题开始。” 这也是整个指南反复强调的一句话——在写第一行代码之前,先花时间把问题想清楚,往往能省下后面成倍的返工。
思考题 1
为什么“明确不做什么”和“明确做什么”同样重要?
思考题 2
需求没弄清就动手,可能带来什么后果?
小结
知识点
- 需求是用户真正要解决的问题与目标
- 边界明确本次要做什么、不做什么
- 需求模糊、边界不清会导致返工与失控
- 动手前先把问题想清楚
参考资料
- Wikipedia(zh):需求分析:明确并整理用户的需求
- Wikipedia(zh):范围 (项目管理):项目要完成与不完成的内容
思考题答案(仅供参考)
思考题 1
因为资源与时间都有限。若不划清“不做什么”,功能会无限膨胀,导致做不完、方向失控;明确边界才能把精力集中在真正重要的目标上,也才能判断“何时算完成”。
思考题 2
可能出现做出来的不是用户想要的、漏掉关键前提而返工、或者无法判断何时完成等问题。理解错了问题,越努力反而错得越远,返工的代价也更大。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪