写点什么

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

作者: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:0013296

评论

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

Redis - Cluster - 源码阅读(二)

旺仔大菜包

redis

dubbogo 凌烟阁之 方银城

apache/dubbo-go

阿里P8大佬整理!2021最新阿里Android面试流程

欢喜学安卓

android 程序员 面试 移动开发

【LeetCode】H 指数Java题解

Albert

算法 LeetCode 7月日更

架构实战训练营 - 模块八课后作业

Johnny

架构实战营

区块链+游戏资产所有权,将如何激活游戏经济的发展?

CECBC

架构实战营 模块二作业

孫影

架构实战营 #架构实战营

7款神器,让程序员幸福感暴增!

Jackpop

10条让开发者受益终生的编码原则

Jackpop

dubbogo 凌烟阁之 望哥

apache/dubbo-go

网络攻防学习笔记 Day71

穿过生命散发芬芳

网络攻防 7月日更

Facebook工程经验--PCIe故障监控和修复

俞凡

架构 大厂实践

Goroutine 是如何运行的

Rayjun

调度器 Go 语言

hdfs 中 datanode 工作机制以及数据存储

大数据技术指南

hdfs 7月日更

模块七作业-王者荣耀商城异地多活架构设计

张大彪

极光开发者周刊【No.0709】

极光GPTBots-极光推送

MapReduce 设计构思

五分钟学大数据

7月日更

自建开发工具系列-Webkit内存动量监控UI(三)

Tim

MVP

Hadoop 入门教程

若尘

大数据 hadoop

Python OpenCV 之图像金字塔,高斯金字塔与拉普拉斯金字塔

梦想橡皮擦

7月日更

智能重排序在推荐场景中的应用(三十四)

Databri_AI

推荐系统 排序 智能

模块八作业-设计消息队列存储消息数据的 MySQL 表格

张大彪

性能框架哪家强—JMeter、K6、locust、FunTester横向对比

FunTester

性能测试 接口测试 测试框架 测试开发

领域驱动设计到底在讲什么?

escray

学习 极客时间 7月日更 如何落地业务建模

一文掌握Java TreeMap与HashMap

Jackpop

高性能架构

编号94530

Java 架构设计 高性能

阿里P8大佬亲自教你!2021Android进阶者的新篇章

欢喜学安卓

android 程序员 面试 移动开发

【极光笔记】iOS 15推送新特性初探

极光GPTBots-极光推送

模块八作业

Presley

市场总局禁止虎牙斗鱼合并:抵制互联网行业垄断行为

石头IT视角

以产业区块链提升数字化转型质量

CECBC

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