如果你在软件开发领域待过一段时间,你可能已经意识到,技术问题只是一半的挑战。
当然,你需要了解架构模式、编码最佳实践,以及如何在不让应用像叠叠乐(Jenga)塔一样倒塌的情况下进行扩展。但让我们面对现实吧:最大的挑战并不总是来自代码本身。通常,构建软件最困难的部分是处理人文方面的因素。
在我 18 年与团队合作处理从小型项目到大型企业系统的经验中,一个真理变得极其明显:软件架构关乎人,也关乎代码。你可能拥有有史以来最整洁、最具扩展性的架构,但如果你的团队动态失衡,你的项目就会陷入困境。让我们深入探讨人的因素如何塑造软件架构,以及为什么它与理解微服务或事件驱动系统同样重要。
关键在于沟通(或沟通的缺失)
让我先坦白一件事:我曾参与过一些团队,在那里,天才般的架构计划因为没有人费心去妥善沟通而分崩离析。我指的不仅仅是技术细节在传达中丢失(虽然这种情况也经常发生),我指的是最简单、最纯粹的人际沟通。
假设你的团队正在开发一个新功能,而你应该为此构建一个健壮的微服务架构。每个人都很兴奋。
问题出在哪?
一半的团队成员认为你们将采用基于消息代理(message-broker)的通信模型,而另一半则假设 REST API 将处理一切。直到两个迭代(sprint)之后,当事情开始崩溃且每个人都在互相指责时,你才会发现这一点。
现在,如果事先有一个简单的对话——整个团队就架构方法达成一致——情况可能会大不相同。但在快节奏、永不停歇的软件开发世界中,很容易跳过那些“显而易见”的沟通步骤。这就是为什么架构图绝不应该只存在于架构师的脑海中。把它拿出来,写在纸上(或白板上),然后讨论它。
架构决策不仅仅是选择模式和工具——它们是为了确保团队中的每个人都理解并认同同一个愿景。一次沟通失误可能导致数周的工作浪费和大量不必要的重构。所以,第一课:
如果你想让你的架构取得成功,沟通是关键。如果有必要,请过度沟通。这是值得的。
团队动态影响技术决策
软件架构绝不仅仅是一个技术选择——它通常由负责构建它的团队所塑造。我见过这样的情况:团队选择了单体架构,不是因为它是系统的最佳选择,而是因为他们没有资源或专业知识来管理微服务的复杂性。
在另一个例子中,一个团队选择了一种最前沿的技术栈,不是因为它是合适的,而是因为他们的首席开发人员渴望尝试一些新颖(且酷炫)的东西。
在这两种情况下,决策都不是由技术需求驱动的,而是由团队的舒适度、技能水平,甚至是个人的自尊心驱动的。
事实是:你的团队结构塑造了你构建的架构。如果你有一个经验有限的小型团队,选择一个超级复杂的架构就是灾难的药方。你可以拥有世界上所有的最佳实践,但如果你的团队无法实施它们,你就是在自寻死路。
另一方面,如果你有一个高技能、跨职能的团队,他们能在复杂性和创新中茁壮成长,你可以更多地突破界限。关键是将你的架构选择与团队的能力相匹配。这就像在没有训练的情况下跑马拉松——你可以拥有世界上最好的跑鞋,但如果你没有准备好,结果不会太好。
所以,第二课:
了解你的团队。根据他们的优势和局限性量身定制你的架构选择。这并不总是关于选择“最佳”解决方案——而是关于选择最适合你团队的解决方案。

组织文化对架构的影响
你所在组织的文化对你构建的软件有巨大影响。如果你在一家视速度高于一切的公司,你会感受到偷工减料的压力,而这将影响你的架构。
也许你会跳过一些重要的设计步骤,因为业务部门昨天就需要这个功能。或者,你可能会推进一个易于实现但难以扩展的架构,因为这是时间表所要求的。
我曾经在一个以“足够好”为座右铭的环境中工作。一切都是为了快速交付功能,即使这意味着缺乏质量保证(如单元测试)并积累技术债务。
结果呢?
它奏效了——在一段时间内。但很快,那些权宜之计就开始让我们付出代价。那个由胶带和良好意愿维系在一起的架构,在面对新功能、增加的流量和扩展性需求时开始出现裂痕。最终,我们别无选择,只能付出代价:大量的错误修复和重构让我们倒退了数月。
另一方面,我也待过一些将质量视为首要任务的组织。当然,进展较慢,但架构坚固、可扩展且易于维护。这里的教训是?
你组织的价值观将塑造你的架构。如果你经常面临快速交付功能的压力,你可能会发现自己为了短期利益而牺牲长期稳定性。

最好的方法是找到平衡。了解你组织的压力和约束,但不要让它们强迫你做出长远来看会损害系统的决策。在必要时进行回击,并争取做好事情所需的时间和资源。
人重于模式
让我们不要忘记,软件架构不仅仅关乎技术——它关乎人。团队沟通、协作甚至争论的方式都会影响他们做出的决策。我见过一些团队,其中一位意志坚定的架构师在没有征求开发人员意见的情况下强行通过决策。
结果呢?
纸面上设计精美的系统,却让团队感到愤恨,因为他们没有参与决策过程。
我也见过相反的情况:决策由委员会做出,结果一事无成,因为没有人能达成共识。在这两种情况下,人文动态完全掩盖了架构的技术价值。
我合作过的最好的团队是那些每个人都有发言权、决策是协作做出的团队。当然,架构师或高级开发人员可能有最终决定权,但他们会积极寻求开发人员、测试人员甚至产品负责人的意见。
当人们感到自己参与了过程时,他们会更投入地去促成成功。架构变成了团队共同构建的东西,而不是从上面传达下来的东西。
完美架构的神话
最后,真相是:不存在所谓的完美架构。每个系统都有权衡(trade-offs)。每个架构都有缺陷。这没关系。
目标不是构建完美的东西——而是构建一个适合你的团队、你的组织和你的用户的东西。
归根结底,软件架构关乎处理人际关系的混乱和技术约束。
它关乎理解纸面上的完美解决方案可能并不最适合你的团队。它关乎保持灵活性,适应不断变化的需求,并平衡构建软件的人的需求与使用软件的人的需求。
所以,下次当你深陷于系统设计时,请记住:这不仅仅关乎代码。它关乎编写代码的人、使用代码的人,以及你工作的环境。把这些处理好,你就已经在构建真正伟大作品的道路上迈出了坚实的一步。
软件架构的人文面是混乱的、不可预测的,且充满了惊喜——但这也正是它如此有趣的原因。
https://www.linkedin.com/pulse/human-side-software-architecture-how-people-just-code-rakia-ben-sassi-clwqe