高级需求分析
昨天评审一个Strategy Plan,我挑了几个逻辑破绽,作者辩解说这几个点还没有定,还回 过头来找我要这些决策是什么。
我觉得这种问题我经常碰到,每次到了碰上的时候不可能在现场科普怎么做需求分析。所 以我下来决定把这个逻辑建一次,以便以后好用。
针对客户的需求分析,从来都没有你需要的所有逻辑的。
比如你接到一个需求:我们需要一个RDMA(Remote Direct Memory Access)方案。你不能 说:你还没有说清楚要什么协议的RDMA呢,你也没有说清楚这个方案要不要开源呢,也没 有说清楚给我哪个团队来做呢,也没有说这个用到RDMA的进程要不要热迁移呢……
你说的“很有道理”,但这些道理抵不过另一个道理:“需求方有钱”。
什么条件都知道了,要你做需求分析作甚啊?
我们内部过去对需求有两种简单的分类:OR和DR(原始需求和设计需求),现在流程复杂 了,有更多稀奇古怪的名字。但本质还是这两类:原始需求是客户一下子想到的,没有经 过多少思考的,但真的是有可能投钱的那个需求目标。而设计需求是经过工程师梳理,设 计和判断的,变成接近可以设计的那个需求。需求分析,分析的就是这个OR。
严格一点说,OR和DR也没有本质区别。你做一台手机,找屏供应商说:我要一个屏。这个 算是DR还是OR?对你来说这是DR——我都对如何分解手机做了设计了,都决定要有个屏了。 对屏供应商来说,这算什么DR?你要什么屏?多大?什么接口?啥都不知道呢。这分明是 OR。
但这些都不要紧,高层设计阶段本来就是需求方和被需求方互相妥协的过程。所以需求分 析工程师不是应该关注OR条件够不够,他关心的是,需求方提出的那句话,背后到底是什 么意思。
需求方说要RDMA,你以为他说的是你认为的那个意思,大部分时候都是你想多了。找你来 实现,是因为你是专业的,你知道的比他多。你怎么能认为你跟他的认识是一样的呢?找 你要RDMA,可能根本是他的数据中心要和沙漠里的射电天线同步数据,他想把数据拷贝回 来,听说了“远程什么什么访问的”这个概念,所以就找你要解决方案了。你那些什么 RoCEv1v2,InfiniBand之类的,根本就不适合干这个事情,因为你根本就没法建网。他需 要的是一个把数据拷贝到一个适合极端环境的硬盘,定期找人把硬盘拉回来,然后把这些 数据很快同步进中心数据库,好让那些科学分析程序开始进行分析。弄什么板间通讯,完 全是想多了。
对于Strategy Plan(以下简称SP),这是一样的道理。你作为一个产品部,或者一个平台 部。公司要发展,就要把你们多个部门的战略进行合并,决定今年为你的战略发展投多少 钱。然后你说:这也没有定,那也没有定?如果都定了,要你做什么SP啊?找一个高层的 战略部门给你做了不就结了?你是这个领域专业的,你的第一步,就是要对其他人进行预 判,给出你的观点,然后和其他部门的战略进行PK,最后大家互相平衡,形成统一的战略 合作。结果你说:这个东西还没有定,我做不了。其他人也是怎么说的。那还做啥?
所以,无论是SP,还是构架设计,都是这么个模型:大家都按各自的理解,先给出每个子 集认知的静态的逻辑链,然后我们再把这些逻辑链拼在一起,消除冲突,然后再变成每个 子集各自独立的逻辑链。在这种情况下,你需要对你的逻辑链的条件做假设,如果其他人 不同意你这个假设,可以提出质疑,这些假设的条件,都是你逻辑链的一部分。大部分架 构设计中,你都会看到“假设和依赖”这个章节,它的用途就是这个。
这里要特别提醒的是,我们要进行“假设”,但很多假设其实是非常难做的,不是说“反正是 假设,随便选一个吧”这样的。比如明年中美贸易关系是否会脱钩?这个你没法判断的。但 它可能又是你逻辑链非常重要的依赖,你的方案就可能需要分成几种变体:彻底脱钩怎么 办?相生相杀怎么办?全面恢复又怎么办?战略,战略!战略是一个全集的思考,不是逻 辑链建起来就算了。最后还是得回到那个问题,你是要完成任务,“我没错”,还是要最终 那个结果?
对于要结果的人来说,选也是选,不选也是选。要做架构设计,SP,需求分析,任何时候 都是选,是不能“我等你的结论”的,你可以去调查更多的信息,但在一定的时间内,你是 必须选的。选就有风险,但不选的风险常常更大。我们降低风险的方法是响应变化,不是 不选。
这个问题说远一点,我觉得我接触中不少阅读道德经和心学的人总进不了门。也是有一样 的思维误区的。我把这个误区称为“因果思维”和“Pattern思维”的区别。因果思维是认为每 个结果都是某个因决定的:只要我从不吃垃圾食品,我就一定能活一百岁。只要我刻意逢 迎,我就一定能尽快升官发财。只要我把代码开源了,别人都会来给我贡献代码……如果这 个不成立,他们就会反过来:天天吃垃圾食品不要紧,你看某某某从来不吃,不是一样出 了车祸吗?没必要出去跟那些人沟通,你看我天天给某某领导拍马屁,这家伙这次升职居 然没有把机会给我。开源没鸟用,开了也没有人看……
道德经和心学的思维模型不是这样(包括科学的模型也不是这样的)。这些理论的模型是 :我不知道未来会怎么发展,但从我收集的信息看,这个部分的信息呈现这么一个模式, 那我的选择就顺着这个模式中“可能性”最高的方向去选择。选择以后,新的信息会补进来 的,我手上的信息会呈现新的模式,我下一步的选择就根据新的Pattern进行选择就是了。 我不相信“名”给我分配好的Pattern,我要发现名字背后的Pattern。所以知不知上,所以 知行合一。这都是如何认知手头的信息的问题。你看到“领导”这个词,只能想到这意味权 力,想着得到这个“权力”,然后就可以为所欲为了。这是“控制”的思维:我掌握这个因, 所以我能控制那个“果”。而道德经对领导的判断是“受国之垢”:领导者不是做事那个人, 不是做判断的那个人,而是“拍板”那个人,而“拍板”这个名字背后意味着:“出了事他负责 ”。道德经没有打算去改变这个名字,这个名字是你们选择出来的结果,我们要知道的是这 个结果,我们不需要给它换一个名字。我们只要知道:只要你要当领导者,你就必须打算 好接受这个“垢”,这是领导的本质,这是自然。和大怨必有余怨,你是要避这个余怨,不 是要你去到处背垢,就能成为领导了。通过背垢去成为领导,你的目的不就是想“得到权力 ,然后去控制”吗?
又比如,智这个词,粗糙一想,好像就是“脑子好厉害”,“脑子特别大”。但观察这个词的 判断标准,看看说别人“智”的人是根据什么来说别人智的。那么,所谓“智”,本质就是“用 更少的动作做别人要做很多动作才能完成的工作”。所以从因果观看这个问题,就是我要变 得更“智”,从而可以控制别人。而按Pattern观来看这个问题,当有人判断某个东西“智”, 我们看到的是这个人用了别人的力量来完成这个任务。如果这些都是我团队中的人,“智” 这件事情就没有什么意义了。
所以,每个名其实不是我们理解中的你以为自己抽象的那个意思,而是你如何用这个名来 判断事情。名字是个分类,分类的目的是进行判断,你判断什么,才是那个名的意思,而 不是抽象的细节是它那个意思。
所以,明白什么是知行合一了吗?你说的东西不是你说的那个意思,但你做出来的,做出 说出来的那些事情本身,决定了我们对你的“知”(本质上也是你自己的“知”)。
所以不用说那么多“我是”,“我不是”,这些东西没有什么意义的。做事情就好好做事情, 做战略判断就好好想自己下一步怎么办,什么是自己的判断,什么是外部的约束,然后根 据综合结果进行决策,不要想着“我没有错”,错了的时候,说一万遍“我没有错”,没有人 会跟你争辩。