原文链接:アーキテクトの選択(あるいは覚悟)

架构师的工作大部分时间都是在“做选择”,这些选择都是在一切发生之前所做出的,因此,一旦决定就不能更改了。

架构师所要选择的是静态的结构。方案一旦确定,就开始转入退化过程。随着时间的推移,系统的适应性会变差,对做出的决定进行修改往往要付出巨大的代价。

当然,项目经理对于进度计划以及项目人员体制等方面的安排也属于“事先选择”。但是,这些选择对象都属于动态的过程。

动态的过程能够随着时间的推移适应其过程中出现的变化。包括敏捷等迭代式过程在内的开发过程,它们都推荐在开发过程中设立短期目标并根据实际作业情况做出调整。这是非常有效的方法。动态过程承认事先选择中所发生的过失和偏差,且允许在事情发生之后做出改变。

有这么一说:“Good managers do things right (优秀的管理者会做正确的事)”,项目经理所做的是把握事先选择(计划)和事后情况(实际)两者之间的偏差,针对这些偏差对各种各样的参数做出调整,将项目的发展方向始终沿着预定的轨道不断进行修正。

然而,架构师的选择却是静态的结构,敏捷的推进方式无法适用于这些静态结构

对于静态结构而言,PO(Proof of concept/概念验证)或是建立原型等“基于尝试进行评价”的方法才是有效的。PO或原型等手段能够降低风险,促成事先选择,尽管如此,要让选择后的结果能够适应事后的变化,这些方法仍然无能为力。

那么,在这种情况下,架构师该如何做出选择呢?

《软件架构师应该知道的97件事》 中有篇文章:“24:重视不确定性 ”

Confronted with two options, most people think that the most important thing to do is to make a choice between them. In design (software or otherwise), it is not. The presence of two options is an indicator that you need to consider uncertainty in the design. Use the uncertainty as a driver to determine where you can defer commitment to details and where you can partition and abstract to reduce the significance of design decisions. If you hardwire the first thing that comes to mind you're more likely to be stuck with it, so that incidental decisions become significant and the softness of the software is reduced.

当眼前出现两个选项的时候,基本上任何人都会将选择哪个作为最重要的事情去考虑。但是,在设计(软件也不例外)中却不是这样。出现两个选项的情况就是一种信号,告诉你应该考虑该设计中所潜藏着的不确定性。

这一篇的作者Kevlin提到“在无法做出选择时,要先停一停,退回去想想”。虽然这一点非常重要,但是在项目中,无论如何,让别人停下等是不行的。就这么等着,直到某一天做出选择,进度上就难以保证了。

正因为如此,为了做出“必须这么做才行”的决定,架构师要尽其所能地做到眼前所能做的一切,这一点就显得格外重要了

对于不同的选择项,真正让你无从选择的原因是因为你无法确定判断的基准。因此,问题的重点在于寻找判断基准。

优秀的架构师总是能够缩小“判断”其本身对整个过程的影响。不管选择哪种架构,多少都是带着自信去选择的。但是,仅仅这样是无法得到“必须这么做才行”的理由的。

也就是说,要做出判断,不能仅凭眼前的基准,而是一定要找到某些能够起到决定性作用的参数。这些参数应该兼顾对时间和空间上的考虑。

1年后会怎么样?2年后呢?3年呢?

程序员的观点是什么?PM的观点是什么?用户的观点是什么?运维人员的观点是什么?

带着这些问题去考虑,拓展利益相关人(stakeholder)的观点,寻找用于判断的基准。单凭想象是不够的,所以亲自去了解一下各方的意见吧。这些利益相关人自身的行事原理和依据是什么?确立一个能提炼出判断基准的行动方针,去寻找答案吧!

这样,才能得到“必须这么做才行”的理由。

倘若不论怎么努力都无法得到“必须这么做才行”的理由,你一定会意识到其中所存在的不足。 这样就无法为这个选择而负责,或直面未来会产生的风险。

也许你会做出的选择并不正确。但是,一定要有“必须这么做才行”的绝对自信。为了做出“必须这么做才行的决定”而不断努力,最后选择了与自己的直觉最接近的方案,要坚定这样的想法。

如果没有这样的觉悟,是无法说服自己做出“必须这么做才行”的抉择的。不论项目的规模是大是小,架构方面的决定都将影响到与项目有关的很多人。架构师应该始终牢记这一点。

权力并不是事先给予你的,而是随着责任意识越来越强,权力会越来越大。架构师有了这种意识,无论面对谁,都能胸有成竹地回答:“这是正确的选择/这样做没错的。”

未来总是不确定的。但是,我们只能在现有的选项中进行取舍。为了做出“必须这么做才行”的抉择,要对战略方针进行推敲,而这不正是被称为“架构师”的这群人们其工作的本质吗?

译注

  1. 本文作者鈴木雄介是一名IT架构师,同时也是日语版《软件架构师应该知道的97件事(ソフトウェアアーキテクトが知るべき97のこと)》的译者。