橄榄球与软件开发 (9)

本文摘自《敏捷无敌》一书

阿捷满怀希望地问了很多人,可是最终没有人能够解决他的问题,也没有人知道如何找到敏捷圣贤,甚至大多数人都没听说过论坛里有这么一个ID!几经周折,阿捷终于在论坛早期的精华帖中找到了一个E-mail地址,据帖子主人说,曾经有一个叫做“敏捷圣贤”的朋友通过这个E-mail地址和他讨论了很多软件工程方面的问题,由此促使他写下了这篇帖子。
阿捷怀着死马当活马医的心态,用这个电子邮件地址给传说中的“敏捷圣贤”发了一份电子邮件。

敏捷圣贤:

你好!别人都这么称呼你!我也只好这么称呼你了。   
我现在遇到一些很棘手的问题,我在论坛里发了很多帖子,但是没有人能够帮助我。有人告诉我,可能只有你才能帮助我!  
我是Agile公司的一名项目经理,之前我们采用的传统软件开发模式已经不能满足现在的需要。我想采用敏捷的方式来帮助我们进行开发。
我看过《人月神话》,我知道对于目前的软件开发,还没有什么“银弹”,但我还是希望从你那里获得什么“铜蛋”,或者“糖衣炮弹”也行,只要能解决我的问题!
如果方便,可以回邮件或者加我MSN吗?我的MSN是agilejie@msn.com。   
盼复!极其盼复。    
阿捷

时间一天天过去,白天上班的时候阿捷还要和大民阿朱他们一起为了项目早日Release而浴血奋战,晚上则依旧是一周两次和美国总部那边开Conference Meeting。在其他的时间里,阿捷已经没有时间再去练习CS的枪法,而是如饥似渴地学着敏捷的知识。阿捷有一种预感,如果世间还有一种方法可以帮助他们按时Release Agile OSS 5.0的TD-SCDMA产品,能够帮助中国的销售团队拿到中国移动的TD订单,那就是“敏捷开发”。阿捷还有一种预感,那就是敏捷圣贤一定会给他回信。阿捷每天下班回到家第一件事情就是去查自己的MSN上有没有新加入朋友的请求,而每次的结果都让阿捷很失望。渐渐地,阿捷的心已经有点凉了,自己有时候也在找借口安慰自己:“反正项目Delay也不是TD一个项目组的事情,周小小和Rob他们两个组的进度更慢。
还是在周五晚上,时钟已经指到了凌晨2点,小黑早就已经回到自己的小窝里打着小呼噜了,而阿捷还在开着这周的Conference meeting,情况都不容乐观,不仅中国这三个组,美国那边的开发情况也都不乐观,项目Delay已经成为板上钉钉的事情了。Release Manager甚至建议将开发计划延迟到2008年的5月份。在一阵悲观情绪之中,阿捷结束了这周的Conference Meeting。突然间,MSN弹出一个让阿捷怦然心动的窗口,“Hi,阿捷,请加我。”这个人的签名居然是“敏捷圣贤”!   
阿捷一阵激动,赶紧通过“敏捷圣贤”的请求!那边已经发过来了信息!

敏捷圣贤:你好,阿捷?
阿捷:圣贤你好!我是阿捷。
敏捷圣贤:你是怎么知道我的?
阿捷:嗯,是猴子告诉我的,我们上学的时候住一个宿舍!
敏捷圣贤:哪个猴子?Sorry,我已经没印象了。我知道你说的那个中文的敏捷论坛网站,不过我已经很久没有登录去看了,那里真正有价值的东西太少。
阿捷大致把现在他的项目背景、开发方式、项目管理的方法和工具,以及目前遇到的问题等一股脑讲给敏捷圣贤。他本以为敏捷圣贤会很惊讶于Agile公司系统的庞大和繁杂,却没想到敏捷圣贤对他说:“你之前所说的问题,其实是当前大型软件公司开发的通病,我一点也不惊讶。既然你想用敏捷开发来改变现状,那么我想知道,关于敏捷软件开发,你又了解多少呢?”
阿捷:嗯,我知道TDD,FDD,结对编程……
阿捷把这些天学来的敏捷开发词汇全都敲了出来。
敏捷圣贤:嗯!这都是一些具体的开发模式,对于提高你们的编程效率是有帮助的。但对于项目的整体改善,效果不大,你需要改善项目整体管理方式才行!
阿捷:奥!是什么样的管理方式? 
敏捷圣贤:如果你想使用一个轻量级、能很快取得巨大成效且流程简单容易使用的东西,那就是Scrum!
阿捷:Scrum?这是什么的缩写?
敏捷圣贤:Scrum不是什么缩写,就是一个单词!你看过橄榄球吧? 
阿捷:在电视里看过!橄榄球分为英式和美式,英式不穿防护服和不戴头盔;美式都要带,而且比较野蛮。其实橄榄球起源就在英国,美式橄榄球是后来由移民带到美洲后演变发展而来的。我觉得,共同点是将球送到对方的阵区内,本质区别是英式玩球,美式玩人。但橄榄球跟软件开发有什么关系?
喜欢体育的阿捷从前寒假的时候都会在家里看美国超级碗的转播。 
敏捷圣贤:有关系!你看电视比赛时,当比赛出现小的犯规或因为队员受伤等原因中断的时候,怎么处理的?
阿捷:争球!双方各三名前锋队员相互搂抱,半蹲顶架在一起。由有球权的队投球。投球队员投球后,双方队员互相顶推,中间的队员抢球。投球队员绕到球队的后面将球捡起,可以传球或带球跑,比赛继续进行。
敏捷圣贤:嗯!差不多!你知道在橄榄球中这个术语叫什么吗?
阿捷:国内都叫司克兰。
敏捷圣贤:嗯,英文就是Scrum!意思是密集争球!实际上,我想说的Scrum这个敏捷项目管理方式,寓意就来自于“密集争球(scrum)”,寓指整个团队攒足力量,为了一个共同的目标,一起向前快跑!
阿捷没想到这软件开发还跟橄榄球扯上了,马上输入:呵呵,这个比喻很贴切。
敏捷圣贤:根据我的实践,Scrum是目前最符合敏捷开发模式的敏捷项目管理方式,能带来很多好处。
阿捷马上问道:最初是谁提出的这个思想?都有哪些公司在用?
敏捷圣贤:Scrum是在十多年前由Ken Schwaber和Jeff Sutherland博士共同提出的,现在此方式已被众多大、中、小型企业使用,其中包括Yahoo!,Microsoft,Google,Lockheed Martin,Motorola,SAP,Cisco,GE Medical,CapitalOne和US Federal Reserve。许多使用Scrum的团队都取得了重大的改进,其中更有个别在生产效率和职业道德方面得到了彻底的改革。
阿捷:这么多大公司都在用,看来不错。我们该怎么使用它?到底如何做才算是“Scrum”?
敏捷圣贤:Scrum其实仅仅定义了一个开发框架(Framework),具体的编程实践,完全取决于每个团队,并且是完全基于常识进行管理的。首先,我们来看看Scrum是如何符合我们所熟知的敏捷开发原则的。
阿捷没有马上回答,等着敏捷圣贤把剩下的话说完。 
敏捷圣贤:保持简单:Scrum本身就是很简单轻量级的流程,它能简化我们的开发流程。
接受变化:Scrum鼓励将工作细分成小块。它关注的是一小段一小段时间,但是只有在这些时间段的中间,我们才可以重新调整工作的优先级。
不断迭代:Scrum需要在小于30天的一次次迭代中构建应用程序。
不断的反馈和改善:在每一次迭代的末尾,Scrum流程要求我们回顾以前是怎么做的,并且思考我们下次可以做哪些不同的事来改善流程。
协作:Scrum强烈鼓励团队成员的协作和沟通。如果没有这些,Scrum就一点用都没有。
减少浪费:Scrum帮助我们识别做那些只对客户或者团队有价值的事情。
阿捷:嗯,这些原则真的很实用。那具体的Scrum的流程又是什么样的呢?
敏捷圣贤:在讲流程之前,我先给你讲几个关键的定义。
“产品订单”(Product Backlog):这是你构建一个产品所需做的所有事情的一个高层次的列表,并按优先级排列,这样可以保证你总是工作在最重要的任务上。比如对于整个Agile OSS 5.0产品套件,你的TD-SCDMA就是其中的一个Product Backlog,而且是比较重要的Backlog,要是我,就绝不会让这个Backlog Block整整两个月没有进展。  
“冲刺”(Sprint):一个Sprint就是一次为完成特定目标的迭代,一般是2~4周。 
“冲刺订单”(Sprint Backlog):是Sprint的工作任务列表。一个“冲刺”订单来自于产品订单上最高优先级的一些任务,以及产生的附加任务,每一个任务都应该有一个明确的“完成(Done)”的定义。比如对于你的TD项目组,在每一个开发的版本上都要列出优先的开发任务。  
“产品负责人”(Product Owner):这个人负责维护产品订单内容和优先级。 
阿捷:这些新名词还真的需要时间慢慢习惯才行。那流程到底是怎样的呢?
敏捷圣贤:它是一个非常轻量级的流程。简单讲是先建立一个产品“订单”(Backlog),做一个短期“冲刺”(Sprint)计划,执行这个计划,每天开会讨论计划中的问题和进展,计划完成后演示工作成果,再对该阶段的工作做回顾、反思,接着不断重复以上流程。
阿捷:就这样简单吗?有点太粗略了,你能不能讲得更细一些? 
敏捷圣贤:我可以给你一些细的指导,可是时间不允许!我现在正在San Francisco的机场,等着转机去东京呢!马上要登机了。你在北京?北京好像现在已经很晚了吧?  
阿捷:啊?我这里快凌晨3点了,别管我时间了。赶紧教教我在这个流程中的每一步都该做哪些事情好吗? 
敏捷圣贤:嗯,那我得简短些! 
敏捷圣贤:当你构建产品订单时,要创建一个按优先级排列的所有功能的列表,把最重要的功能放在列表的最前面。 
阿捷有点发傻:如果需要把所有的事情都放进去,不就和敏捷的简单原则相悖吗? 
敏捷圣贤:最初的计划是非常非常高层次的,仅仅是我们对客户从今天开始想要的那些功能的粗略的认识。一旦认识发生变化,就要及时调整。下一步做Sprint“冲刺”计划。你要从产品订单拿出一些优先级最高的任务,制订一个2~4周的计划,决定如何完成这些任务。然后开始执行这个计划。 
阿捷有点明白了:好的。那其他的呢? 
敏捷圣贤补充着:每天开一次短会,检查Sprint中每个任务的进展状况,对未完成的任务,要求任务所有人给出新的剩余工作量的估算。 
阿捷:啊?每天都开一次碰头会,那得浪费多少时间啊! 
敏捷圣贤:所以你作为Scrum Master要让会议开得很短,对于你现在的TD项目组来说,5个人,我觉得只要花10分钟就够了。在Sprint完成之后,大家聚在一起,展示一下工作成果,这时候一定要让产品负责人知道已经完成了哪些工作。   
阿捷:好的,然后再开一次回顾会议?我们以前项目做完后,都会搞一次的。
敏捷圣贤:对,一个Sprint结束后,做一次反省。从团队的角度来审视哪里做得好,并继续保持,找出不好的地方,并寻求改善方法。
阿捷:这个流程真的很简单。不错。 
敏捷圣贤:还有,在一个Sprint做完之后,你要重新调整一次产品订单,然后再做计划,开始下一个Sprint。 
阿捷:好的。呵呵,听起来Scrum还不错。我想下周一就开始,我的项目团队做一个两周的Sprint,看看效果如何。你觉得好吗?
敏捷圣贤:呵呵,不会吧,阿捷,这么着急?你是我遇到的第一个刚听了Scrum,马上就要实施的人!可是你真的准备好了吗?
阿捷很有信心:差不多吧!Scrum这玩艺儿听你讲起来挺简单的!我在网上再找点资料。   
敏捷圣贤:这么有信心!祝你成功!我得走了,已经开始通知旅客登机了! 
阿捷:哈哈,好的。谢谢你!祝你旅途愉快!再见! 
敏捷圣贤:再见! 
阿捷突然又想到一件事情,赶紧和敏捷圣贤说:等一下,还有一个问题。我们原来实行的是CMM/CMMI那套,后来又是六西格玛,现在是ISO 9000,每周的开发都要和美国那边做汇报,现在大家都还在采用传统的瀑布开发模式,要是就我一个组采用Scrum,能跟其他组融合吗?会不会相互冲突?如果冲突怎么办?而我又该如何向我的Manager解释这些呢?

当阿捷敲完这长长的一串时,敏捷圣贤的头像已经变成灰色,他已经下线了。阿捷有点发呆地看着电脑屏幕,看来这些问题只能依靠自己解决了。

敏捷无敌之橄榄球与软件开发(9)相关推荐

  1. 敏捷软件开发方法论_什么是敏捷方法论? 现代软件开发讲解

    敏捷软件开发方法论 如今,每个技术组织似乎都在为软件开发或它的一种版本实践敏捷方法. 或者至少他们相信他们这样做. 无论您是敏捷应用程序开发的新手还是几十年前使用瀑布式软件开发方法学过的软件开发,如今 ...

  2. 如何成功软件开发外包

    软件开发外包已成为当今数字世界的全球趋势.外包被认为纯粹出于预算原因的日子已经一去不复返了.随着对技术人才需求的增加,某些地理区域内的资源似乎正在迅速萎缩.公司发现自己需要内部并不总是可用的优秀人才. ...

  3. 华为上线软件开发云,一站式云端 DevOps 平台

    在12月22日举办的"2016华为大连软件开发云上线大会"上,华为正式上线发布了集其自身研发实践.前沿研发理念.先进研发工具为一体的软件开发云平台,面向软件企业.高校和开发者提供云 ...

  4. 微服务时代 怎么看华为软件开发云实现DevOps落地

    [51CTO.com原创稿件] 云计算改变了服务构建和交付的模式,从最初饱受争议到万千宠爱,扮演着越来越重要的角色,为业务创新和价值交付奠定了基础. 以此同时,在软件行业中,随着移动.社交.大数据.I ...

  5. [架构之路-131]-《软考-系统架构设计师》-软件工程-1-软件工程方法大全(软件开发过程方法、软件开发过程模型、逆向工程、净室软件工程)

    前言: 第3章 软件工程 3.1 软件开发过程方法 3.1.1 什么是软件工程 软件工程是一门研究用工业硬件生产的工程化方法构建和维护有效.实用和高质量的软件的学科. 它涉及程序设计语言.数据库.软件 ...

  6. 敏捷软件开发scrum介绍

    敏捷软件开发最近几年越来越火.跟传统软件开发相比有什么优点呢.今天我们就来聊一聊. 首先我们来看下什么叫做敏捷. 敏捷软件开发过程 软件开发过程是指设计软件开发过程中涉及的一系列活动,指导开发组一步一 ...

  7. 敏捷软件开发的12个原则

    作为一个软件工程师,软件设计和开发是最重要的技能,但是,从整个产品的角度上讲,项目管理能力比开发能力更重要,本文摘自Robert大叔的<敏捷软件开发>,粗体是Robert大叔的话,细体是我 ...

  8. 敏捷软件开发实践——估算与计划02

    目录 一.使用故事点估算大小 1.故事点是相对的 2.速度 3.小结 二.使用理想人天进行估算 1.理想时间和软件开发 2.以理想人天作为对大小的度量 3.给出一个而不是多个估算值 4.小结 三.估算 ...

  9. 敏捷软件开发实践——估算与计划(01)

    目录 一.计划的目的 1.为什么要进行估算和计划 2.优秀的计划是什么 3.敏捷计划是什么 4.小结 二.计划失败的原因 1.基于活动而不是基于特性进行计划 1.1.活动不会提前完成 1.2.延误沿着 ...

  10. 敏捷软件开发之何为敏捷开发

    敏捷开发,Agile Development,就是指能够在需求迅速变化的情况下快速开发软件.我们接触最多敏捷实践方式有:极限编程(XP).结对编程.测试驱动开发(TDD)等. 追究敏捷的历史,就必须要 ...

最新文章

  1. 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境
  2. 除了TensorFlow、PyTorch,还有哪些深度学习框架值得期待?
  3. 组装一台计算机 java_如何在同一台计算机上安装多个Java版本
  4. LinuxCNC解析(一)之安装Linuxcnc所需要的依赖包
  5. Python开发【第五篇】迭代器、生成器、递归函数、二分法
  6. flag push tcp 作用_TCP协议超详细解析及攻击/防范
  7. python能做什么项目-Python可以做大项目吗?
  8. JMeter设置集合点
  9. 以组播流方式替换运营商IPTV直播频道
  10. 单声道,立体声 ,功放驱动喇叭的功率选择,功放的适配(A类,B类。。),怎样测量音量信号--怎样不烧坏喇叭。
  11. 电子科技大学生物信息学 重点
  12. 计算机思维的概念知识点,思维的基本特征知识点的理解
  13. VR全景智慧城市虚拟现实三维的发展
  14. 深度学习数据集—鞋子、凉鞋和靴子图片数据集介绍
  15. 消费者理论:效用函数
  16. T1118,T1677,T1122
  17. PostgreSQL数据库动态共享内存管理器——dynamic shared memory segment
  18. 揭开全景相机的创业真相
  19. 数据集仓库 —— UCI Machine Learning Repository
  20. 【OpenCv】图像模糊(均值模糊,高斯模糊,中值模糊,双边模糊)

热门文章

  1. Docker简介/安装/使用
  2. linux 搜狗输入法使用技巧,在Deepin 20系统中使用官方搜狗输入法的技巧
  3. 【java】this()与super()使用详解
  4. VS2013好用的插件
  5. 考研政治---马克思主义基本原理概论---认识论
  6. 【面试】AI算法工程师---面试题!(第二部分:AI部分)
  7. 万圣节| Huluween“魔幻洞窟”闯关之夜
  8. Linux服务与管理-step1
  9. angularjs textarea 剩余字数统计
  10. 微信小程序学习心得----订咖啡