阿里10年沉淀|那些技术实战中的架构设计方法
作 者 | 朱春茂(知明)
上周我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问题的方式对了,往往可以帮助大家少走弯路。
常用思考方法
技术常用思考方法
技术思考本质还是结构化思考,所以常见的结构化思考方法也是适用的。这也是大家会看到很多技术架构师都会用一些方法论去分析问题的原因。但这里我不是重新去论述这些常见的技巧,而是分享从技术实战中得到的一些思考方法,为此我分为了技术架构设计的方法和技术Leader的思考方法两类。
技术架构思考方法
0--->1
这个思考方法的含义是:
当我们在一堆迷茫和混乱中不知道如何下口时,应该先贴近问题本身,还原客观事实,并快速形成 1 个能够拉起认知并快速讨论迭代优化的版本。大家围绕着这样的一个初始版本去叠加和丰富其他维度的内容,直到方案的共识。
我举一个实际的CASE,大家在谈某平台能力升级的方案时候会经常喜欢用PPT画一些模块图,试图通过一些抽象的词汇来厘定清楚边界,核心概念。大家以为是在讲本质讲原则但实际所有人听了都是云里雾里,不知所云。因为通过概念去推导概念是无法真正回答问题的。
而比较好的应对方法我总结为以下三个步骤:
【用户视角的客观世界还原】
用户故事的串联,基于交互流程和真实的数据来描绘这件事在客观世界中用户视角看来是怎么发生的。这就是我们找准一个大家都能够共识的视角,让所有人快速把客观事实搞清楚画出来这个 1,而这个 1 就是后续讨论的靶子 。这个 1 的表现形式我认为往往都是很简单的,要么是交互时序图,要么是Excel表格,而不是复杂的模块概念图。
【客观信息的结构化整合与提炼】
只是树立起来 1 这个初始版本,还远远不够。因为第一个步骤只是将模糊、混乱的东西通过一种方法信息化表达出来,这还远远达不到使用的程度。所以还需要将上述信息进行结构化的整合与提炼,因为信息只有经过结构化才能够变成有意义的知识,才能够与之前的经验形成互动,也才能够进行初版的设计加工。比如对数据流的处理,就会发现有哪些是可以合并的同类项,有哪些平衡校验逻辑等。
【加入多元视角的检验与抽象】
通过第二步的处理把 1 这个版本变得更加丰满,但是要形成完整的可实施方案还远远不够。我们还需要加入更多维度的校验和抽象,比如进一步抽象以看透其本质,比如加入重要异常,ROI,合理性等扩展性等多方的视角去做校验。
所以大家以后在遇到很多方案谈不清楚的时候,不要去听别人讲什么原则,概念,价值等等虚头巴脑的东西。把大家拉回来,回到最简单的最朴素的东西来对焦,那就是 一张交互序列图 或者 一张表格。越快速从一堆迷茫中快速提炼出这个 1 ,就越容易快速拿到结果。
1--->0
这个思考方法的含义是:
当我们在做一个方案时面对无数因素无法抓住关键点时,我们应该考虑删除法(把这个 1 拿掉不要行不行)去寻找决定性因素,以确保我们是真正的抓到了关键点。
我举一个实际的CASE,每年都会做技术规划,相信这是很多架构师/Leader很痛苦的事。痛苦的根源就是在脑子里面有无数需求,有无数的待优化点,也有无数的想法在萦绕,看到每个点觉得值得在新一年做攻坚。最终多半形成的就是一个表格,把今年要做的事罗列下,最多还排个优先级,好一点的换个形式变成xmind或者PPT,再稍微好一点的可能会搭配上业务的目标和策略打法。但透过这些表面现象,其本质就是一个表格,没有抓住重点的表格。相信大家应该都看得蛮多的了。
如何应对这类问题我总结为以下几个技巧:
【因果判断法】
很多时候我们都在谈,要抓住事情的本质,要具备化繁为简的能力,其实就是在谈通过表面的结果去探究真实的原因。所以在看哪些是决定性因素时,大家不妨用因果法去检验:这个因素到底是深层次原因还是诱导的结果。
【树干树枝法】
有时候各个因素之间并不是单纯的因果关系,而是依附关系,就像是树枝依附在树干上一样。而我们要找到决定性因素,可以尝试这个方法去检验:如果把这个因素去掉会不会影响全局,是不是导致结论不成立。通过这样多轮的分析,是可以绘制出来树干的与树枝的关系,这个树干就是要找的决定性因素。
【支点撬动法】
有时候各个因素之间可能没有直接或者间接关系,或者这个关联关系太弱很难通过以上两个手段去确定关键点。可以尝试支点撬动的办法,即寻找可以激发这一堆要素的关键要素。我之前给团队举一个例子,国家抓经济肯定不可能是米面粮油各种琐碎地抓,肯定是找到几个关键点起到支点撬动的作用,如房地产行业。抓住这个就能够带动上下游产业,进而激发各行各业。
以上是目前实践下来的抓取关键点的一些方法。但这里一定也要注意一个粒度问题,千万不要走极端。比如一提关键点,就去思考本质,一提到本质就去找根因,一找根因就挖到人性,然后得出来就是人性的原罪问题。这种都是没有任何营养的做法,也不利于事情的推动解决。
1--->2
这个思考方法的含义是:
当我们思考一些抽象问题/方案时候,需要对问题进行拆分(一分为二),通过分而治之的方法来确定每个小问题的边界,通过对小问题的解决来降低全局的思考难度,以尽快形成解决方案。
这个应该不需要举例子了,大家日常都应该有所接触,这里只是列举几个比较典型的技术架构动作:
【纵深拆解】
拆解是非常好的一个将问题分而治之的办法,但要注意的是要做有机的拆解而不是物理的分解。比较典型的案例就是关于故障指标这个课题的处理,我是见过有团队层层分解,把故障指标分解到每个同学身上,这是极其错误的做法,也不可能得到想要的结果。我们应该是要做拆解,就是把要守住故障指标这个结果拆解成哪几类关键动作,进而要求团队关键动作做到位,而不是强行分解指标。
【横向解剖】
1--->N
业务场景:这是最原始的生存资料,更是平台演进的源动力。典型的如市场份额变化,用户体价值的变化,竞对动态等。
团队组织:是人创造了平台,也是主导平台的演进发展,这个生产资料如果不能得到有效利用,充分释放能动性就会出现平台无法支持业务快速发展,同时人也在平台中内卷。
技术架构:技术架构其实本身也是非常重要的生产资料,这是很多人会忽略的地方。大家想一个最简单的例子,同一个变量分散在多个地方导致语义不清,维护成本巨大就明白了。
【架构考虑所有可能性但做有限明确实施】
【没有靠谱的人只有靠谱的机器】
【提前思考“幸福”的烦恼】
-1<--->1
【正反思考法】
【极限思考法】
【对称思考法】
M*N--->M+N
【解耦上下游关联性】
【解耦各个角色的依赖】
总结
技 术 好 文
🔥你不知道的 HTTPS 压测
🔥如何帮助业务丝滑配置?阿里巴巴用了 11 年的“功能开关” 是什么?
无需修改代码,用 fcapp.run 运行你的 REST 应用
代码覆盖率在性能优化上的一种可行应用
企 业 案 例