为什么我们无法避免复杂?

18-10-17 banq
              

是因为我们无意识崇拜复杂吗? 本文来自艾伯哈德沃尔夫

软件开发并不是真正的编程。任何人都可以写一个十行程序。真正的挑战是复杂的系统。如果一个系统如此之大,以至于单个人无法理解并进一步开发,那么模块化等概念至关重要。模块化将系统划分为小单元,这样每个人都可以处理,然后复杂性成为主要挑战,由于这种复杂性,单个人不能再实施一个项目,只能依靠实施团队,这导致了组织方面的挑战。

康威定律

康威定律在组织和软件开发方面非常重要。它指出系统架构代表实现系统的组织的通信结构。对于软件中的每个模块,都对应有一个组织单元;组织单元之间存在的沟通依赖,对应软件中的模块之间存在同样依赖关系。

然而,康威1968年的论文也描述了其他内容:如果一个组织想要开发一个大系统,由于大型团队中的沟通很困难,因此会在团队特定某个大规模下崩溃。由于沟通和架构相互影响,沟通不良会导致混乱的架构和额外的复杂性。

但康威更进一步:显然,如果可能的话,你应该寻求一个小团队可以实现的优雅解决方案。康威表示,经理的声望取决于团队的规模和他或她负责的预算。这就是为什么经理会争取尽可能大的团队和大预算。

起初这似乎不是问题。如果项目是由一个太大的团队完成的,那么有些人就会坐在那里什么都不做。这需要花钱,但不会危及项目或架构。但康威说,帕金森定律将会罢工。帕金森定律解释了为什么一些政府雇用更多员工,但仍然没有完成更多的工作。法律规定任务完全使用所有员工可用的时间。即使可以轻松快速地处理任务,也会有越来越多的人参与,直到组织中的每个人都忙碌为止。因此,在软件项目中,无论是否有必要,所有团队成员都将在项目上工作。因此,组织将成长,沟通将崩溃,架构将变得混乱。

Conway的洞察力现在已有50年历史,它特别有趣,因为它可以解释为什么一个大型重要项目可能有一个糟糕的架构,即使它是一个非常重要的项目也难以进一步发展。

本文所描述的管理者在没有意识到的情况下崇拜复杂性。他们希望尽可能庞大的团队,从而使问题变得复杂,因为大型组织可能导致架构崩溃。

软件架构师怎么样?

不仅管理者而且软件架构师有时会无意识地崇拜复杂性。例如,当我们使用诸如事件源,具有许多层或微服务的架构之类的模式而没有充分考虑特定上下文与复杂性的益处时,就会发生这种情况。

如果您想使用最新,最闪亮的技术,这也会导致过度复杂。毕竟,我们都在寻找技术挑战,并希望实施有趣的项目。现代方法,特别是复杂系统非常适合于此。

我们有时也会解决不存在的技术问题。这可能会产生非常通用或可扩展的解决方案,这些解决方案不是实际要求所必需的,因此会产生太多复杂性。

复杂性作为借口

一个特别明显的复杂性崇拜案例是“这对我们不起作用”。我们面临的挑战远远超过亚马逊或谷歌。“我听说过不同公司的员工。这些陈述令人惊讶:像亚马逊或谷歌这样的公司拥有极其复杂的IT系统。他们的经济成功直接取决于这些IT系统。尤其是因为这些IT系统,它们是世界上最有价值的公司之一。

乍一看,这些陈述可以被解释为具有防御性:亚马逊和谷歌拥有现代化的组织和云基础设施,但在公司更加复杂的环境中,显然不可能建立类似的东西。但也许这句话反映了骄傲。毕竟,你正在应对几乎前所未有的挑战。无论哪种方式,复杂性当然都有缺点,但也有一个优点,即您不必考虑某些方法,如云,持续交付或微服务,因为它们无论如何都无法实现。

因此,我们是否真的总是在避免复杂性是值得怀疑的。如果我们无意识地崇拜复杂性,那么仅仅专注于使设计尽可能简单和优雅的技术是没有用的。因此,实现这些无意识机制很重要。当然,仍然存在许多实际难以解决的复杂问题。

banq注:无意识崇拜复杂其实源自人之内心的自大。