仓库源文

.. Kenneth Lee 版权所有 2018-2020

:Authors: Kenneth Lee :Version: 1.0

一样还是不一样


今天评审一个配置库方案,大概的意思是要把几个git库放到一起,形成一个repo。评审的 时候有几个项目组提出质疑:git用得好好的,现在又让我学repo,这不是没事找事吗?我 们那么多管理制度都是和原来使用git的时候是配合的,现在引入新的东西,What's the point?

这个情况倒是一个我以前老说的“为学”还是“为道”的一个好例子。从这个东西牛不牛,好 不好宣传,是否比原来更有说服力的方向来说,我们可以说出repo的好多好处,因为“增加 ”逻辑,正是“考虑周到,逻辑严密,牛逼”的一个标志。

“为道”呢,那是要事成,比如负责产品交付的项目组就不是这样看这个问题的:写了那么 多脚本,都是为了可以自动化提交代码到git库上,CI平台也是基于代码是在git库中来写 的集成,你觉得加个repo是个简单的事情,尼玛老子的脚本都要重写。老子一堆特性要交 付呢,搞个repo干哈?吃饱了撑的?

这个例子可以简单用来理解为学和为道的区别。但现实比这个复杂得多,在这个方案中, 其实我是站台repo这个方案的。我评审的时候给了这样一个意见:我们为什么要上repo? 因为原来我们可能有几个git库,比如一个发行版,我们可能有kernel, uefi, grub, fs四 个git库,你重新建一个统一的git库呢,原来单个库上的信息就丢了。为了既可以复用原 来的git库信息,也可以统一管理。所以我们才上的repo。但这里就有一个关键了:你为什 么要统一管理?你是否形成了一个有互相关联的管理结构?你要把什么东西互相关联起来 ?

换句话说,上repo是必要的,但方案的作者没有设计好。

这时作者就出来辩解说:我有啊,我有啊——你看我这里列出了所有的git库了,我这里确实 也给出了他们的关系了……

我靠,这个完全就get不到point。

实际情形是:这个评审最后没有达成共识,记录了一堆的“遗留问题”,下次再来。

方案不是怎么做的。

方案是一种架构设计,既然是架构设计,它就是设计的一部分——很小的一部分。这很小的 一部分,决定了整个最终产品的最后的样子。所以,它的方向比它的内容重要得多。

你要引入一个新的概念(这个例子中的repo),你首先要调查的是,你为什么要引入这个 概念,这群接受这个方案的合作者,他们的目的是什么,然后用这组目的组合你的设计逻 辑,说明:如果不用这样的方案——你们没有更好的选择。

而如果他们不同意这个方向,那这个就是另一个问题的了,“你们可以和需求提出方掰去—— 这不是我设计者的事”。(这就叫“不争”)

所以,尽管你也画了User Case图,你也列出了模块,你也设计了流程,但你这个还是没法 满足产品的要求,没有办法让客户满意,为什么?你只学了样子,填充了内容,这些内容 是没有结构的,(请注意前面的逻辑:架构设计仅仅是全部设计的很小的一部分),你怎 么可能取得共识?

而我们看到评审会议上的讨论很明显印证了这一点,大部分人都在讨论自己的问题,从 repo扫盲谈到项目间的分工,从项目的分工谈到整个产品的前途,从前途讨论到追究责任… …这个问题怎么可能有结果?(“为学”不是不好,但一旦我们回到“目标”上,“为学”是没结 果的啊)

所以,很多设计师以为自己“务实”,写文档的时候往往忽略大部分设计模板中都有了“ Introduction”的部分,不愿意定义:

没有这个东西,哪里有逻辑链?没有这个逻辑链,你的设计怎么会有说服力?——请再次注 意这点:架构设计是全部设计的很小一部分,要细抠,你永远都是抠不赢的。

不考虑清楚Introduction,你以为你“立即进入设计”是省时间,其实都是浪费时间而已。 Introduction说的东西似乎都是大路货,其实那个才真正控制了整个设计的范围,决定了 资源需求,整个事情的成败,很大程度上也在这里。你看它不起眼,那不过是因为它的天 性就是“无名”的而已。

补充2018.4.16:(由于是公开的内容,事件内容针对隐私进行更改,只是为了说明问题, 请不要和任何实际的事情对应起来)

写完这个文档后,又看到一个类似的胶片,一样的毛病,我把本文抄送过去了。对方给我 这样回复:“这个胶片想解决的问题是:想试图用这个胶片给大家讲讲XXX怎么用起来,做 个简单的介绍”。

我对此的答复是:

  1. 大家是谁?给他们讲的目的是什么?就算是个简单的介绍,都是有目的的,比如科普艾 滋病,是希望“普罗大众”注意用血安全,不要滥交,要不要过度怀疑,歧视艾滋病人等 等。没有没有目的“科普”。科普或者“简单介绍”不是一个描述缺乏目标的理由

  2. 怎么用XXX,是有范围的,不定义范围。我作为一个被“科普”或者“简单介绍”的对象, 都不知道该不该Take你的这个“介绍”。“怎么用XXX”,谁规定这样用的?谁“承认这样用 的”?你说的XXX具体是什么?什么范围内的?——随便一个人跑过来,就跟我说“怎么用 XXX”,这个信息对我来说,跟没有一样。

你看,我每次说的东西都很简单,但其实只是听着简单,做起来可一点都不简单。因为这 个世界上,如果真要做事,大部分的工作量都是“无名”的。而很多人,都只愿意做“有名” 的事,这样就只能浮于表层了。