天下武功 唯快不破

引言

这个演讲的标题是《天下枪法 唯快不破》,副标题是《江湖人称二炮十三秒的快枪手分享对快的思考》。如果是在小范围内分享,使用这样的标题,对宅男腐女来说还可以,既可以讨论问题,也可以调剂气氛。如果演讲的现场突然来了好多人,使用这样的标题就不太合适了,毕竟我们中也有纯真的,看到污段子就感觉身体不适,比如我。如果范围再扩大,有各个团队的人,甚至还有一些领导参加,我们的演讲就要正式很多,不能胡云八侃。这些情况往往是到了现场才会知道的,这个时候演讲的标题已经打在了幕布上,临时更换就不太合适。即便要临时更换的话,也要重新思考新的标题、新的副标题,还要打字换上,既需要时间,也显着不优雅。

如何在神不知鬼不觉间,以魔术级别的时间换掉标题?这就引入了我们的主题,“快”。

如何做到这么快呢?其实我提前准备几个标题就可以了。范围稍大,我们演讲的主标题可以是《天下剑法 唯快不破》,副标题可以是《什么叫做快? 如何做到快?》。如果范围再扩大,这种以剑客自居,给事物下定义的做法就显得太狂妄了。在大佬云集的场合做汇报分享,说话要严谨。我这个特定的个人,在一段特定的时间里,通过观察一些特定的人、一些特定的事,对开发速度这件事作了一些思考,现在给大家分享一些思考的片断。主标题也不能乱篡改,还是要恢复到大家都知道的《天下武功 唯快不破》。

其实第一组标题的副标题使用了三个典故,一个污的、一个不污的、一个中性的。至于你看到的是哪个,这是一个知者见知、淫者见淫的事情。我简单讲解中性的这个典故,其他的两个大家可以根据兴趣深入研究一下,限于时间不再一一讲解。二炮,就是解放军第二炮兵部队。当然前段时间军队改革,改成了火箭军。在液体燃料、井式发射的时代,灌装液体燃料从准备到完成要几个小时,甚至以天计,发射井建设要以年计。但是军委下了二炮打击决心,导弹发射从准备到打出去,是要以秒计的。军队的口号是召之能来、来之能战、战之能胜。军委下了打击决心,你说要花几年挖发射井,花几天灌装燃料,那哪行呢。这个项目delay,估计我们都被人团灭好几轮了。

在正式开始之前,我们不能不纪念一下金庸(1924年3月10日—2018年10月30日)先生。我们在这里提到的很多概念,都是读他的小说知道的。

其实这个主题主要讨论的是两个问题,什么叫做快?怎样做得快?归根到底,讨论的是一个POWER问题。什么是POWER,知识,力量,科学,真理,权柄、话语权?知则有权,比如知府、知县、知心姐姐,都是有权柄的。在现实中,不可能、也没有必要做到无限快。我们做到比对手盘的预期快就可以了。比如,比老板的预期快、比产品经理的预期快,比项目经理的预期快,比合作伙伴的预期快。

什么是快?

  • 快是响应的时间短
  • 快是效率高
  • 快是成本低
  • 快是要素结构没有瓶颈
  • 快是生产力发生革命性质变
  • 快的预期需要管理

缩短响应时间

一副神奇的画

当年360和腾讯在3Q大战的时候,腾讯公司迅速封掉80端口的接口,掐死360的网页应用。为了满足大量用户使用网页聊天的需求,腾讯迅速推出了QQ的网页版本。我简单看过这个网页版本的产品,作为一个前端工程师,马上就能判断出,这是一个不可思议的工作量。腾讯公司是怎么在一两天的时间内快速推出这个产品的?

以前经常思考7×24的快速反应团队,他们是怎么做到的?就像一副神奇的画,一个小牧童,牵着一头牛,拿着一把伞,晴天的时候伞是夹着的,下雨的时候伞是撑开的。太神奇了!

2011年5月1日,22名海豹突击队乘坐直升机奇袭本拉登位于巴基斯坦境内的住所。三个月以后,2011年8月6日晚,塔利班民兵用一发RPG火箭弹命中了CH-47直升机,其上乘坐的22名海豹突击队员全部遇难。塔利班发布新闻,宣称他们干掉了袭击本拉登的海豹突击队22人队。美国人紧接着发布新闻,说明遇难的22人是袭击本拉登的22人队,但是不是那22人。这组新闻看得我云山雾罩,啥意思啊?我仔细捋了一下才知道,海豹突击队一支22队是分三组22人的。在同一时间,有一组在执行任务,有一组在战备训练,有一组在休假。从此以后,我对7×24的快速反应就有了深刻的理解。

听刘宝瑞先生说单口相声,那副神奇的画卖20万,买家一番砍价,砍到了10万。拿回家后,趁下雨的时候大宴宾客,想嘚瑟一下神奇画作。但是,伞却没有撑开。然后找卖家理论,卖家说这画是卖20万的,你非得砍到10万,那只好卖给你这一张了。

QQ的网页版本魔术是怎么实现的,我不知道。以理度之,我猜是这样,为了应对市场的需求,腾讯的产品开发团队开发出了一个网页版本的QQ。硬生生的掐断线上已有方案,代价大、阻力大、成本大,所以迟迟不能上线。当此之时,爆发了3Q大战,决策团队审时度势、快速决策,直接把锅甩给了360。

科学没有神奇,神奇都是领域内行表演给外行的魔术。

三家快剑流派

丁坚的一字电剑剑光唬人,是快剑。田伯光刀光闪烁,逼的令狐冲只能招架不能还手,是快刀。这些都不讲,因为太LOW,使起来夺人真气,缺少一种行云流水的美。昆山刀客7秒钟砍5刀,3处骨折,全是开放性创伤。刀法虽然凌厉,也不过是市井斗狠的小角色,不值得效仿。

今天咱们层层递进的讲三种剑法。

第一种,出手都是咄咄逼人的进手剑,特点是环环相扣,一气呵成。想不出金庸武侠里哪家剑法是这个路子,先不起名字了,姑且就叫无名剑吧。以后想起来再说。

第二种是华山派的独孤九剑,不再是连环出剑,只是在对手出招时出手反制。后发先至,也是咄咄逼人。

第三种是全真派的定阳针。一起手,剑气就笼罩自己以防身,笼罩对手随时取其狗命。这剑法温文尔雅,眉目间洋溢着慈悲喜舍,浑身上下散发着真理的光辉。

无名剑

魔教几位PM抬着一口大锅,猛得向武当派FE张五侠砸过来,把素素妹子担心的够呛。翠山在大锅飞至头顶时,一挥手长袖飘飘,五根手指借力使力,扶住大锅一旋,这锅就改变方向往魔教PM们砸去。魔教PM们吓得赶紧四散躲开,那锅咣当就砸在地上摔得粉碎,地面都砸出了尺把深的一个坑。他长袖飞舞,手掌隐在袖中,旁人看来,竟似以衣袖卷起大锅,掷向天空一般。整个天鹰教顿时鸦雀无声,片刻后彩声四起。素素嘴角上扬,得意的笑着扑进了白眉鹰王的怀里。

PM们手脚没有什么轻重,别管看见什么,都会随手扔过来,不能使蛮力硬接。这次他们扔个大锅,你硬接了。下次他们念动咒语,使个遣山之法,把三座大山调过来压你,你何以应对?你就是齐天大圣,也会被压的三尸神诈七窍喷红。

张翠山借力使力的甩锅手段虽然高明,但并不能解决问题,不能有所斩获。甩锅是另一个话题,不是我们今天要讨论的。借力打力能解决问题,但不是剑法,今天也不讨论。

当一个大问题、一个大需求,像一头大活牛被扔过来的时候,产品经理也觉得这个东西像热狗一样,个头并不小。别一方面,主要是觉得是个活的有机整体,并不能分解。

面对一头大牛,我们不可能像王思聪吃热狗一样一口吃掉。要像前辈丁厨师那样,提剑在手,仔细观察大牛的结构,认真思考大牛各部分间的关系,大胆动手切割。根据切割的实践,再调整观察、思考和用剑方法。

这里边有一个知行合一的问题。认识问题各部分之间的结构、动手的先后顺序,以及结构之间、先后之间的关系,这是其知。手起剑落,不胆怯不迟疑,动作麻利,是其行。知行合一就是,用观察思考的认识指导落地行动,以行动的反馈加深、升华认识。队列、优先级加权队列、泳道队列等等,都是问题结构分解、次序解析的好手段。

我们在一件事情上,浸淫日久,对问题的结构和解析次序,一般是有认识的,通常失于迟疑。

当时曹操在官渡,北有袁绍在冀州,东有刘备在徐州,这是问题的结构。先灭刘备,再灭袁绍,这是解决的次序。这一认识,当时熟知时势的人,都能认识到。曹操之所以是用兵如神的军事家,就在于官渡军中虚立丞相旗号,亲自带兵以偏将名义闪击徐州。在袁绍迟疑之间,徐州城破。当事态明朗,袁绍知道怎么回事儿的时候,曹操已经回兵防官渡了。

换我们处理这个问题时,会发生什么呢?对问题的结构和解决的次序没有什么不同,区别是对动作有迟疑。闪击徐州动作不麻利,刘备就有所准备,问题发生变化。钝兵徐州城下,进不能拔,退为所乘。迟疑之间,袁绍主力破官渡,过黄河,历史就为之改写了。

把问题按结构拆开,各个击破,依次解决。在这里,快不但是目的,也是过程和手段。

华山派的独孤九剑模式

我们还是以打仗来举例。先入战地者为主,后入战地者为客,这个大家都是很清楚的。显然你先到达战场,先有所准备,就会更有把握打胜仗。怎么样使用兵力可以快速的抵达战场?答案就是伏兵最快。

老板有一个创意,产品经理提出一个需求,我们开发团队拿出一个事先埋伏好的系统,这个响应时间是不是最快?

我们工程师刚开始写代码的时候,应变能力不足。几次碰壁后就会学乖,会在代码中打埋伏,提前处理需求可能会出现的变化。马上出现的问题也很明显,就是写了大量未来永远也不会用到的代码,而未来实际发生的变化,又在意料之外。这样就会使开发时间旷日持久,代码臃肿。设计过度,事与愿违。

解决的办法,有很多种,其中一种就是独孤九剑模式。了解业务,了解需求,更准确地研判未来的变化。

令狐冲剑法通神,风清扬传授的秘诀之一,就是不管对手准备使用什么招数,一定会有征兆。认真研究这些征兆,准确地判断对手将要使出的招数,就可以提前埋伏,出剑克制。

了解这些征兆并不难,眼观六路,耳听八方,认真观察,认真思考。业务、产品、研发各团队通力配合,及时沟通,就不会有突然出现的大需求,就可以提前打埋伏。

我们很多人比较认真,其实就是杠子头,硬问如果就是没有征兆怎么办?没有征兆,突然出现的东西,里里外外透着一股子妖邪之气,大家可以脑补一下这种现象。西天取经的时候,孙悟空火眼金睛,总能识别妖怪。他看到了什么?唐老官肉眼凡胎,他看不到的是什么东西?其实猴子看到的,就是没有征兆。啥都没有,所以唐老师就什么也没有看到。我们的工程师们,是在各种需求的三昧真火里锻炼过的。只要认真观察,认真思考,你就会看到事情发生之前的征兆。没有征兆的需求,有时间就玩一下,没有时间就一棒子打死。

认真研究征兆,提前有所准备,就可以表现的非常快。

全真派的定阳针模式

在2008年以前,听到过一个做绿植的人抱怨奥运会的绿植招标。 奥运会的绿植招标,需求、方案、预算都是保密的,不能告诉你,但是让你去投标。需求都不知道,我怎么投标啊?当时那个人就是对这种招标方式非常不满,甚至以阴谋论看待,认为这里面有猫腻。后来我认真思考过这一问题,得出了自己的看法,这里分享一下。如果你是一个一流的绿植公司,在这个领域有不可动摇的话语权,那么你就比奥运会的招标委员会更加懂得可能会有什么样的需求、可能会有什么样的技术手段、可能会有什么样的方案、可能会有什么样的预算?

保密单位保密的原因可能是出于保密的考虑,我们的产品经理保密的原因八成是因为没有想清楚。这个也不能全怪产品经理。事情是渐进明晰的,系统没有做完,没有上线,他就不知道想要一个什么东西。也有可能是因为,事情的本身就一直在变。这些是客观的存在,只能在一定程度上解决,并不能彻底的解决。所有的应对策略,都必须应对这种不确定性。

应对这种不确定性,方案有很多种,其中之一就是定阳针模式。

一个领域问题的光谱,都会有两个端点。在这两点中间,数学意义上有无限个点。在这两种极端场景下,很多表现都是不相同的,甚至截然相反。如果见招拆招,头痛治头,脚痛治脚,就会疲于应付永不休止。在这个时候,我们需要找到适用于这两种场景的规律性认识,并找到解决相应问题的方案,用科学的方法给予证明。这些科学的方法,包括并不限于DEMO验证和沙盘推演的思维实验。这里需要强调的是,并不是所有的认识和所有的解决方案,都要在实际项目中落地实施,大部分是给予科学证明后放入工具就可以了。

DEMO验证这一方法,有必要简单展开一下,包括概念验证,生产验证,规模化验证,规模化系统验证。

如果工具箱的工具质量足够高,我们就可以说你这一招定阳针使的精、气、神俱足。两个端点中间的任何一点,都在你的剑气笼罩之下。在实践中,任何一个点冒出问题,你就可以在一瞬间拿出工具解决掉,一剑封喉。这样的状态,才叫做气定神闲,仙风道骨。唯一的毛病就是平时需要做大量的储备,需要厚积薄发。毕竟台上十分钟,台下十年功,没有什么捷径可走。

日常写代码的时候,如果一个功能第一次出现,命令式也好,面向过程也好,都是可以接受的,你并不需要写出来应对未来所有变化的代码。但是,要用你犀利的眼神,注视你面前的这个问题。这个家伙未来的变化,有没有在你的剑气笼罩之下。如果没有,你前进后退左右一步能不能cover他。如果不能,走位几次可以?除了脑补这些低速的、偏于静态的招式变化,还要思考这个家伙变起仓促的可能性。事变之前会有什么征兆,事变之后会有哪些方向,以哪个招数的哪个变式克制?对的,出招就是独孤九剑。五湖四海皆兄弟,天下武林是一家,定阳针和独孤九剑是可以同时使的。

我们以jQuery时代的写法举个例子,让某个ID的元素实现某种效果。第一步就是先实现,毕竟能上线的代码才是好代码。作为一个优雅的前端工程师,你可能想写成一个组件。如果伸头是一刀,缩头也是一刀,不增加什么工作量,写个组件也好。如果要用不少时间,就且住,毕竟鬼才知道这个效果将来还要不要了。当然,不进行组件化并不妨碍你在写代码的时候,在不增加工作量的前提下,把代码写的优雅,易于组件化。写成组件,一般来说第一个参数是元素ID,将来就可以换ID为不同元素实现同一效果。进一步的话,就是配置组件的效果。且住且住,大胸逮不要自己加戏了。顶多加个配置对象作第二个参数,后面的所有写法纯脑补就够了。一定要克制你设计过度的冲动,冲动是魔鬼。

function demo(id, options){}

那些为快所付出的代价

可能大家想得到一种神奇的东西,掐个诀念个咒语,或者断然割掉身体的某一部分,速度就无比的飞快起来。现在讲了这么一大段,似乎是一定要更强,才可以更快。是的,没错!一定要更强。我们通篇的主题是POWER,如果你不能更强,就是被割的韭菜、被宰的羔羊。这就是宿命。

响应快,有成本,有代价。在某个点上响应太快,就会整体效率低下,整体代价高昂。这是后文要讨论的问题。但是,作为Leader、产品经理、项目经理,必须很清醒的认识到这一点。在工作中最常见的问题之一,就是假定响应快的成本等于零。

总而言之一句话,就是要想缩短一点响应时间,就要数量级的增加需要付出的艰辛努力,就要数量级的付出成本。这里只是讨论了努力的方向,和付出成本的方式。

当然,我能理解大家的诉求,提高了效率、降低了成本的快,才是真的快。

提高开发的效率

同样的产出,使用不同的时间,就是不同的效率。效率要不断提高,这个是没有争议的,是有共识的。但是,对时间度量、对效率的观察,有不同的视角,比如项目经理视角、团队视角和架构视角。观察视角不同,就会产生不同的观察结果,不同的观察结论。

项目的效率

项目是对不确定性的管控。管控的效率就是项目的效率。

团队的效率

团队是人的招募、培养、组织和选拔,工具装备的选用。用人的效率,使用工具的效率,就是团队的效率。

架构的效率

架构是不同质要素的结构。各要素的协同效率就是架构的效率。

整体的效率

有视角的效率都是片面的效率。整体效率是从上帝视角观察到的效率。

战区管战讲得是管项目效率,军种管建讲得是团队效率,军委管总讲得就是架构效率和整体效率。

有一个管总的机构,对提高效率是否有效率,以及必要性的程度,都是一个极具有争议的话题。毕竟副主席被斩下两三个,四总部主管被斩下两个,这些都是反面的证据。

提高效率,不一定会降低成本。有的效率提高是以线性的、算术级数的、几何级数,甚至指数级别的提高成本为代价的。

对公司这样的盈利机构来说,降低成本的效率提高,才是有意义的快。哪怕效率没有提高,速度没有加快,只是降低了成本,都是有意义的。

降低开发的成本

我干一天活,公司给我一百块钱,这是会计成本。当然如果一百块钱也不给我,我就不干了。

这里要讨论的成本并不是工资成本,作为一个严谨的经济学家,要讨论的肯定是经济学意义的成本。这里引入经济学,并不是为了吹牛X,而是因为经济学研究的是如何以最低的成本实现最高的效率。

主要讨论五种经济学成本,分别是机会成本、比较成本、边际成本、准入成本、沉没成本。

机会成本是最大的代价,也就是说你为了做这一件事情,而不能做的另外一件最有价值的事情,就是做这一件事情的机会成本。所以最有经济学效率的做法,就是一直做最有价值的事情。当然,什么是有价值,还需要再讨论。

你如果做次重要的事情,那么最重要的那一件就是你的机会成本。只有一直做最重要的事情,机会成本才会降下来。以掐尖策略处理事务,可以快速缓解各方痛点的压力,非常出快的感觉,这是无名剑的路子。如果步步为营,一个一个的死磕问题,非常容易钝兵坚城之下,进不能拔,退为所乘。

曾国藩结硬寨打呆仗的路子,并不是死磕,要诀是结硬寨,是建立基础设施壁垒。

比较成本是机会成本的另一个说法。一强一弱合作共事的时候,非常有意义,比如带人。

大家平时所接触的开发成本,一般是边际成本,就是每新增一个功能所需的成本,通常以PD计算。所以,平时需要降低的也是边际成本。提高效率可以降低边际成本,这里不展开讨论。除此这外,边际成本要想压低,一般就要增加基础设施的投入,形成边际成本壁垒。这一壁垒的投入成本,就是准入成本。

当我们投入了巨大的准入成本,或者获得了边际成本壁垒,或者什么都没有获得,屁都冇得。不管怎么说,这投入覆水难收,是沉没成本,没有经济学价值。这投入是造价,是会计核算需要考虑的问题,是老板心中的痛,咱不管他。

降低边际成本的手段,一般是设计新的架构、可复用的组件、选用新技术等等。我们以架构成本作展开讨论。评价架构的标准主要是对降低边际成本的贡献。架构的成本基本上可以分为几类,开发成本、看守成本、介入成本和推广的成本。

新架构最好的成本结构是,明显的、大幅的降低边际成本,看守成本小于旧架构看守成本,介入成本等于零。由此可能会大幅增加开发成本和推广成本,关键是如果不能上线,覆水难收,就会归零。

破解要素结构上的瓶颈

制约速度的生产力要素是环环相扣的。解决好瓶颈问题,才可以解放生产力。

要素是有结构的,提高效率的方法也是有结构的。在浅水区的时候,一个要素的进步就可以大幅度的提高效率,降低成本。但是,进入深水区,要素结构的研究就是唯一的路了。

要素结构中的瓶颈问题,就是运动的摩擦力。在有动力加速度的情况下,没有摩擦力的世界是不可想象的。我们的速度只可以更高、更快,无限逼近无限快,而不可能,没没有必要达到无限快。

比如要素可以划分为团队、项目、架构和整体管理,比如要素可以划分为工程师、工具装备、制度和流程,等等等等。之所以不提具体的东西,而是说要素结构,是因为不同的要素结构需要不同的理论来定义的。能指导实践的理论,就是好理论,科学的实践需要科学理论的指导。

这里说的理论,是用于识别要素结构、识别短板瓶颈、提出系列问题,并指导补齐短板,解决瓶颈问题的。我们要不断研究,找到这样的理论,统筹协调要素结构,压茬改进。

重点突破,让其他要素全部成为短板当然是坠吼的了。工业革命中蒸汽机出现,就是最好的示例。这种是生产力的革命,后文讨论。

某一要素出现革命性创新,如果事前没有进行规模化系统的验证,系统结构上的其他要素就会形成普遍性的瓶颈,革命性的要素就会出现开工不足,千里马拉车、拉磨骈,骈死于槽枥之间的事情就会大量出现。用老百姓的话说,这叫窝工。

当然,如果假定革命的成本是零,要素效率的革命性提高是天上掉下来的馅饼,那这一切都不成为问题。然而实际上,要素革命往往是系统养的大白象。系统常态中,不但根本就没有产出,而且只会源源不断的产生沉没成本。

提高效率、降低成本、统筹要素结构,都可以促进生产力水平的提高,但只是量的变化。生产工具的革命、生产关系的革命,才可以带来生产力质上的革命。

迎接生产力的革命

革命并不是饥饿和暴力,而是具备压倒性优势的先进生产力取代落后的行为。

在生产力水平基本不变的条件下,改进生产工具,改进生产关系,就可以取得巨大成功。举两个例子。

初汉三杰的韩信,连百万之众,攻必克,战必取,向无败绩,山东六国一个人灭掉四个,这是很厉害的。读史书分析,秦汉之间生产力并没有革命性的变化,以当时的通讯工具、交通运输工具和作战装备来说,能组织运转起几十万上百万的人来,那项目管理和团队管理的能力确实是真的很厉害。这是改进生产关系取得成功的例证。

在项羽之前,马匹是当动力用的,主要是用于运输,运输粮食、运输兵员。所谓兵车,也是马拉的车,步兵拿长矛长戈站在车上对捅。项羽是改革了对马匹的使用,以马匹代步,发明骑兵战法。我们所熟知的使用长杆兵器的骑兵形象,是明朝发明马蹬以后才有的战法。项羽的骑兵战法很LOW,就是人骑在马上,左手抓住马鬃固定身体,右手拎着砍刀挥舞。就是这么LOW的骑兵,项羽组织了三万人,就把刘邦的五十六万大军,从今天的江苏徐州一直追杀到河南的荥阳,老婆孩子都陷落了。直到遇到山地,步兵据险而守,骑兵不易展开,才止住败势。直到韩信的汉军在北方平定了魏国、赵国、燕国和齐国,政治上又争取了彭越和英布,才扭转了荥阳的败局。这是改进生产工具取得成功的例证。

可以想像一下,生产力发生革命,生产工具发生革命、生产关系发生革命,是一幅什么景象。

中国的骑兵战法始于项羽,终于1949年的咸阳阻击战。大家设想一下,三条防线依次发力。首先是第三防线,各种火炮集中开火。依然冲上来的骑兵,其次由第二防线各种轻重机枪、卡宾枪集中开火。还能再冲上来的骑兵,就在第一防线展开白刃搏斗。对方骑兵使用的马刀短、重、钝,解放军这边使用的是在太原战役中缴获的日本军刀。日本军刀从材质到工艺,都有工业化背景,长、轻、锋利。

世界范围内终结骑兵的是马克沁重机枪。有上面的讲解,这里不再展开讲解了。

这就是生产力的革命。

我们绝大多数人没有能力发起生产力的革命,甚至没有机会遇到大革命。小范围内生产力的革命,发生的概率更大一些。如果遇到了,不要迟疑,去拥抱变化。

管理快的预期

掌握了对快定义的话语权,就可以无限快。有人问科学家波普,您是怎么做到一直站在科学的浪潮之巅的?波普笑了笑说,你们没有发现这浪潮是我涌起的吗?《黑冰》。你跑得再快,也不如给快重新下一个定义。可能你会说,哎呀,你不讲规则。是的,这个世界的规则,是由POWER定义的。