这是敏捷开发一千零一问系列的第九篇。(之一,之二,之三,问题总目录)
问题
总体架构设计在什么时机进行?是每个迭代做还是先做完再迭代?
这是少数几个被提到的技术问题。在两天的培训课程之后,最后剩下的纯的技术问题一般只占1/5都不到,多数都是管理问题,而管理问题中,又基本上是人的管理问题,这也说明了在“心法人事物”中,心总是第一位的。
方案
最早想写成方案1、方案2,但感觉有点像说是有不同的很多并行方法,之后又改成步骤1、步骤2,又有点把事线性化了。
现在干脆写回成方案123吧,总之越往后的越终极一些,也越难以一步到位。
方案1:Sprint0
对于长期的项目,常常引入“Sprint0”的概念。
Sprint0就是在开始不断开发功能的众多Sprint迭代前,先做一个准备工作,大约持续一个迭代的周期。
准备工作的内容五花八门,从团队组成,项目范围,到这里说的架构设计。有些团队每过一段,尤其在发布了重要的版本后,都会重新开一个Sprint0,来分析下一个版本的架构设计。
这样就可能出现几种不同的迭代变形,最左边的是最轻量级的(周期短的、架构不重要的),最右边的则相反。
Sprint0
Sprint1
Sprint0 Sprint2
Sprint1 Sprint1 ...
Sprint2 SprintN
Sprint2 Sprint0
... Sprint1
...
SprintN ....
SprintN SprintN
...
...
实际上为了解决总体集成和发布问题,还经常采用SprintN+1的方法。
方案2:制定迭代计划。
“架构想不全”这个问题,在于不知道未来要做什么,如果有一个相对清晰的迭代计划,就会驱动架构的设计走向正确的方向。
正确的方向的重要性远远超过“详尽的设计”,只要架构能支撑未来的迭代计划,即使不太详尽,也还可以每个阶段细化。但如果方向是错误的,只会“精确地走向错误的地方”。
有了迭代计划后还有一个好处是架构设计可以分阶段开发了。由于能预见未来发生的事情,因此也就能在关键接口处做好准备,而放心地把某些架构留待几个月后再做。
方案3:补文档。
本人正在用的一个方法。
当设计一个交互性很强的产品时(比如游戏、手机软件),有很多判断来自于面对最终产品时的感受,而不是数据库结构这类东西。所以有时候不得不先把架构放在心里(不是没有),把产品做出个雏形,获得感受后决定是否如此,还是更改设计。
这种方法常常伴随巨大的返工(原因倒不是因为不做架构造成的,做了架构,返工会更多,因为连架构也得返工;不做架构反而减少了返工量),但是对于创新性产品而言,返工不返工不是评价成败的主要因素。
等最终结果得到认可后,会在管理系统中补充被确认的功能的架构。
由于产品都做出来了,所以文字中可以引用很多确定性的数据库表乃至代码等,补文档的过程异常轻松。
案例
无。
分析
1. 敏捷的架构设计
之前智慧敏捷中曾经提到过一个问题“敏捷开发为什么不提倡做架构设计”。
在变化决定一切的领域(比如互联网),提前做一个详尽的架构的确不是一个好事情,一方面时间不运行,另一方面等架构实现了,业务也发生了变化。
因此在这些领域工作,要尝试把架构设计也迭代化,比如方案1表中最右边的不断迭代的Sprint0;另外一个概念则是简单性(Simplicity,maxmize the work not done),简单说就是能不做的事情就推迟做,比如“三个月内不会发布的功能的架构设计”就应该三个月后做。
要做好这些事情,一个前提是不能逃避工作,也就是对现在的我与未来维护产品的人有分别心,“反正我暂时用不到,管他日后谁头疼没有架构设计呢”,否则就极度危险。
2. 敏捷地架构设计
每种产品的架构设计方法各不相同,如果把上面“敏捷的架构设计”理解成为敏捷开发,那么军工、航空、银行这些项目,多半就不适合敏捷开发了。
但如果说一切产品的架构设计,都应该“敏捷地”进行——就是不拘泥于形式,及不追求大而全,也不追求小二瞧,而是要放下这些包袱,轻松地分析这个产品到底应该怎样做架构设计——则基本上防止四海皆准则。
本篇还有一个下篇,会讲到“全民皆架构”,又会回到人的管理中来。
分享到:
相关推荐
这篇文档介绍的是一个幼儿园中班的音乐公开课教案——《一千零一个喷嚏》,这是一次结合故事和节奏乐的教学活动,旨在通过趣味性的故事激发孩子们对音乐节奏的兴趣,培养他们的音乐感知能力、合作意识以及爱护乐器的...
这篇文档是一个针对中班儿童设计的音乐教案,主要教授节奏乐知识,以有趣的故事《一千零一个喷嚏》为载体,让孩子们在游戏中学习音乐节奏。教案的核心知识点包括: 1. **节奏乐教学方法**:传统的节奏乐教学通常...
【标题】"初中语文文摘文苑一千零一面镜子"所蕴含的知识点主要涉及文学欣赏、诗词解析以及情感表达。 【描述】中的内容简洁,直接引用了诗句“一千零一面镜子”,这暗示我们要探讨的是一种文学表现手法和深层含义。...
这篇文档是一个幼儿园中班的音乐教案,名为"一千零一个喷嚏",旨在通过故事与节奏乐的结合,激发孩子们对音乐的兴趣,提高他们的音乐感知能力和团队协作能力。教案主要包含以下几个关键知识点: 1. **节奏乐教学法*...
154、能设置一些代码在我所有的JSP文件之上运行?如果可以,能共享吗? 37 155、对一个JSP页,如果多个客户端同时请求它,同步可能吗? 37 156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用<jsp:...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最...
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最...
中班音乐活动教案《一千零一个喷嚏》润新教育.txt
综上所述,工控安全是一个复杂且多面的领域,它需要技术人员具备广泛的知识和技能,以及与其他领域专家的合作。随着技术的发展和工业网络环境的日益复杂,工控安全的重要性只会不断增加。因此,持续关注和研究工控...
36. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 18 37. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 18 38. 比较truncate和delete 命令 18 39. 解释$ORACLE_...
诱导用户点击后门程序的技巧在于创建看起来无害的快捷方式,如将恶意程序绑定到常用应用程序(如谷歌浏览器)的快捷方式上,使用户在不知情的情况下触发恶意代码执行。 总之,权限维持是黑客活动中至关重要的一步,...
股票买卖最佳时机leetcode 一千零一...项目创意 生物/医疗技术 1. 急救箱和药物追踪器(手机) 地理 茹 标签 移动的 功能: 列出套件中的所有物品 到期日通知 药丸提醒 额外的货币化: (*) 搜索和比较药品价格 通知...
1. MVC三层架构模式:在Java Web开发中,MVC模式是一种常见的设计模式,其中M代表Model(模型)、V代表View(视图)、C代表Controller(控制器)。使用MVC模式可以将数据和业务逻辑分离,使得系统更易于维护和扩展。...
- JSTL(JavaServer Pages Standard Tag Library)是最常用的JSP标记库之一,包括核心标签库、格式化标签库、函数标签库等。 - 常用方法包括:`c:forEach`循环遍历集合、`c:if`条件判断等。 3. **标记库有哪些...