写点什么

敏捷和架构的冲突

  • 2011-06-18
  • 本文字数:1345 字

    阅读完需:约 4 分钟

实施敏捷方法和设计企业架构之间总是存在某种冲突。敏捷开发强调随着对业务领域的深入理解,逐步调整设计和计划。架构设计则要求建立起技术架构(technology stack)。它可以满足质量属性(quality attributes),也可以向感兴趣的利益关系人进行展示,作为一种沟通的途径。当使用敏捷方法来引领所需的架构设计的时候,两者强强联手将会是双赢

Tom Graves 认为敏捷需要一个脊柱来支撑。而软件架构提供了这个脊柱。

敏捷通常需要一个脊柱来指引方向——根据这个方向,推动一些工作的进行。这样做,相对于随意出牌,可以完成更多的工作。通常,这是个平衡问题——要在坚实的脊柱和敏捷之间有个良好的平衡。

Jan Van Til 赞同 Tom 的观点,他认为没有后台的脊柱,前端也很难看得出有多敏捷。

我们当然需要一个相对进展“缓慢”的“后台”,这样才能让我们看清我们有多敏捷(“前端”)。如果所有的东西都很时尚…我们还能从中识别出哪个是时尚吗?我们当然需要一个有点“缓慢”的“后台”,这样才能让我们看清时尚(“前端”)。换句话说,我们需要传统的东西,没有传统的东西,也就没有了时尚。

Simon Brown 觉得,甚至“绝大部分的敏捷项目”可能都有或大或小的架构方面的问题。我们需要在项目早期迭代中解决它们。Simon 认为,敏捷和架构的冲突可以归结为是通过短迭代来交付商业价值,还是做一个庞大的预先设计。这里的关键点是设计要“刚刚好”(just enough)。准备好一个初步的结构是很重要的,但这不意味着就要画出无数的详细类图。

John Bauer 则提到,在对几个项目观察了一段时间以后,他发现了一个有趣的模式

敏捷以及那些类似敏捷的方法有个好处,对于产品来说,它能减少那些架构设计过度的软件解决方案(over architect-ed software solutions)的产生。架构设计过度的解决方案会强调软件应用项目的交付,也会使得软件开发和维护的成本上升,通常来说,是跟交付商业价值背道而驰的。

James Coplien 和 Kevlin Henney 给我们介绍了一种从项目开始的时候就进行“刚刚好”的架构设计,并且确保项目成功的有效方法

但是,这一切在现实世界里又是怎么实现的呢?

Simon Brown 在他的博文中提出了一个有趣的挑战:他要求在 4 个月左右的时间内,重新开发一个程序来取代老迈的在线银行系统 。他要求大家仍然使用敏捷方法,但最终还是能够交付。博文中提到了大家提出的一些方案,包括 Kero John Bauer 的。你可以查询到更多的方案,也可以提出你自己的想法

这样看来,架构设计和敏捷需要共存。不是有你没我,而且相互合作。这里的关键点就是做“刚刚好”的设计。 Simon 定义了“刚刚好”

做一个“刚刚好”的架构,可以让你条理清晰,明确愿景。换句话说,“刚刚好”让你知道了你的目标是什么,你怎么去完成这个目标。背后的关键就是架构是一个重大的决定,而“重大”是由进行改变所需要的成本来衡量的。换而言之,这就是架构,想要修改真的会很贵,而且你真的必须尽早做出正确的决定。举个例子,质量属性,比如高性能,高扩展性,高安全性以及高可用性,通常都需要在早期就把这些考虑在基础框架内,因为想要在后期重新修改现有的基础代码库会很难。这也就是架构,你不可能在某个下午很简单地就进行重构,比如核心技术选择、架构模式、核心框架等。

查看英文原文: Agile and Architecture Conflict

2011-06-18 23:003189
用户头像

发布了 114 篇内容, 共 32.1 次阅读, 收获喜欢 2 次。

关注

评论

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

BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住

霍格沃兹测试开发学社

云原生(三十一) | Kubernetes篇之平台基本预装资源

Lansonli

云原生 k8s 8月月更

SUSE 加速汽车行业智能化发展

Rancher

Kubernetes k8s rancher

在window下使用 VScode 搭建 ARM 开发环境

矜辰所致

开发工具 开发环境 arm 8月月更

LED显示屏行业未来是如果发展的?市场怎么样?

Dylan

LED显示屏 led显示屏厂家

Jenkins 踩坑 | job 创建、参数化、定时构建及时区偏差问题解决

霍格沃兹测试开发学社

记录一次数据库CPU被打满的排查过程

京东科技开发者

数据库 cpu cpu飙满 调优 慢SQL

Spring Security系列教程17--注销登录的实现及原理分析

一一哥

spring security spring-boot 注销登录

技术分享 | 黑盒测试方法论—场景法

霍格沃兹测试开发学社

Tapdata 杨哲轩:如何在零售行业实施主数据治理?

tapdata

Tapdata

Tapdata 获阿里云首批产品生态集成认证,携手阿里云共建新合作

tapdata

阿里云 Tapdata

Git实战(四)| Git分支管理实操,搞定在线合并和本地合并

霍格沃兹测试开发学社

Selenium 中的 JUnit 注解

FunTester

30 分钟轻松搞定正则表达式基础

霍格沃兹测试开发学社

Docker 镜像构建可以分享的快乐

霍格沃兹测试开发学社

超大规模跨域集群统一监控实践

移动云大数据

混迹职场10多年的数据开发老鸟,居然被一个职场新人上了一课

雨果

数据工程师

Rancher 2.6 全新 Logging 快速入门(2)

Rancher

Kubernetes k8s rancher

极简云上分析,释放数据价值|Kyligence 邀您参加2022秋季线上论坛

Kyligence

数据分析 数据价值 数据管理 智能多维数据库

BAT 大厂最流行的性能压测、监控、剖析技术体系解析

霍格沃兹测试开发学社

Git实战(五)| 让工作更高效,搞定Git的分支管理

霍格沃兹测试开发学社

Jenkins 踩坑(三)| Email 配置与任务邮件发送

霍格沃兹测试开发学社

如何通过经纬度坐标获取附近的地址信息?

HarmonyOS SDK

定位

MySQL查询重写插件

TimeFriends

8月月更

开源,无禁止即可为

Databend

开源社区 大数据 开源 #开源 databend

编程小白也能快速掌握的ArkUI JS组件开发

HarmonyOS开发者

HarmonyOS

面试突击79:Bean 作用域是啥?它有几种类型?

王磊

Java 常见面试题

什么?MySQL的等值查询竟然出错了??

转转技术团队

MySQL

App自动化之dom结构和元素定位方式(包含滑动列表定位)

霍格沃兹测试开发学社

Git 实战(三) | Github 必会高频基础命令与 IDE 的 Git 集成

霍格沃兹测试开发学社

直播预告丨阿里云佐井:关注预警6要素,帮助用户实现精准监控和告警

阿里云弹性计算

监控 预警

敏捷和架构的冲突_研发效能_Vikas Hazrati_InfoQ精选文章