
今天的软件专业人员需要在技术、业务和社会的复杂性迷宫中穿行。根据 Xin Yao 的说法,在这种环境下要想成功,需要的不仅仅是技术和业务知识。我们需要在解耦系统以获得可维护性、重新连接它们以创造业务价值、以及处理组织动态的混乱性方面应对自如。在面向对象(OOP)大会上,Yao 探讨了社会技术设计如何帮助我们应对这些挑战。
软件面临的最大挑战之一是需要同时解耦和连接,正如 Yao 所解释的:
开发人员被期望将系统分解为模块化的、独立的部分,同时还需要了解如何重新连接它们以创造业务价值。一个结构良好的 API、消息队列或数据契约可能在今天是有效的,但随着业务需求的发展,必须要重新审视这些连接。
Yao 认为,随着软件的老化和业务环境的发展,必要的更改——重构、重新架构或重新思考系统边界——通常不仅会因技术难度而受到阻碍,还会受到团队的社会复杂性、决策结构以及角色边界和组织动态的影响。
软件存在于人类系统之中,然而许多开发实践都假设软件工作的人类方面,如沟通、理解、决策和协作,可以像代码一样被整齐地结构化和控制。但社会的复杂性是突现的、不可预测的,并且充满了矛盾,Yao 说。
Yao 提到,不一致的激励、僵化的团队结构、权力动态和变革疲劳通常会给可持续架构带来障碍。她补充说,许多团队缺乏开放、反思性对话的必要条件,导致肤浅的解决方案无法解决潜在的社会约束,因此设计很脆弱。
Yao 提到,除了技术上的卓越之外,社会技术适应性也是关键。她提到了进行深度协作、反思性对话和参与式决策制定的能力:
像促进、提出问题、积极倾听和协作建模这样的技可以帮助团队驾驭不确定性,并将软件与人类需求对齐。
社会技术适应性的先决条件是社会技术意识,将我们的软件工作视为系统之系统。Yao 争论到,设计软件、业务需求以及两者背后的人之间的关系至关重要:
认识到这一点的开发人员和架构师不仅仅是在构建软件——他们还在培养一种环境,在这种环境中,通过信任、共享语言和对意义的持续协商,好的软件可以出现。
Yao 说,软件并不是和社会系统并存的,而是嵌入其中的。我们的工作是一个复杂的社会系统,由复杂的技术子系统组成。技术子系统是嵌入式的,它不是一个我们可以独立优化的孤立的机器;它在不断成长、变化,并与人类的决策、工作流程和权力结构纠缠在一起:
每一段代码都带有塑造它的对话、误解、约束和妥协的痕迹。
这种嵌入性使得软件本质上比仅仅是技术部件的集合更复杂。同一段代码可以根据使用它的人、团队如何解释需求或决策权如何分配而发挥不同的作用,Yao 说。
软件不是纯粹的不可预测性。像 DDD、CI/CD、容器化和 TDD 这样的实践为技术领域带来了可预测性,Yao 说。但这种可预测性在人类互动层面上崩溃了:
挑战在于知道什么时候依靠可预测性,什么时候拥抱突发性。这就是从软件设计到社会技术设计的转变。
我们不应该急于寻找解决方案,而应该参与到塑造我们整个社会技术系统的更深层次的问题中——关于意义、关系和权力动态的问题,Yao 建议道。通过这样做,我们避免了过早的收敛,并创建了反映业务领域和人类系统真正复杂性的解决方案。
InfoQ 采访了Xin Yao,讨论了如何处理社会技术复杂性的问题。
InfoQ:在尝试将架构与组织结构对齐时,需要避免的关键陷阱是什么?
Xin Yao:许多组织旨在实施逆康威策略,但在实践中却举步维艰。一个主要的陷阱是假设仅仅改变团队结构就能解决架构问题。更有效的方法是根据团队如何自然协作和发展来迭代调整边界。
复杂性需要协作。社会复杂性的大爆炸分而治之(即重组或转型)并不是解耦和连接软件的灵丹妙药。
InfoQ:讲故事在驾驭社会技术复杂性中扮演了什么角色?
Yao:故事有助于将抽象的复杂性具体化。它们使团队能够提出假设、建立共同的理解、培养心理安全感,并参与富有成效的对话。
原文链接:
https://www.infoq.com/news/2025/05/sociotechnical-complexity/
评论