写点什么

自我革新,如何让软件架构变得更好

作者:Pierre Pureur, Kurt Bittner

  • 2024-08-22
    北京
  • 本文字数:2782 字

    阅读完需:约 9 分钟

自我革新,如何让软件架构变得更好

重复同样的行为却期待出现不同的结果,这种已被广泛定义为“疯狂”的认知却是那些从不反省自己工作方式的团队常常掉入的陷阱。设计软件架构也不例外:如果你从不停下来检查你是如何做出决策的,结果可能会反映出你在看待问题方式上的系统性偏见。


软件架构评审很重要,但它们不能代替回顾,我们将探讨其中的原因。评审关注的是产品本身及其架构设计,而非决策过程本身,或团队执行这些决策的方法。回顾是许多敏捷软件开发方法的关键要素,原因很简单:它们为团队提供了必要的时间和思考空间,用于反思如何改进工作方式。在本文的其余部分,我们将探讨如何以及为什么要这样做。


架构回顾与架构评审的区别


架构评审的核心目标在于提升架构质量。在 MVA 方法的框架下,我们所讨论的架构评审主要专注于评估架构增量(MVA)对支持增量产品 MVP 的适用性。


增量开发的核心在于收集可以用来改进产品(MVP)及其相关架构(MVA)的反馈,所以架构评审是必不可少的,并且应该在每个增量开发周期(例如 Scrum 的 Sprint)中进行。


这与传统的架构评审不同,后者往往因频率较低而难以及时捕捉问题,直至问题恶化至不可逆转的地步。然后,它们会变成重大事故之后的一种事后分析,目的是确定是否可以采取任何措施来解决事故中遇到的问题。传统的架构评审,特别是如果由外部团队执行时,通常会变成一场责任推诿的游戏。与之相反,MVA 方法强调定期进行架构评审的重要性,核心在于汲取经验教训,确保灾难性故障永远不会发生。


架构回顾的目的在于利用过往经验帮助开发团队改进他们的架构技能和决策方式。架构回顾是开发团队进行反思,以便在未来可以做得更好的契机,并且对于每一个迭代 /Sprint 来说也很重要,因为团队几乎总是可以发现并学习那些可以在未来做得更出色的方面。


通过比较和对比架构评审和架构回顾,有助于了解它们之间的差异(见表 1)。



表 1:架构评审与架构回顾对比


架构回顾应该与架构评审分开


如果你已经有在 Scrum 框架下进行 Sprint 回顾,那么只需要留出一点时间,提出一些关键性的问题,探索如何优化你的架构工作流。


如果你还没有进行 Sprint 回顾,可以安排专门时间来深入探讨关键性问题,这些问题将帮助你理解你的架构工作流。这种探讨不仅限于架构本身,也可以扩展到团队的工作方式。我们认为这两者都很重要,尽管本文重点放在对架构进行回顾上。


你可能会考虑在架构评审中添加一个回顾环节,但我们不建议这么做。例如,在 Scrum 中,Sprint 评审 和 Sprint 回顾是两个独立的过程,这是有原因的:


  • 架构评审的涉众包括团队之外的人,他们可能并不了解团队的工作方式,也可能对团队的内部运作不感兴趣。如果你谈论他们不知道或不关心的事情,可能意味着你没有尊重他们的时间,导致他们在未来可能选择不参与评审。

  • 开发人员在有外人在场的情况下,可能不会自在地讨论他们的工作方式中存在的问题。而如果不公开讨论团队正在经历的挑战,可能就无法发现重要的改进机会。

  • 在大多数情况下,为开发人员在架构评审之后提供一些反思的时间是非常值得的。当架构评审暴露出架构问题时,每个人都自然会集中精力去解决这些问题。有些问题的根源隐藏在团队的工作方式或决策方式中,只是解决具体的问题往往无法触及这些根源。将架构回顾与架构评审分开,可以给予团队成员足够的时间来深思熟虑,从而更深入地理解问题的根源。


这种关注点的分离(借鉴自 Scrum 等方法)非常有效,因为它有助于集中注意力。评审产品或架构已经足够复杂了,所以无需再扩大评审的范围,而应该专注于团队的工作方式,这样有助于团队更有效地进行自我改进。


在架构回顾中需要问的问题


架构回顾会议的机制与 Scrum 中 Sprint 回顾会议的机制相同。实际上,可以在常规的回顾会议中加入架构重点,避免创建另一个会议,只要所有参与者都参与制定架构决策即可。这还是一个展示机会,证明任何人都可以做出架构决策,不仅仅是“架构师”。加入架构重点意味着要问一些关于团队如何制定架构决策的问题:


  • 看看 QAR 是如何制定的。它们是猜测出来的吗?它们准确吗(也许它们是从其他系统复制过来的)?它们有用吗?它们是否带有限制性?我们做了哪些假设?团队的完成定义是否反映了 QAR?

  • 看看做决策的方式。是整个团队都参与了决策,还是主要由最资深的人主导?它们是否得到了实证的支持(即开发和测试一个 MVA 的实证)?决策是基于经验而做出的吗?我们的认知或决策过程中是否存在系统性偏见(这些偏见会阻碍我们取得良好的结果)?

  • 看看如何利用反馈来提升决策。你是否评估过决策的有效性?你是否因为接收到新的信息而撤销过决策?你是否在反馈的影响下曾经将某些任务从待办清单中剔除,因为它们不再具有相关性?

  • 深入关注权衡决策。它们的有效性是否是基于你从 MVA“实验”中学到的东西?它们是否满足了预期的需求,还是有所不足?

  • 评审技术债务。技术债务在增长吗?(答案显然是肯定的…)这是可接受的吗,还是团队实际上在无意中为将来的问题埋下伏笔?

  • 考虑如何使用反馈来改进架构。你能够按照 MVP/MVA 来增量发布系统吗?你愿意进行可能失败的实验吗?你是否创建了既支持 MVP 又能验证决策和权衡有效性的 MVA?你能否利用发布 MVA 的反馈来改进未来的 MVA?

  • 看看团队的技能。你的团队是否具备开发有效 MVA 的技能、专业知识和经验?团队需要改进或获得哪些技能?你是否因为无法抽出时间学习新技术而坚持使用旧技术?


在任何一个架构回顾会议中,最应铭记的要点是,回顾的目的是找到具体的改进团队工作方式的方法。回顾的目的不是为了批评或归咎责任,一旦出现了这种情况,回顾就变得毫无用处,甚至有害。团队只能通过构建和测试架构增量(MVA)来学习和成长,且不是每个想法都能如愿以偿。构建和测试想法对于尝试新方法和做出更好的决策来说至关重要。


应该多久回顾一次?


有些人可能认为,每次创建 MVA(例如 Scrum 中的每个 Sprint)都不需要回顾,因为他们担心这会花费太多的时间。我们认为,在每次 MVP/MVA 发布后都自问一下上述的问题——如果没有什么引人深思的答案,那么回顾可以简短结束,你可以继续前进。但如果答案中包含了有价值的见解,那么花点时间检查一下你制定架构决策的方式是值得的。然后,你再开始构建下一个增量 MVP/MVA。从长远来看,这种做法将为你节省时间并避免潜在的痛苦。


结论


架构回顾帮助团队改进他们的工作方式,而架构评审帮助团队改进他们正在开发的产品。架构评审不应该取代架构回顾,正如架构回顾不会取代架构评审一样。


许多团队选择忽略架构回顾,因为他们不愿直面自身的不足。架构回顾更具挑战性,因为它们不仅审视团队的工作方法,还审视团队的决策过程。但架构回顾所带来的回报是巨大的:它们能够揭示那些未被明确表达的假设和隐藏的偏见,而这些偏见往往会阻碍团队做出更明智的决策。如果你一直进行架构回顾,会得到更好的架构。


原文链接

https://www.infoq.com/articles/architectural-retrospectives/


2024-08-22 08:0013123

评论

发布
暂无评论
发现更多内容

我没想到,做IT还有感动众生的机会

明道云

数据湖(十八):Flink与Iceberg整合SQL API操作

Lansonli

数据湖 11月月更

Go语言开发小技巧&易错点100例(二)

闫同学

go语言 11月月更 go开发

数据库审计的四种类型

阿泽🧸

数据库审计 11月月更

云栖探馆!云小宝首秀遇上老司机小龙,猜猜谁赢了?

OpenAnolis小助手

龙蜥社区 2022云栖大会 小龙 云小宝 开源活动

一次遍历导致的崩溃

小小怪下士

Java 程序员

一款设计和模拟数字逻辑电路的LogiSim工具

芯动大师

集成电路 Verilog 11月月更 logisim 模电与书店

【C语言】char 关键字

謓泽

11月月更

HDC 2022 Day2精彩速递:开发者齐聚松山湖,深度体验鸿蒙开发套件

最新动态

数据湖(十九):SQL API 读取Kafka数据实时写入Iceberg表

Lansonli

数据湖 11月月更

架构实战营模块4作业

冷夫冲

架构实战营

华为开发者大会2022:HMS Core 3D建模服务再升级,万物皆可驱动

HarmonyOS SDK

hdc HMS Core

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.1版已发布

JackJiang

即时通讯 MobileIMSDK im开发 开源im

Mac部署spark2.4.4

程序员欣宸

大数据 spark 11月月更

计算机网络:流量控制与可靠传输机制

timerring

计算机网络 流量控制 11月月更 可靠传输

计算机网络:差错控制

timerring

计算机网络 11月月更

业务监控设计主要关注点

穿过生命散发芬芳

业务监控 11月月更

2022华为开发者大会:华为阅读人-车-家一键流转,实现全场景数字阅读新增长

最新动态

HDC2022 携手共创鸿蒙生态 增长解决方案焕新升级构筑商业增长闭环

最新动态

星闪:咫尺之间,联接智能世界

脑极体

python小知识-并发编程(1)

AIWeker

Python 人工智能 python小知识 11月月更

永续合约交易所的开发有哪些特征?

W13902449729

合约交易所开发 区块链交易所开发

Sonatype Nexus 如何把多仓库合并在一起

HoneyMoose

既要技术制胜,也要体验为王:今天我们需要怎样的WLAN?

脑极体

峰会实录 | 基于StarRocks和腾讯云EMR构建云上Lakehouse

StarRocks

数据库

2022HDC|华为阅读:探索阅读体验新变革 助力阅读生态创新发展

最新动态

HDC2022 携手共创鸿蒙生态 增长解决方案焕新升级构筑商业增长闭环

叶落便知秋

数据湖(十七):Flink与Iceberg整合DataStream API操作

Lansonli

数据湖 11月月更

【C 语言】const 关键字

謓泽

11月月更

2022-11-05:给定一个逆波兰式,转化成正确的中序表达式。要求只有必要加括号的地方才加括号。

福大大架构师每日一题

算法 rust 福大大

Fastjson最想版本RCE漏洞【漏洞分析】

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

自我革新,如何让软件架构变得更好_架构_InfoQ精选文章