写点什么

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

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

评论

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

全网都在跪求的阿里Java修炼开发技术笔记,终于开放下载了

Java 编程 后端 架构师

膜拜!京东T9大牛沉淀三年终于整理出了这份架构核心修炼之道

Java 编程 程序员 架构师 计算机

数字货币交易系统应用开发,区块链交易所app

13530558032

交易所合约跟单系统源码开发,合约跟单平台搭建

13530558032

如何实现特定列脱敏?这两种方法你都要会

华为云开发者联盟

postgresql 数据 脱敏 匿名 视图

架构师训练营第 0 期第 12 周作业

无名氏

收藏!一篇教会你写90%的shell脚本!

Geek Tech

Shell shell脚本编写 收藏教程

京东T9今年首发的一份Spring Boot实战,让开发像搭积木一样简单

Java 编程 程序员 架构师 计算机

除了方文山,用TA你也能帮周杰伦写歌词了

华为云开发者联盟

AI 数据 周杰伦 modelarts 歌词

一文说透"静态代理"与"动态代理"

Geek Tech

源码分析 动态代理 静态代理

GitHub上的今年第一本《Java异步编程实战》美团T9亲荐,太赞了

Java 程序员 架构师 异步编程

Redis问的太深入,面试官说:你先回去等通知吧

Java redis 编程 程序员 架构师

架构师训练营十二周作业

方堃

LeetCode题解:155. 最小栈,使用链表代替栈,JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构师培训 -12 hadoop

刘敏

云小课 | 一份超实用的勒索病毒自救预防指南

华为云开发者联盟

勒索病毒 弱密码 云小课 企业主机安全 病毒云查杀

区块链USDT支付系统,USDT承兑支付软件开发

13530558032

加密数字货币钱包APP系统开发,数字货币钱包系统定制

13530558032

释放数据价值:DAYU数据运营新能力解读

华为云开发者联盟

大数据 数字化转型 华为云 代码原理 数据运营

云计算、人工智能、大数据技术三者之间的关系

cristal

人工智能 云计算 大数据

真香警告!手绘172张图解HTTP协议+703页TCP/IP协议笔记

Java 程序员 架构师 计算机

Github下载即将破百万的PDF:双十一高并发亿级流量秒杀顶级教程

Java 编程 程序员 秒杀 计算机

疫情对在线教育的影响

anyRTC开发者

在线教育 直播 RTC 安卓

Git技术干货!工作中"Git"的使用实践和常用命令合集!

Geek Tech

git git常用命令 git常用实践 工作中git的使用

使用 Next.js , Nexus, Prisma 构建全栈项目

夏木

nextjs prisma graphql fullstack

GitHub上120K Stars国内第一的Java多线程PDF到底有什么魅力?

Java 程序员 并发编程 多线程 架构师

2. Bean Validation声明式校验方法的参数、返回值

YourBatman

参数校验 Hibernate-Validator Bean Validation 方法校验

TCP/IP协议族(第四版)已出,不愧是世界计算机优秀畅销精选书籍

Java 编程 架构师 TCP/IP 协议族

架构师训练营第十二周作业

叮叮董董

架构师培训十二周练习

小蚂蚁

易观郭炜:流动水系数造未来

易观大数据

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