事件风暴创始人Alberto:“团队拓扑和DDD有界上下文映射的关系”

VSole2022-08-08 10:06:35

正如Matthew Skelton和Manuel Pais所著的书中所描述的那样,团队拓扑的概念正受到全世界的关注。对团队结构和目标的关注引起了有趣的讨论,许多组织正在采用该模型作为其开发团队组织的参考。

同时,由于问题空间似乎与上下文映射的某些高级概念重叠,因此领域驱动设计从业人员也有种似曾相识的感觉。这是我尝试了解两全其美并了解不同方法的利弊的尝试。

问题空间主要是未知领域

大多数组织有机地增长,在积压的压力下规模不断扩大。规模不断壮大的团队将不得不分裂,能力将变得更加狭窄和专业化。然而,标准的划分方法(即使不是很多)已经被议论不休,到底是围绕业务能力划分还是周围技术技能划分?结果是永远不会完美,留给决策者的感觉,也许另一种方法本来可以更好...

更糟糕的是,每个组织都将调整团队和组建团队的责任交到不同的人手中:这是团队领导者的责任,还是开发负责人?还是CTO?为此,我们需要特定的角色吗?我们是否总是需要升级到生态系统级别,还是团队之间的协作只是一个本地问题?

你被spotified了吗?

缺乏参考模型也说明了Spotify模型的流行:一个在团队模型和协作模型上尝试不同模型的组织迅速成为灵感的来源,并带来了许多意想不到的后果。像精益和丰田一样,其他人也遵循该模型,而没有过多地关注使该模型在特定环境下可行的要素。

简而言之,大多数无关紧要的软件开发组织在此领域都会遇到某种摩擦。软件团队之间的协作是成功公司的关键基本特征之一,但是无摩擦协作似乎是一种幻想,因此,如果IT专业人员寻求指导,这并不奇怪。

团队拓扑分类

团队拓扑描述了四种团队类型:

  • 基于流程协调的团队专注于特定的业务能力,理想情况下是跨职能的;
  • 平台团队为其他团队提供公共服务;
  • 复杂的子系统团队一支高度专业化的团队,并且对系统的一部分有特定的了解;
  • 支持团队的专家团队,指导和帮助其他团队发展和改进。

尽管这些概念并不新鲜-它们源于对许多不同生态系统的观察-有趣的是,它们提供了词汇表和一些参考模型。您可能希望将此原型列表视为吸引优秀团队的吸引者,但同时请注意,它们只是四个!

您的组织正在做的一些奇怪的事情未在此处列出,也许是有充分的理由的。这些是运作良好的团队的参考实现。

三种互动模式

据团队之间的关系,描述了三种模式:

  • Collaboration 协调:
  • 当两个团队紧密合作以实现共同目标时进行协作;
  • X - as a service 某个东西作为服务:
  • 在使用方面有联系的情况下即服务,但很少有具体的协作;
  • Facilitation 便利:
  • 一个团队正在帮助一个团队摆脱障碍。

四种团队类型与三种互动方式如下图:

上下文映射模式

战略性领域驱动设计提供了关于相同问题空间但结构不同的有趣观点。

几乎没有明确提及团队,但主要假设是在中型软件组织中,这两个概念之间存在紧密的映射关系,因此重点主要放在有界上下文上。

是有界上下文团队吗?

不,有界上下文的定义类似于给定模型的适用范围。但是,只有当一个团队负责模型的给定部分,并在整个社会技术体系中建立联系(与业务代表交谈)时,才能进行复杂的领域理解,这是领域驱动设计的基本要素。并测试代码,与用户互动等)。

DDD社区对此有一些公认的智慧,让我们明确一点。

  • 一个团队对应多个有界上下文

一个团队可以管理多个BC吗?是的,这通常是小型组织的规范。

但是,好吧……大多数小型组织似乎对边界分离不太在意。实际上,实现良好分离的唯一方法是显式实施分离:从大型可见映射到代码库分离。

实际上,最难管理的是相关开发人员的认知负担。您一次只能深入了解一个模型。尽管一个团队可以建立许多模型,但您必须非常善于明确界限。

  •  更多的团队对应一个有界上下文

我们可以有两个团队在同一个模型上工作吗?显然,是的。我的意思是:绘图似乎很简单。不幸的是,在相同界限上下文下工作的两个团队通常是骚乱的前奏。团队通常有不同的积压和优先级,歧义会迅速在代码库中腐烂,从而加速向“大泥巴”的过渡。通常,您不会拥有如此庞大的BC,足以证明有多个团队在为他们工作。所以不行。

有趣的是,Spotify模型在该方向上有所发展,放宽了代码库的所有权,以降低协调成本(再次是通信带宽),同时减轻了采用强大的工程实践而降低质量的风险。但是,它们没有BIG共享的有界上下文,而是许多具有宽松所有权规则的较小的上下文。

  • 一个团队对应一个有界上下文

理想的选择似乎是在有限的范围内规定一支团队参与。

但是一些细节被遗漏了。例如组织规模。上次检查时,我在内部软件中计算了20种不同的有界上下文。这是否意味着我们需要20 *(7±2)个开发人员来编写我们的软件?对于一家5人的公司?Come on!

但是规模并不是这里唯一的问题:不同的BC并非以相同的速度发展,相同的将会增长。另一个会稳定下来,理想情况下会长时间保持不变,但是闲置团队的概念在企业中并不那么流行,一个风险是因为团队填满了积压的订单。团队与有界上下文之间的关联是暂时的,并且会随着时间而变化。

协作模式

上下文映射的重点不是团队的外形大小形状,而是必须支持协作的模型之间的关系。

一个有趣的概念是上游(上文)还是下游(下文)的概念:将一种模式与另一种模式的政治影响相对应。但是基于这种类型的推理,我们有一些描述可能的协作类型的模式。这是一个简短的摘要。

  • 伙伴关系模式:
  • 两个团队相互依赖,并为实现共同的目标而合作。
  • Customer-Supplier客户-供应商模式:
  • 目标仍然很常见,但是依赖性不太对称,优先级可能会有所不同。
  • 无论如何,谈判都是可能的。
  • Conformist遵从者模式:
  • 采用一种模型,而另一侧的更改最少。
  • 下游方只是得到他们所得到的。
  • 反腐败层:
  • 仍在下游,但我们未采用外部模型。
  • 实际上,我们正在编写一个厚适配器,以使我们的模型与外部模型严格分开。
  • Open-Host开放主机模式:
  • 在上游,我们的模型可以在我们的条件下提供给外部用户。
  • 当然,我们需要通过文档等明确说明这些条件。
  • Published Language:发布的语言模式:
  • 交流渠道上的通用语言可以使更大范围的对话成为可能,尤其是在对话语言由第三方维护的情况下。
  • 共享内核模式:
  • 该软件的一小部分在不同模型之间可能是相同的,但这意味着在触摸此代码时要有更高的关注度和质量,更不用说依赖性了。
  • 分离模式:
  • 最好的依赖关系就是我们所没有的依赖关系。
  • 有时,将事情分开是这样。
  • 泥泞大球(Big Ball of Mud):
  • 如果没有适当的边界,并且代码库成为工作的可怕之地。

在DDD中,当绘制“上下文映射”时,这种分类变得很有趣,绘制映射会迫使我在开始项目之前询问相关问题。例如,如果我的团队打算在一个不可靠的平台上,在一个业务关键项目上保持一致,那我会挥舞红旗。

从早期开始,我就喜欢使用上下文映射模式来捕获不同费用支出上不同方法的成本。一个合作伙伴需要更少的代码,但需要很多沟通带宽就成为可能,而一个反腐败层正好走向相反的方向,写更多的代码,因为没有对话是可能的。遵从者Conformist将使您只需要很少的代码和对话就可以了,但是却要降低质量。没有免费的午餐!

沟通交流带宽实际上是这里的关键因素。如果没有足够的带宽来支持它,那么协作就不会发生。

比较两种目标

最明显的区别是上下文映射目标不是团队,而是模型。另一方面,“团队拓扑”的目标建议是:针对模型的认知会不断进行优化,这与每个有界上下文中只有一个团队的概念非常吻合。这是两种不同的目标。

  • 两种目标针对现在或将来的两种状态

团队拓扑为期望的状态提供了参考目标,而DDD上下文映射为评估当前状态提供了更细粒度的模式。

泥浆大球显然不是理想的状态,但这是描述您的可怕日常现实所需的词典的一部分。

我这里确实将上下文映射用于将来的状态,但主要是作为软件设计工具,而不是组织设计工具。在这里,团队拓扑似乎在用作参考模型方面具有优势。

  • 选择有后果

两种目标的共同点是使结果明确。协作的成本很高,因此需要适当考虑这些成本。我去过很多地方,管理层邀请团队进行更多的沟通,同时填写积压和增加截止日期,从而使沟通变得几乎不可能。

仅有三种交互类型团队拓扑(Team Topologies)的轻量级教条主义是迫使管理层做出选择并承担后果的一种好方法。仅仅告诉人们合作和沟通并不是一种策略。

同时,快速更新我们的当前状态上下文映射仍然是检测当前协作状态中是否存在捣糨糊的好方法。

  1. “我们正在与A团队合作:
  2. 我们每周都有会议!
  3. ” →客户供应商模式?
  4. “他们只是对我们要求的每件事说'不'。
  5. ” →不...遵从者模式。
  • 断裂平面Fracture planes

团队拓扑将断裂平面讨论为将系统分解为不同流的自然方法。但是我对领域驱动设计非常感兴趣,无法爱上这个隐喻。好吧,我知道有个理想的位置,可以将系统切入松散耦合的有界上下文,并有效地划分团队之间的职责,我在书中写了整整一章,内容涉及如何从Big Picture EventStorming中提取此信息。

但是我也知道,要打破整体巨石,那绝不是要切断坚固的板岩。这更像是在有分支和节点的地方砍木头。您将尝试遵循这条路线,但是您将意识到,有些事情并不会那么容易被分开:有些东西会以错误的方式共享,但是使用起来又很大又很危险。

切断的地方可以是一个大类,一个大表或两者的组合。大混乱处在一切中心。

这就是隐喻听起来对我来说太容易了的地方。有很多方法可以解决这个问题(我在一个旧的演讲中谈到了它的实质),但是它们需要一定程度的精通。

还有需要考虑:

  • 组织规模:
  • 当您的开发车间为20+或50+时,团队拓扑开始变得很有趣,而当您以独奏模式进行编码时,也会有有界上下文。
  • 业务压力和资产组合管理:
  • 如果没有积压压力的健康检查,则设计团队之间的完美和谐将惨遭失败。
  • 如果团队承受压力,协作将不会按预期方式进行,但是我仍然看到太多组织无法为多个从属团队进行计划。

最后,我保留了我最喜欢的想法:我认为,当今围绕“团队拓扑”进行讨论的最重要的结果就是关于一个理想状态是什么样的。大多数组织从未见过健康的组织(严酷但真实),因此提供参考模型绝对是一件好事。

请不要陷入将这种理想状态视为稳定的陷阱,也不要一劳永逸地解决团队结构问题。每个解决方案都将是短暂的。合作是暂时的,每当上下文发生变化时都需要进行审核。但是,您肯定会拥有更好的工具来做出正确的决定。

上下文关系模型
本作品采用《CC 协议》,转载必须注明作者和本文链接
一年前,ChatGPT问世,以强大的信息整合推理和语言对话能力惊艳全球,随后,以大语言模型LLM(以下简称“大模型”)为代表的AI技术应用全面席卷,赋能千行百业,重构业务流程,加速产业升级。
针对现有的静态代码分析工具有较高的误报率与漏报率,提出一种基于切片依赖图(Slice Dependency Graph,SDG)的自动化漏洞检测方法,将程序源代码解析为包含数据依赖和控制依赖信息的切片依赖图,然后使用图神经网络对切片依赖图的结构进行表征学习,最后使用训练的神经网络模型预测待测程序源代码中的漏洞。在 5 类常见缺陷分类(Common Weakness Enumeration,CWE)
长期以来,人类试图创造智能体来提高生产效率。随着人工智能从六七十年代的专家系统,发展到八十年代的概率推理,再到近十年的机器学习,机器已经初步具备人类的分析能力(Analytical),甚至在许多领域比人类做得更好,例如垃圾邮件检测、商品推荐、图像识别、欺诈信息识别等。然而,人类不仅具备分析能力,还具备强大的创造能力,例如设计产品、撰写诗歌、制作游戏等。因此,生成式AI技术也逐步取得跨越式发展,并在
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留。查看下pid所对应的进程文件路径,
云计算的概念从提出到现在已经近 15 年时间。最初,业界大多将云计算架构分为基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),这种基于虚拟主机(VM)为主体的虚拟化技术,从 IT 架构视角进行划分的方法虽然清晰但有局限性,因为它并不是完全站在应用和业务视角。
为了统一业界对关键术语和定义的认识和理解,规范术语和定义的使用,在工业和信息化部的指导下,工业互联网产业联盟对工业互联网术语和定义进行了汇总、梳理、研究、讨论,在此基础上,编制形成了《工业互联网术语和定义(1.0版本)》。
模型允许有效理解自然语言,并使用潜在结果的概率分布。我们可以从以下两方面展开来看:1、ChatGPT 带来的网络安全新威胁首先,从开展网络攻击的角度来看,ChatGPT 这类生成式人工智能是偏向于威胁行为者的。其次,目前已经看到有威胁行为者正在使用 ChatGPT 来开发恶意软件。虽然 ChatGPT 的代码编写能力的质量结果好坏参半,但专门从事代码开发的生成式 AI 可以极大地加速恶意软件的开发速度。再者,ChatGPT 大大降低了威胁参与者基于技能的进入成本。
6G移动通信网络将通信的领域边界从物理世界进一步拓展至数字世界,通过在物理世界和数字世界之间提供即时、高效和智能的超连接来重塑世界,这一趋势将开启移动通信的新篇章。6G网络超大规模的全局性连接将给网络的运营和管理带来巨大挑战,亟待革命性的理论和技术创新。
如今Node.js凭借其跨平台、高性能的JavaScript执行环境,被广泛应用于服务器端和桌面程序(如Skype)的开发。在过去几年中,有报道称其他动态编程语言(例如 PHP 和 Ruby)在共享对象方面是不安全的。然而,这种安全风险在 JavaScript 和 Node.js 程序中并没有得到很好的研究和理解。
同时,由于问题空间似乎与上下文映射的某些高级概念重叠,因此领域驱动设计从业人员也有种似曾相识的感觉。是的,这通常是小型组织的规范。协作模式上下文映射的重点不是团队的外形大小形状,而是必须支持协作的模型之间的关系。比较两种目标最明显的区别是上下文映射目标不是团队,而是模型。另一方面,“团队拓扑”的目标建议是:针对模型的认知会不断进行优化,这与每个有界上下文中只有一个
VSole
网络安全专家