你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。
一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程,就是架构活动。架构活动是你作为架构师必须要认识清楚的,但同样也是很多架构师所忽略的。
那么我们就从分析架构活动开始,看看我笃信的生存法则,到底可以怎样保障你架构活动的成功。
影响架构活动成败的要素有哪些?
架构活动就是制定并且交付架构方案的过程。在整个软件架构的活动过程中,我们作为一个架构师,首先要做的就是确定架构设计方案。
这个方案需要和企业目标一致,与商业、软件环境相匹配,并且还需要满足各种资源的约束条件。而你作为一个架构师,要在这些方案中找到那个能够最小化资源和成本,最大化商业价值,以及最大化目标用户满意度的方案。最终,你还要组织技术团队交付这个架构设计方案。
这里我们需要明确一点,在一个企业内,大多数研发任务的交付都与架构师无关。多数时间,研发团队开发的软件解决方案和软件产品是用来服务用户的,不需要架构师的参与。但当面对跨多个团队,或者是大面积的技术改造时,就需要架构师参与到其中,来完成软件研发任务的交付。
如图所示,展示了架构师的全部活动,按照颜色分类,主要包括三个部分。
中间白色部分是架构师的决策领域,包括架构方案和架构活动。
需要强调的是,架构师对研发活动没有完全的决策权。也就是说,架构师无法决定研发项目的选择、优先级、排期、代码实现方式等等。
同样的,其他影响架构活动的因素,也就是图中白色区域以外的部分,架构师也不具备决策权。这些部分包括目标、商业环境、架构活动消耗的资源,以及产出的商业价值。架构师仅仅可以关注、影响和干预这些因素。
黄色部分指架构师的输入和输出部分。
输入不仅指架构活动消耗的资源(商业资源、研发资源等)和成本(时间成本、机会成本等),还指不受架构师所控制的部分研发活动。两者会综合影响架构活动的最终结果。
而输出呢,不仅指架构活动可能带来的短期和长期的商业价值(公司的规模、效率和体验等),还指架构活动为目标用户群体所提供的直接价值。这就意味着我们架构师必须时刻关注自己的输入和输出,它们是保证架构活动成功的前提。
蓝色部分指架构师的工作环境,主要包括企业所处的商业环境,如竞争、市场、监管等;企业内部的技术环境,如交互设备、sensor 网络、计算环境、外部的数据源等;以及企业和团队的文化环境。环境在很大程度上会影响架构方案的选择和实施路径,但同时也是大部分架构师最容易忽略的考量因素。
当我们把架构师的活动归纳总结后,很容易就能清楚到底是什么在影响整个架构活动的成败。我将它们总结归纳为六个要素,分别是:目标、资源、行为、天时、地利以及人和(要素的排列顺序与法则的顺序并不是一一对应的,在这节课的最后我会进行解释)。
第一个要素是目标。事实上,确定目标应该是架构规划的起点,所以深入理解目标对你的架构活动至关重要,但这一步往往会被架构师所忽略。
因此我们生存法则的第一条,就是教你如何去理解和干预这个目标,确保最终的架构活动能够为你所在的团队或企业带来价值。否则目标错了,你的项目永远也没办法成功。
然后是资源。我们所有的活动都要消耗资源且最终要创造价值,就是图中标记为 3 的部分,架构活动当然也不例外。在大多数企业里,甚至包括非盈利型组织,都需要关注有限资源的利用率,以及架构活动最终可以带来的商业回报。
所以我们生存法则的第三条,是关于你应该如何通过架构活动来最大化你所贡献的商业价值的。否则资源不足或者是消耗太快,你的项目也同样无法成功。
有了目标,有了足够资源,如果你还有正确的行为,也就是正确的做事方式,那你就能逐步逼近正确的架构方案,并且指导团队完成它。然而不确定性是互联网大环境的常态,那么身为架构师,你应该在周遭环境发生变化时做出什么样的响应呢?这正是我在第五条生存法则要回答的问题。
做成一件事情,如果周边条件成熟,环境好,那么事情就会进行得很顺利。反过来,如果条件不成熟,或者你逆势而为,那就会很艰难。架构活动也一样,影响它成败的要素也有天时、地利和人和。
先说天时,这里指的是商业环境和技术环境的变化趋势。环境复杂多变,那么看清楚变化趋势的本质,就可以让我们的架构决策顺势而为,借助于环境的变化来成就我们的团队、企业。这正是我们第四个生存法则要覆盖的内容。
再讲地利,就是你作为一个架构师待的地方,你所在企业的文化环境,这是我们作为架构师无法改变的部分。虽然没法改变,但“良禽择木而栖”。那么第六条法则就会帮助你选择最有利于架构师职业发展的文化环境,最大化你的成长。
最后讲人和,在上图中标注为 2,架构活动中涉及的人主要是研发人员和目标用户。在输入端,架构师需要与多个研发团队协作,因而理解研发方的核心诉求就尤为关键。在输出端,架构师产出方案的最终评判即目标用户的长期满意度。因此深度洞察用户的人性就是保证架构活动成功的关键所在。这是我们第二个生存法则要覆盖的内容。
理解了影响架构活动的这些要素,我们很容易就知道应该以什么样的视角来关注和干预这些架构活动。而我根据这些,提炼出了你作为架构师必备的六大生存法则。
如何利用生存法则,最大化架构师的成长?
简单来说,生存法则指的是我们作为架构师在设计架构方案和组织架构活动时必须要尊重的一些原则。如果违背这些原则,那么作为一个架构师的生存就会受到威胁。
之所以总结提炼这些原则,是因为在我二十多年的职业生涯中,一次又一次地看到我周遭的架构师,包括我自己,在违反这些规则后付出了惨重的代价。所以我会将自己经历的、看到的大量失败案例呈现出来。
我先简单陈述一下这六个法则的核心内容,然后再讲你应该怎么学习和应用这些法则。
第一条,架构师必须保障整个架构活动有且仅有一个正确的目标。这是架构活动的起点,也是甄别架构方案的主要输入,所以架构师有义务影响和干预这个目标,以确保目标本身的正确性。
第二条,架构活动需要尊重和顺应人性。架构活动既要服务用户,也要组织研发人员协同工作。这就意味着架构师必须洞察研发人员和目标用户的人性。从人性角度出发来做决策,才能保障最终面向用户的方案具有长期正确性,以及面向研发同学的实施过程具有可行性。
第三,架构师永远需要在有限资源下最大化商业价值。对于任何一个架构活动来说,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等,都是极其有限的,所以架构活动必须在这些限制条件下,最大化商业价值。
第四,架构选型必须要考虑到所依赖的商业和技术模块的生命周期。在架构设计的过程中,架构师会有一个相对确定的商业和技术选择空间。那么在这个选择空间内,理解、顺应且利用好商业和技术周期就至关重要。也就是说,架构师要看准技术趋势,一般情况下,要选择已经有规模优势或者是即将有规模优势的技术,而不是选择那些接近衰老期的技术。
第五,架构师需要在架构活动中不断干预活动的目标和内容,以同时保证整个架构活动可以为企业注入外部适应性。这是架构师个人能在架构活动中创造的核心价值,而且也是架构师职业成长的必须,甚至也是架构师的荣耀所依赖。最终正确的架构选型会因为有很强的外部适应性而长期存在。
第六,架构师需要在一个相对安全的文化环境中探索未知, 只有这样,才有希望找到正确的架构方案。文化环境是架构师最难影响的,因而架构师要有足够的判断力,认清自己所在的文化环境是否有利于探索正确的架构方案,不要在一个错误的环境中浪费自己的宝贵生命。
可以看到,这六个法则的顺序跟我们刚才提到的影响架构活动成败的六个要素的顺序不完全一致,原因在于我是依照法则本身的重要性进行排序的,而不是要素的结构。
不过看完这些你可能会问,法则这东西听起来感觉很虚、也很简单啊,难道你讲的法则有什么精妙之处吗?
这些法则确实平淡无奇,原因也很简单。软件架构是人类活动中很小的一个细节,而先哲们老早就总结了人类活动的各种规律,譬如经济学、社会学、心理学、系统科学等等,软件架构这个活动自然也跳不出这些规律。
而我要强调的是,在信息化时代,我们获取这些规律并不难,难的是怎么将这些规律准确地应用到软件架构活动中去。
因为信息泛滥正让我们面临着一个颇为严峻的问题:通过朋友圈、短视频、网课等获取的规律教育,往往是泛泛而谈,甚至和软件架构领域扯不上关系。所以当我们在软件架构领域碰到某个规律可以适用的场景时,不仅很难识别出来,而且也不知道该如何应用。所以我们并不是缺少生存法则,而是不知道什么场景下该应用哪一条规律,也不知道哪一条规律是跟软件架构领域有关的。
比如说我们常说的摩尔定律、康威定律,到底和架构活动的哪个部分有关呢?你做架构的时候该怎么考虑它们呢?
因此,我会花大量的篇幅去说明法则的上下文,从而达到这样一个目标:不是要你记忆法则,而是知道怎么识别某个法则的适用场景,以及出现问题后的干预办法。
所以我期望你用一种完全不同的方式来学习这个模块:请你不要简单地相信或者背诵这些生存法则,而是跟我一起解释到底是什么原因让我把某个规律当成架构师的生存法则。也就是说,当你学习整个模块的时候,你需要试图理解我是如何被我所经历的事件教育的,并由此推断出这些生存法则的适用环境。
打个比方,假设你相信上帝存在,那么你可以认为我被上帝安排了一连串的经历,从而得出了自己坚信的一套生存法则。但是假设某一天你给别人讲这门课,你的经历与我不同;或者是因为你相信了这些生存法则,让你避免经历我的痛,而你自己的痛彻心扉的经历,又会让你总结出另外一套生存法则来。
这样一来,你理解了我的经历,也认同其中的推导逻辑。那么当某一天,你恰巧遭遇了一个类似的场景,可能会迅速思考这个法则是否适用。或许事过境迁,我讲的法则已经不再完全适用,但法则的核心逻辑依旧适用。不论是哪一种情况,只有理解它的背景和推导逻辑,你才能决定是否冒一次有备之险(take a calculated risk)。
这就是我期望你学习这个模块后,最终能达到的理解程度。那,接下来的一讲,我们就开始学习第一个生存法则吧。