敏捷开发一千零一问系列之九:总体架构什么时机进行?(上)
问题
总体架构设计在什么时机进行?是每个迭代做还是先做完再迭代?
这是少数几个被提到的技术问题。在两天的培训课程之后,最后剩下的纯的技术问题一般只占1/5都不到,多数都是管理问题,而管理问题中,又基本上是人的管理问题,这也说明了在“心法人事物”中,心总是第一位的。
方案
最早想写成方案1、方案2,但感觉有点像说是有不同的很多并行方法,之后又改成步骤1、步骤2,又有点把事线性化了。
现在干脆写回成方案123吧,总之越往后的越终极一些,也越难以一步到位。
方案1:Sprint0
对于长期的项目,常常引入“Sprint0”的概念。
Sprint0就是在开始不断开发功能的众多Sprint迭代前,先做一个准备工作,大约持续一个迭代的周期。
准备工作的内容五花八门,从团队组成,项目范围,到这里说的架构设计。有些团队每过一段,尤其在发布了重要的版本后,都会重新开一个Sprint0,来分析下一个版本的架构设计。
这样就可能出现几种不同的迭代变形,最左边的是最轻量级的(周期短的、架构不重要的),最右边的则相反。
Sprint1 Sprint2 ... SprintN |
Sprint0 Sprint1 Sprint2 ... SprintN ... |
Sprint0 Sprint1 Sprint2 ... SprintN Sprint0 Sprint1 .... SprintN ... |
实际上为了解决总体集成和发布问题,还经常采用SprintN+1的方法。
方案2:制定迭代计划。
“架构想不全”这个问题,在于不知道未来要做什么,如果有一个相对清晰的迭代计划,就会驱动架构的设计走向正确的方向。
正确的方向的重要性远远超过“详尽的设计”,只要架构能支撑未来的迭代计划,即使不太详尽,也还可以每个阶段细化。但如果方向是错误的,只会“精确地走向错误的地方”。
有了迭代计划后还有一个好处是架构设计可以分阶段开发了。由于能预见未来发生的事情,因此也就能在关键接口处做好准备,而放心地把某些架构留待几个月后再做。
方案3:补文档。
本人正在用的一个方法。
当设计一个交互性很强的产品时(比如游戏、手机软件),有很多判断来自于面对最终产品时的感受,而不是数据库结构这类东西。所以有时候不得不先把架构放在心里(不是没有),把产品做出个雏形,获得感受后决定是否如此,还是更改设计。
这种方法常常伴随巨大的返工(原因倒不是因为不做架构造成的,做了架构,返工会更多,因为连架构也得返工;不做架构反而减少了返工量),但是对于创新性产品而言,返工不返工不是评价成败的主要因素。
等最终结果得到认可后,会在管理系统中补充被确认的功能的架构。
由于产品都做出来了,所以文字中可以引用很多确定性的数据库表乃至代码等,补文档的过程异常轻松。
案例
无。
分析
1. 敏捷的架构设计
之前智慧敏捷中曾经提到过一个问题“敏捷开发为什么不提倡做架构设计”。
在变化决定一切的领域(比如互联网),提前做一个详尽的架构的确不是一个好事情,一方面时间不运行,另一方面等架构实现了,业务也发生了变化。
因此在这些领域工作,要尝试把架构设计也迭代化,比如方案1表中最右边的不断迭代的Sprint0;另外一个概念则是简单性(Simplicity,maxmize the work not done),简单说就是能不做的事情就推迟做,比如“三个月内不会发布的功能的架构设计”就应该三个月后做。
要做好这些事情,一个前提是不能逃避工作,也就是对现在的我与未来维护产品的人有分别心,“反正我暂时用不到,管他日后谁头疼没有架构设计呢”,否则就极度危险。
2. 敏捷地架构设计
每种产品的架构设计方法各不相同,如果把上面“敏捷的架构设计”理解成为敏捷开发,那么军工、航空、银行这些项目,多半就不适合敏捷开发了。
但如果说一切产品的架构设计,都应该“敏捷地”进行——就是不拘泥于形式,及不追求大而全,也不追求小二瞧,而是要放下这些包袱,轻松地分析这个产品到底应该怎样做架构设计——则基本上防止四海皆准则。
本篇还有一个下篇,会讲到“全民皆架构”,又会回到人的管理中来。
转载于:https://www.cnblogs.com/JPAORM/archive/2012/01/20/2510368.html
敏捷开发一千零一问系列之九:总体架构什么时机进行?(上)相关推荐
- 敏捷开发一千零一问系列之七:怎样对待有看法的徒弟?
2019独角兽企业重金招聘Python工程师标准>>> 这是敏捷开发一千零一问系列的第七篇.(之一,之二,之三,问题总目录) 问题 松结对编程中,师傅对徒弟安排任务时,对于有想法的徒 ...
- 敏捷开发一千零一问系列之一:序言及解决问题的心法(无我)
这是敏捷开发一千零一问系列的第一篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 转载于:https://w ...
- 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)
这是敏捷开发一千零一问系列的第二篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十一篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 无住 在般若敏捷系列中已 ...
- 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)
这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 这个是在一次面向电信行业供应商的公开课上提出的问题,被评为本场最佳问题. 对于这类"供应商"而言 ...
- 敏捷开发一千零一问系列之十八:长期受制于强势客户怎么办?(下)
这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 方案3:培养产品经理,想到客户前面 被客户牵着鼻子走本来不是坏事,还少了做需求分析的工作,但关键是客户一会牵着向东, ...
- 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?
这是敏捷开发一千零一问系列的第十六篇.(在这里提问,之一,之二,之三,问题总目录) 这个和上一篇"敏捷开发与CMMI谁为主"都是最近一次培训被大家选出来的最有价值问题. 问题 开发 ...
- 敏捷开发一千零一问系列之十四:敏捷开发加班吗?
这是敏捷开发一千零一问系列的第十四篇.(在这里提问,之一,之二,之三,问题总目录) 正逢周末,又是愚人节,群中有人正在加班,想起上次培训中间休息的时候,讨论起这个"敏捷开发加班吗" ...
- 敏捷开发一千零一问系列之十二:敏捷实施的步骤?
这是敏捷开发一千零一问系列的第十二篇.(在这里提问,之一,之二,之三,问题总目录) 问题 原问题:敏捷的具体实施是否按照一定的步骤? 方案 越前面的方案月容易实施,但是也越容易流于肤浅而失败. 方案1 ...
- 敏捷开发一千零一问系列之十一:需求谁做主?
这是敏捷开发一千零一问系列的第十一篇.(在这里提问,之一,之二,之三,问题总目录) 问题 原来问题是这么写的:"每个人对美的认识不一样,在产品开发过程中,该怎样有效控制界面设计用时?&quo ...
最新文章
- Python fileinput模块:逐行读取多个文件
- oracle 数据库创建表
- python是不是特别垃圾-Python里的垃圾回收机制是什么意思,搞不懂?
- 复制一个文件或者从一个资源获取一个文件并复制
- LINUX正则表达式-- grep
- ASP.NET里创建Microsoft Word文档
- 领域驱动设计之领域模型_在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……...
- Object-C中方法
- 超好看的引导购买页源码
- jQuery的$.each的使用(遍历数组、对象、li集合、选中的option)
- Android Binder机制简单了解
- 关于webSQL的总结
- 如何解决back order中,confirmed qty can't be change的问题
- 阿里云centos7.0安装java环境
- qq安全保护进程更改计算机,QQ安全中心
- java多线程与并发原理
- VSS 2005 使用详解
- C#程序无法连接本地数据库
- 基于BSC测试网收益聚合器Beefy协议的编译、测试、部署
- python 自动播放_在IPython noteb中自动播放声音
热门文章
- 驰骋工作流引擎-总体介绍
- 后台弹框。刷新不提示确认VB或.NET
- mongodb指南(翻译)(十六) - developer zone - 何时使用GridFS
- windows服务器管理(1)——WinServer2012 开启中文语言包(无需下载补丁)
- 从gbdt到xgboost
- 离职潮来袭,但为什么HR还是很难招到人?
- AIR文件上传与文件断点续传方式下载
- linux编译lnx文件命令_Linux命令总结
- php 可变变量 数组赋值,PHP可变变量学习小结
- ios 分段 判断 小说阅读器_还在用别的小说阅读器?今天教你用Python制作简易小说阅读器!...