敏捷开发一千零一问系列之十:总体架构什么时机进行?(下)
这是敏捷开发一千零一问系列的第十篇。(在这里提问,之一,之二,之三,问题总目录)
问题
总体架构设计在什么时机进行?是每个迭代做还是先做完再迭代?
方案
之前提到了在时间的角度上,从技术和商业层面上的架构设计,下面看看横向的架构设计。
方案1:开发人员全体参与架构设计
敏捷开发整体上是一个崇尚“跨职能”的管理方法,开发和测试融合(所以才有很多类似自动化测试、单元测试、持续集成这些需要开发人员强参与的测试活动),开发与产品融合(开发人员要参与客户价值分析)等等,所以在架构设计与编码这两块,也不会分得很开,不能有人专门做架构,另外一些人专门编写代码。
一方面,“架构设计”一旦变成一个文档,就要被写,被读,效率不说,中间难保不发生歧义,因此做架构的人和写代码的人在一定程度上融合一下,能大量减少不必要的架构设计,尤其是某些细节。
二方面,文档或设计本身不是工作产品,在上面投入太多的工作量,极有可能是浪费而非保障。
当然问题是:哪些人有能力做架构?
这个问题如果换成:哪些人可以开一家新的世界500强企业?答案是“大学在校生”(IT界最近的世界500强多数都是在大学里边成立的)。所以同样是这些人,一样能做架构,只是看怎么做了。
方案2:用师徒团队搭建全民架构团队
如果没有专门的架构人员和编码人员,那么最好的结构就是师傅们做架构,同组的徒弟们将其实现为编码。
“这不也是分工吗?”是的,但是由于师傅们与大家密切合作,所以他很快就会把架构能力传递到徒弟手中,也会逐渐找到一些帮助自己做架构的徒弟,从而让自己能腾出手来做更大范围或更高层次的架构。
由于师傅要为全组的成败负责,所以这种传授过程是由衷的,中间没有什么可以扯皮的。(关于这种机制如何运作如果有疑问,请参考“松结对编程系列”)
方案3:商务人员参与架构
一个产品中有三样东西是核心:商业模式,业务架构,技术架构。
其中业务架构是核心,商业模式是从外界观察到的业务架构,而技术架构是从技术角度看到的业务架构。怎么讲呢?请看案例。
案例
比如360这个软件,它的技术架构到底是什么?
刚开始,看上去是个单机版的杀毒软件;后来呢,变成了一个云查杀;再往后,出现了浏览器;又弄了一些五花八门的网络功能,甚至包括聊天……
如果单独从技术的角度看,很难把一个单机版的杀毒软件重构成聊天软件,除非在早期就有人想到这个软件日后要用来聊天。谁会在早期知道呢?业务人员。
业务人员能“预知”未来,所以就不要让开发人员蒙在鼓里,而是提前做好技术准备和储备,架构的变迁就顺理成章。
分析
实际上无论质量、进度、成本、架构、客户价值、赚钱……这些,都应该是“全民”的,至少是尽量全民的。
否则,自然就会有人沉迷于自己负责的那一部分,而将其他的置于自己可以抱怨、对抗的另外一个部门,很难把整个事情做好(有我)。
有一家企业在面试等待区会故意放置一个扔在中间的扫把,看哪个面试者在进入的时候会将其扶起来。很难说我们是否会需要一个有心把扫把扶起来的程序员,但是我们的确需要一个能帮助开发组做好架构的业务人员,也需要一个能帮助架构师写好架构的程序员,还需要能帮助程序员把架构实现出来的架构师……
转载于:https://www.cnblogs.com/JPAORM/archive/2012/01/30/2510367.html
敏捷开发一千零一问系列之十:总体架构什么时机进行?(下)相关推荐
- 敏捷开发一千零一问系列之十八:长期受制于强势客户怎么办?(下)
这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 方案3:培养产品经理,想到客户前面 被客户牵着鼻子走本来不是坏事,还少了做需求分析的工作,但关键是客户一会牵着向东, ...
- 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?
这是敏捷开发一千零一问系列的第十六篇.(在这里提问,之一,之二,之三,问题总目录) 这个和上一篇"敏捷开发与CMMI谁为主"都是最近一次培训被大家选出来的最有价值问题. 问题 开发 ...
- 敏捷开发一千零一问系列之十四:敏捷开发加班吗?
这是敏捷开发一千零一问系列的第十四篇.(在这里提问,之一,之二,之三,问题总目录) 正逢周末,又是愚人节,群中有人正在加班,想起上次培训中间休息的时候,讨论起这个"敏捷开发加班吗" ...
- 敏捷开发一千零一问系列之十二:敏捷实施的步骤?
这是敏捷开发一千零一问系列的第十二篇.(在这里提问,之一,之二,之三,问题总目录) 问题 原问题:敏捷的具体实施是否按照一定的步骤? 方案 越前面的方案月容易实施,但是也越容易流于肤浅而失败. 方案1 ...
- 敏捷开发一千零一问系列之十五:同时实施CMMI和敏捷哪个为主?
问题 原来问题是这么写的:"一家企业既要过CMMI,又要过ISO,还要实施敏捷,应该怎样做?" 之所以改成"哪个好",是因为如果要多头并存,就要有主次关系. 那 ...
- 敏捷开发一千零一问系列之七:怎样对待有看法的徒弟?
2019独角兽企业重金招聘Python工程师标准>>> 这是敏捷开发一千零一问系列的第七篇.(之一,之二,之三,问题总目录) 问题 松结对编程中,师傅对徒弟安排任务时,对于有想法的徒 ...
- 敏捷开发一千零一问系列之一:序言及解决问题的心法(无我)
这是敏捷开发一千零一问系列的第一篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 转载于:https://w ...
- 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)
这是敏捷开发一千零一问系列的第二篇.(之一,之二,之三,问题总目录) 也是般若敏捷系列第十一篇.(之一,之二,之三,之四,之五,之六,之七,之八,之九,之十,之十一,之十二) 无住 在般若敏捷系列中已 ...
- 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)
这是敏捷开发一千零一问系列的第十七篇.(在这里提问,之一,之二,之三,问题总目录) 这个是在一次面向电信行业供应商的公开课上提出的问题,被评为本场最佳问题. 对于这类"供应商"而言 ...
最新文章
- 模块化的 Windows 7
- Linux内核将支持HyperBus
- NFS 网络文件系统
- SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇
- 【运营】策划朋友圈营销必知的微信八大“封杀”规则
- php websocket 实战,一次WebSocket项目实战后总结的经验
- Java 数据类型和 MySql 数据类型对应一览表
- CentOS 安装MySQL5.7 源码方式安装
- 局域网中传输介质的应用分析
- 如何使柱状图左右展示_关于微生物门类堆叠柱状图,你知道的并不够
- NVIDIA-CUDA编程初探
- 微信扫码提示在浏览器中打开的2种实现方式
- swift 函数类型+高阶函数
- [USACO10OCT]汽水机Soda Machine
- 反向迭代器---迭代器适配器
- Win10无法搜索应用解决
- windows 2003 下SERVU:无法开始服务器.服务器执行缺少
- Android蓝牙协议介绍
- 朗强:画面分割器投影拼接设备与原理
- Form derives from Form