2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

敏捷架构、精益架构,还是两者兼而有之?

作者:Kurt Bittn、Pierre Pureur

  • 2024-04-30
    北京
  • 本文字数:3171 字

    阅读完需:约 10 分钟

大小:1.59M时长:09:17
敏捷架构、精益架构,还是两者兼而有之?

多年来,我们会听到人们将他们的软件架构称为“精益和敏捷”的架构。这让我们不禁思考精益和敏捷实践究竟如何助力团队在软件产品的架构设计上取得突破?有些人将这两者混为一谈,认为精益和敏捷在很大程度上是相似的方法。但我们认为,在软件架构的语境下,精益和敏捷方法有着本质的不同,它们都有各自的优势和局限性。


精益方法的核心在于消除低效开发过程和实践所带来的浪费,缩短产品开发周期,该方法主要是在制造问题领域中发展起来的。它们主要关注产品开发的手段和方法,但也包括逐步改进产品的机制。


精益方法的前提假设是,组织已经对要构建的产品或解决的问题有了较为清晰的认识,因此其主要关注在构建已知解决方案时减少浪费。


许多管理者青睐精益方法,因为它能够显著提升开发效率、增强生产力、降低成本并增强项目的可预测性。


他们将软件开发视为一条生产线,而精益方法起源于制造业,与这种生产线式的软件开发理念高度契合。


然而,这并不是敏捷方法的重点。敏捷方法的核心目标并非单纯地追求效率、生产力、成本削减或可预测性的提升,尽管这些都有可能是实现敏捷方法主要目标的副产品:迅速验证组织是否在构建正确的产品。


为了实现这一目标,团队需要减少浪费以实现快速反馈周期,从而降低成本并提高效率,但这些只是实现不同目标的手段。



正如爱丽丝在迷茫中询问切西猫应该选择哪条路时,切西猫的回应 “如果你不知道你想去哪里,那么走哪条路都无所谓”。在软件架构的语境下,敏捷方法要回答的问题是 “产品应该去哪里?”(即产品要实现什么) ,精益方法要问的问题是 “构建产品最快最有效的方式是什么?” ,它假设团队已经明确他们需要构建的产品是什么。


对于软件架构而言,这意味着什么呢?


MVP、MVA 与经验主义


最小可行产品(MVP)作为一种经验性的方法,已广泛应用于验证团队是否走在构建正确产品的正确道路上。在一些系列文章中,我们在此基础上引入了最小可行架构(MVA)这一相关概念,作为对 MVP 概念的扩展。MVA 是开发团队对解决方案所作的一系列基础设计决策,它强调 MVP 的可持续性和长期可行性,在满足产品功能需求的同时也满足 QAR,注重产品的可持续性,并力求减少技术债务。


在 MVP 和 MVA 的实践中,客户需求以及满足这些需求所需的技术决策常常存在一定的未知性,至少部分是未知的。这要求团队运用经验反馈循环,深入了解客户需求,并收集关于其解决方案是否满足这些需求的反馈。这一点对于 MVP 和 MVA 来说都是一样的。


值得注意的是,MVP 和 MVA 并非一蹴而就的过程。每个产品发布都是团队运行的一组 MVP 和 MVA 实验,旨在更好地了解客户需求并交付价值。因此,每一次发布都可以被视为 MVP/MVA 组合的一个新版本。


敏捷、精益与复杂性


Dave Snowdon 的 Cynefin 框架提出了四个问题空间:


明显的(Obvious),在这种情况下,选项清晰,对因果关系的共识很容易达成。复杂的(Complicated),在这种情况下,可能存在多个 “正确” 的解决方案,需要专业知识来诊断和决定。难以理解的(Complex),在这种情况下,可能没有“正确”的解决方案,因为它们太不可预测,无法应用已被证明的解决方案或确定因果关系。解决这些问题需要采用经验方法来形成和测试假设,并根据结果进行调整。混乱的(Chaotic),在这种情况下,没有因果关系,最好的做法是尽量减少混乱,并建立一定程度的秩序和稳定。例如,紧急情况和自然灾害响应都属于此类。


精益方法确实注重可预测性,并在处理明显和某些复杂问题时展现出其独特的优势。在这些情境中,问题的解决方案相对明确或至少是可定义的。当满足这些条件时,减少浪费、改进效率以及提高可预测性是追求的关键目标。


当面对目标和解决方案不明确定义的复杂问题时,敏捷方法则展现出其独特的价值。在这种情境下,没有现成的解决方案可以套用,只有一系列带有权衡和假设的部分解决方案。


这并不意味着精益方法在解决复杂问题时完全无用。相反,在软件开发的许多环节中,一些工作仍然十分简单或者没有那么复杂,如构建和测试过程,特别是使用持续交付管道或减少团队之间的交接浪费。构建正确的产品是一个复杂的问题,而正确地构建产品并没有那么复杂。


敏捷、精益与软件架构


为软件产品构建架构是一项复杂的任务,每个产品都面临着一系列独特的挑战,要求架构师通过细致的权衡来寻找最佳的解决方案。在之前的文章中,我们深入探讨了这一决策过程,并引入了最小可行架构(MVA)的概念,它作为这些权衡决策的重要反映。MVA 是最小可行产品(MVP)的架构补充,确保 MVP 在技术层面是可行、可持续且具备未来可扩展性,这是 MVP 与一次性概念验证的区别所在。


虽然精益方法主张将软件开发的核心聚焦于工作流程的改善,但从架构的视角来看,其核心问题在于如何构建既是最小可行产品又是最小可行架构的解决方案。


MVA 的一个显著特点在于它是在一系列产品发布的过程中逐步发展和完善的。开发团队通过收集和分析每次发布的实证数据,不断验证和调整对 MVA 适用性的假设。在没有充分实证数据支持的情况下,团队无法准确判断 MVA 是否适合当前的 MVP,也无法预测其在产品生命周期内的可行性。团队需要不断获取反馈,解决出现的问题,并在后续发布中持续改进 MVA。这种基于实证的反馈循环与敏捷方法的核心理念相契合。


鉴于开发团队在构建架构过程中需要作出多种类型的决策,且工作本身具有新颖性,因此这项任务本质上具有不可预测性。团队成员面对的是前所未有的挑战,他们的工作重点并非追求效率,而是确保决策的有效性。当然,通过应用一些精益原则,如减少在做的事情的数量(WIP)、缩短等待时间、减少中断和交接等,可以在一定程度上提高团队的工作有效性。他们当然对缩短获得反馈的时间感兴趣,但并没有显式地关注如何优化他们的工作流程。


精益方法适用于需求相对稳定且问题定义明确的情境,其优化目标在于消除不必要的浪费。然而,架构工作的挑战在于,在产品生命周期的早期阶段(有时是在产品生命周期的后期),形成架构的需求(我们称之为质量属性需求或 QAR)往往没有被透彻理解。


精益方法还追求减少浪费,这是一个有价值的目标。架构工作的问题在于,开发团队在缺乏实验验证的情况下难以判断决策的正确性。实验过程中,一些决策可能会被证明是错误的,但这样的 “失败” 并非真正的浪费,而是为团队提供了宝贵的反馈信息,有助于减少未来的浪费。


在软件开发过程中,精益方法特别关注由流程本身产生的浪费,尤其是那些已开始但未完成的工作造成的浪费。过多在做的事情(WIP)是造成这类浪费的常见原因,但在软件产品中,推迟决策、技术债务往往会造成一种特殊的浪费。敏捷交付周期的反馈能够揭示出技术捷径和推迟决策对产品满足 QAR 能力的潜在损害。当这种情况发生时,开发团队通常需要投入额外的时间和精力来解决技术债务并重新设计架构。从精益的角度来看,这可能会暂时打乱工作流程。然而,从长远来看,这是减少因产品无法维持其价值而产生的更大浪费所必需的。

结论


组织既需要敏捷方法,也需要精益方法,但原因不同。敏捷方法的核心在于提供及时的反馈,确保团队正在构建的产品能够精准地满足客户需求,特别是在产品未能满足预期时,敏捷方法能够迅速揭示问题所在。他们也需要精益方法来消除浪费,帮助组织以更成本效益的方式交付高质量产品。因此,精益方法是敏捷方法的补充。


对于开发团队而言,敏捷实践是获取关于 MVP 及其相关 MVA 是否达到预期目标的关键途径。他们需要在后续产品中持续改进 MVP/MVA。如果 MVP/MVA 未能达成既定目标,单纯追求效率和生产力将无助于团队提供更优质的解决方案。


一旦团队对产品的发展方向和架构实现的目标有了较为明确的信心,他们可以将关注点逐渐转向效率、生产力和成本控制等方面。然而,即便在此时,团队也应牢记每次产品发布都是对产品价值和可持续性的一次实验性测试。


原文链接:

https://www.infoq.com/articles/agile-lean-architecture/


2024-04-30 08:009756

评论 1 条评论

发布
用户头像
总结到位

敏捷方法要回答的问题是 “产品应该去哪里?”(即产品要实现什么) ,精益方法要问的问题是 “构建产品最快最有效的方式是什么?” ,它假设团队已经明确他们需要构建的产品是什么。

2024-05-03 21:53 · 广东
回复
没有更多了
发现更多内容

发现一款提高工作效率的利器——ONLYOFFICE办公软件

袁袁袁袁满

人工智能 Office 自动化办公

行云部署前端架构解析-前言 | 京东云技术团队

京东科技开发者

IDC 23Q3 数据发布 XSKY 对象存储软件市场份额继续蝉联第一!

XSKY星辰天合

LED透明屏在舞台中的应用

Dylan

技术 设计 体验 LED显示屏 led显示屏厂家

网站被大量cc攻击导致打不开怎么解决

德迅云安全杨德俊

HTTP cc

左耳听风 - 高效沟通「读书打卡 day 09」

Java 工程师蔡姬

读书笔记 程序员 个人成长 沟通 职业发展

C-Shopping基于Next.js,开源电商平台全新亮相

Geek_9da61c

nodejs nextjs Redux Tailwind reactjs

如何做标准化?| 京东云技术团队

京东科技开发者

云图说丨安全云脑:开箱即用的安全运营体验

华为云开发者联盟

安全 华为云 华为云开发者联盟 华为云云图说 安全云脑

高效云运维工具就是行云管家!不用加班神器!

行云管家

云计算 云服务 云运维 云管家

修复uni-simple-router@2.0.7版本query参数为null时的bug

达摩

uni-app Vue uni-simple-router

淘宝商品列表数据怎么导出

tbapi

淘宝电商 淘宝商品数据接口 taobao agent system

vivo智能活动中台-悟空系统建设之路

vivo互联网技术

低代码 活动中台 AIGC技术探索

Pod/Node CPU 故障注入

腾讯云混沌演练平台

k8s 混沌工程

电商通讯服务

cts喜友科技

通信 通讯

重磅发布!基于百度飞桨的《人工智能基础及应用》书籍正式上线

飞桨PaddlePaddle

人工智能 机器学习 深度学习 百度飞桨

到店商详架构变迁

京东科技开发者

2024年上海等保测评机构有几家?分别叫做什么名字?

行云管家

网络安全 等保测评 等保测评机构 上海

TDengine 创始人陶建辉在汽车 CIO&CDO 论坛发表演讲,助力车企数字化转型

TDengine

tdengine 时序数据库

流式传输 VR 和 AR 内容——实时云渲染服务

3DCAT实时渲染

实时渲染 实时云渲染 云流化

IT行业,抢滩大模型

脑极体

AI IT

如何在 Ubuntu / Raspbian 上安装 PostgreSQL

HoneyMoose

使用Docker安装MongoDB数据库

emanjusaka

mongodb Docker 迁移

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(下)

码界西柚

Java hashmap HashMap底层原理 2024年第十四篇文章

申请开启|成为亚马逊云科技 Community Builder,共建云端社区!

亚马逊云科技 (Amazon Web Services)

数据库

了解一下Java21的VirtualThread

袁世超

虚拟线程 Java21

相比于 Jira,极狐GitLab 的敏捷项目管理是怎样的?

极狐GitLab

通过python封装1688商品跨境属性API接口文档

tbapi

Python爬虫 1688API 1688商品跨境属性接口

IPQ6010: Leading a new chapter in smart home and IoT fields

wallysSK

敏捷架构、精益架构,还是两者兼而有之?_管理/文化_InfoQ精选文章