NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

敏捷和架构的冲突

  • 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:003159
用户头像

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

关注

评论

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

TiDB Lightning在数据迁移中的应用与错误处理实践

TiDB 社区干货传送门

迁移 管理与运维 6.x 实践

tiflash 6.0 on K8s 扩容与新特性实践

TiDB 社区干货传送门

版本测评 安装 & 部署 新版本/特性解读 扩/缩容 6.x 实践

TiDB 6.0: 统计信息优化改进

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

TiFlash 源码阅读(二)计算层概览

TiDB 社区干货传送门

TiCDC系列分享 Open API与业务系统集成

TiDB 社区干货传送门

应用适配 6.x 实践

TiKV 节点重启后业务恢复速度(leader 平衡速度)v6.0 vs v5.1.2对比测试

TiDB 社区干货传送门

版本测评 6.x 实践

文件数据导入到TiDB的实践

TiDB 社区干货传送门

TiSpark v2.4.x 升级到 TiSpark v2.5.x

TiDB 社区干货传送门

实践案例 6.x 实践

MySQL正常执行的SQL在TiDB中变慢了

TiDB 社区干货传送门

管理与运维 故障排查/诊断

基于tidbV6.0探索tiflash在多标签组合场景下的使用

TiDB 社区干货传送门

实践案例 6.x 实践

6.0体验:TiKV 重启后 Leader 均衡加速

TiDB 社区干货传送门

管理与运维 新版本/特性解读 6.x 实践

基于tidbV6.0探索索引优化思路

TiDB 社区干货传送门

实践案例 6.x 实践

TiDB 6.0: 让 TSO 更高效

TiDB 社区干货传送门

实践案例 性能测评 新版本/特性解读 6.x 实践

这一年,我和 TiDB 的故事

TiDB 社区干货传送门

基于 TiDB v6.0 部署两地三中心

TiDB 社区干货传送门

实践案例 6.x 实践

一次SSD磁盘寿命耗尽导致的TiDB集群写入变慢问题处理

TiDB 社区干货传送门

故障排查/诊断

TiDB与MySQL的模糊查询大小写

TiDB 社区干货传送门

开发语言

TiDB v5.4.0 与 v6.0.0 的 sysbench 性能对比

TiDB 社区干货传送门

性能测评 6.x 实践

TiDB库表设计和使用规范

TiDB 社区干货传送门

管理与运维

一次断电故障引起TiDB无法启动的问题带来的几点思考

TiDB 社区干货传送门

管理与运维 故障排查/诊断

TiDB中如何查看database级别的QPS

TiDB 社区干货传送门

监控

TiCDC系列分享-01-简述产生背景及使用概况

TiDB 社区干货传送门

迁移 安装 & 部署 扩/缩容 应用适配 大数据场景实践

TiDB HTAP特性的应用场景简析

TiDB 社区干货传送门

数据库架构设计

TiDB Sysbench 性能对比测试报告 - v5.1.4 对比 v6.0.0 DMR

TiDB 社区干货传送门

6.x 实践

TiDB 和 C# 的简单 CRUD 应用程序

TiDB 社区干货传送门

6.x 实践

TiDB 查询优化及调优系列(三)慢查询诊断监控及排查

TiDB 社区干货传送门

TiDB 6.0 Book Rush | TiDB 和 Python 的 CRUD 应用开发实践

TiDB 社区干货传送门

6.x 实践

TiCDC系列分享-02-剖析同步模型与基本架构

TiDB 社区干货传送门

迁移 备份 & 恢复 大数据场景实践 实时数仓场景实践 数据中台场景实践

TiDB 查询优化及调优系列(四)查询执行计划的调整及优化原理

TiDB 社区干货传送门

TiDB多活方案

TiDB 社区干货传送门

实践案例 集群管理 数据库架构选型 数据库架构设计

离线安装 TiSpark v2.5.1

TiDB 社区干货传送门

6.x 实践

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