仓库源文

.. Kenneth Lee 版权所有 2018-2020

:Authors: Kenneth Lee :Version: 1.0

设计的需求问题


设计中决定需求是最重要的问题,但在实践中,需求是最被轻视的问题,原因还是以前说 过的,求礼。但不是很多工程师能绕过这个坑,这里细化一下这个概念。

求礼的第一个陷阱是比较容易绕开的——只不过是个想不想的问题——需求分析不带来直接绩 效。领导们,同事们总是看得到你辛辛苦苦码出来的代码,看得到你的测试报告,甚至看 得到你写的需求分析文档,但他们看不到你做的“需求分析”,正确判断需求,费心费力, 但看不到实质的东西。你因为选择了正确的需求,给产品带来莫大的竞争力,不是内行看 不见,这个问你的心。我这里只讨论怎么做一个好软件,不讨论你怎么求名,我也不反对 你求名,不需要通过说服我来增强你“是个好人”,“只是现实不允许”的信心。

第二个陷阱就不那么容易了,它是“我不知道”。比如你做一张网卡,这张网卡有没有必要 提供DPDK PMD驱动呢?或者不说这么大,提供是要提供了,这个PMD驱动有没有必要提供在 OVS上的适配呢?“我不知道”,其实“我们都不知道”。没有上市以前谁知道这玩意儿有没有 人埋单?普通Linux驱动卖出100万片,Windows驱动卖出10万片,OVS场景卖出1万片,这个 需求算是做对了,还是做错了?

大部分工程师都不肯在设计和需求中明确说出这一点,否则白纸黑字,谁背这锅?所以, 他们的回答是:我不知道,所以我不能写。

问题是,你不写,你代码还是写了,你不说你的选择,你实际已经做出了选择。

无论是自己的公司,还是老板的公司,人们都取向于到最后一刻才真正面对问题,我们觉 得掩耳盗铃的故事荒谬,却无时无刻在掩耳盗铃。

第三个陷阱是第二个陷阱的进步,它是“我要进一步调查”。既然不知道应该做什么选择,“ 我要进一步调查”显然是个“合情合理”的选择了。

但通常“合情合理”都是陷阱(道常无名)。客户要不要PMD驱动,这很可能是个蛋鸡循环问 题,你不做,不用一段时间,客户肯定不会选择你。你做了,能不能打动客户?那有其他 要素在左右你。

所以,很多需求,通常你是要赌的,既然要赌,早赌比晚赌更有优势,因为这个阶段,你 还可以组合你其他的限制(比如你的人力资源,你最近的客户需求等)。这就是所谓“知不 知上”,你早点确定这个点是个不确定要素,你进行其他判断就可以很顺利。你非要咬着你 的逻辑完美不放,就是求礼。求礼失道。

所以,好的设计文档都是破碎的:我猜我需要做这三个需求:xxxx(精确定义需求)。落 地到xxxx版本。为了完成第一个需求,我将做1,2,3个选择,其中第二个选择有很高风险, 我的保护措施是XXX,其他都是预判应该没有问题。第三个选择的逻辑链如下……

这是有效的设计文档。它会有很多选择错误,但错误就是它的目的(部分目的)

坏的设计文档都是道貌岸然的:XXX市场非常重要,所以需要做XXX功能(XXX是一个不精确 指向的名词),XXX功能是……(此处抄标准5千字,3副图),XXX的流程是……

这是垃圾,我一个字都不想看。