好围墙造就好邻居:好的边界反而促进团队合作 - trondhjort


将我们的软件分解为模块时,我们常常忘记重要的社会方面。设计如何影响团队,可能使他们相互竞争。一个具有韧性和可持续性的系统需要和谐。
谚语“好围墙造就好邻居”描述了为什么我们的软件设计需要边界:不仅是解决问题并使其易于理解和管理的一种方法,而且还可以使您公司中的团队更好地相处并相互发挥最好的作用。不幸的是,我们过多地将注意力集中在前者上,而后者却以牺牲后者为代价,因为我们经常随意地将领域分开,这不仅会造成大量的技术耦合,还会导致团队之间的对抗,从而可能导致社会功能失调。我们需要在设计时更好地了解整体,意识到在处理高度复杂的社会技术系统时,旧的模型将不再起作用。模型不仅是错误的,而且是有害的。
这篇帖子部分取材于我在NDC 2021年伦敦举行的同名新演讲中。尚无记录,但可以在SlideShare上找到幻灯片。
 

我在挪威农村的西海岸长大,那里的石栅栏很常见,我经常攀爬并在上面玩耍,怀有美好的回忆。这些围栏用于标明农场之间的界限,我们的农场和他们的农场之间的界限,以及确保牲畜保持就位。
无论围栏放置在什么地方,围栏都有特定的用途,由于围栏的重要性和寿命长,因此投入了大量的思想和精力。他们不是被设计成墙,提醒您,这同样重要。它们仅应满足特定需求,而不会过多地阻碍其他人和野生动植物。在挪威和斯堪的纳维亚国家,我们对所谓的“allemannsretten ”(可以翻译为“漫游自由”),它赋予了广大公众使用某些公共甚至私有土地的权利。因此,栅栏不应违背这一权利,有些栅栏甚至应安装好梯子,以便人们可以轻松穿越。
 
我认为,在设计软件系统中各部分之间的边界时,这些围栏的用途,特定目的是什么,更重要的是,它们不是什么,我们可以从中学到很多东西。就像我长大的长满苔藓的石栅栏一样,在设计和建造它们时应格外小心,尤其要考虑到大局,尤其是其环境和放置环境。正如美国建筑师和系统理论家巴克敏斯特·富勒(Buckminster Fuller)所说:“您必须记住,任何边界都是有用的故事。” 它们经过精心设计,因此我们拥有世界上所有的力量来实现这一目标。
我们发现模块化在设计中很有用的原因有很多,它是通过将问题空间分成可管理的部分,一次只关注一点或减少零件之间的技术耦合来减少我们的固有认知负担。由于这本质上是社会技术系统,因此还有更多的收获,特别是在需要和谐协作和降低协调成本方面。精心设计的模块化应该会成为好邻居。
 
任何超过一定大小的系统都会自然地分裂,这在复杂性理论中称为自组织,也是您在与人之间的社交互动中所经历过的事情。当一个小组的规模超过一定规模时,它会分解为小组,一些小组甚至会建立自己的内部文化,从而将他们与其他小组区分开。“我们和他们”的观点是自然而不可避免的,如果不满足,可能会产生一些可怕的副作用。请记住露丝·马兰Ruth Malan)对康威定律的推论:“如果系统的架构与组织的架构不一致,那么组织的架构将获胜。” 在社会技术系统中,应该共同优化社会和技术部分。
 
根据定义,任何复杂的系统都将具有相互依存的部分,因此具有必要的相互作用,从而使该系统整体上具有新兴的作用,并且如上所述,我们希望这些作用尽可能地积极。为了做到这一点,我们需要摆脱不必要的协调,这些协调会阻碍整个系统。在我们的业务范围内,这意味着消除团队之间的交接,并使他们能够控制自己的手段和结果。我们希望团队能够自治并具有代理能力,避免团队之间的严格依赖。这就是为什么亚马逊的杰夫·贝索斯(Jeff Bezos)说“交流很糟糕;” 不会阻止人们一起工作,但团队之间的协调就越少越好,例如不需要离开团队的工作。
 
通过将协调成本降至绝对最低,团队可以控制自己的流程并缩短从构思到用户反馈的交付时间,从而提高速度。这些周期的缩短将帮助团队获得其软件及其交互的更好的稳定性和敏捷性,更好地适应其上下文和环境并提高其弹性。这自然也会影响整个系统,在该系统中,所有团队都具有相同的独立性和自治性,从而使整个企业的健壮性和可伸缩性更好。换句话说:不要扩展敏捷性,而是将组织扩展为自治的部分。
 
如果没有一些整体设计,就无法实现一个运转良好且和谐的社会技术系统,其中整体大于其各个部分的总和。随机出现且不受控制的出现并不一定会自己获得所需的结果,因为由机器来确定性地定义系统的旧机器模型不足以满足要求。需要一种系统方法来更好地迎合具有自组织、自适应和非线性的高度复杂的社会系统。需要自上而下和自下而上的组合,其中前者会引导后者朝正确的方向发展。之前,我已经从领域驱动设计中运用了相关技术,从外而内进行了论述,业务体系结构用户故事映射,但需要仔细研究如何将其与自下而上的设计结合起来以实现积极的发展。这听起来像是一个很好的话题,需要仔细研究。

坏习惯不能随便改,减肥不能随便减:切斯特顿栅栏和二阶思维的教训