秉承敏捷宣言的精神(个体与交付重于过程和工具;可用的软件重于完备的文档;客户协作重于合同谈判;响应变化重于遵循计划),我认为,敏捷开发大致应该体现如下的思想:拥抱变化、自我组织、简单最好、客户至上、有效沟通、精益求精。

1、拥抱变化

Kent Beck和Martin Fowler在介绍极限编程(eXtreme Programming)时,最先提到的就是要拥抱变化。这基本上代表了敏捷阵营对于变化的一种态度,那就是不拒绝,而且还要主动求变。有一句经典的论断说得好:“在软件开发领域中,唯一的不变就是变化。”其实,不仅仅是软件开发领域,世间万事万物都处在永恒的变化之中,这是宇宙的基本规律。奥巴马在竞选美国总统的时候,提出的口号就是“变化”。变化才是真正的常态。

传统的软件开发过程由于过分强调文档的完整,重视与客户的谈判与签订合同。所以,开发团队最希望的一件事情是冻结需求规格说明书。只要双方签字,需求就确定下来,不可更改。若要更改,必须经过需求变更委员会,走非常严格的需求变更流程。如果软件开发真能如此,倒也算是我们开发人员的幸事。但现实总是残酷的,需求总是会变化。变化的原因有以下几种: 
1)业务发生了变化; 
2)客户对业务的理解发生了变化; 
3)需求分析人员对需求的理解出现了偏差,需要修正。

对于第一点,或许我们还能够根据合同与客户讨价还价,而对于后两点,尤其是第三点,我们显然是不可拒绝的。而敏捷方法则要求团队随时响应客户的需求,针对变化给出相应的解决方案。

如何拥抱变化呢?我想可以通过如下方式来实现: 
1)现场客户

很多开发团队并不喜欢客户对他们指手画脚,甚至认为他们不停提出的需求变化让他们疲于应对。但现场客户给团队开发带来的益处还是要远远超过他带来的坏处。无论团队中聚集了多么权威的领域专家,但真正了解客户需求的还是客户自己。也许他们很难用语言来表述自己的想法,但有了和现场客户的及时沟通,我们才能够在发生变化的初始就能够获得第一手的资讯。如果事情总要发生,早解决绝对比晚解决要好,而且要好得多。

如果在开发中,没有办法让客户成为团队的一员,那么我们也应该指定一位客户代表,退而求其次,也应该在团队中指定一位业务专家负责业务事宜,也就是Scrum中Product Owner的角色。总之,我们需要在项目开发中,能够让开发人员在对需求理解发生困惑时,能够明确地知道由谁来负责。而一旦需求发生变化,也必须有专门的角色负责向整个团队或者相关人士传达。至于业务功能的优先级和重要程度排定,也必须由这个角色指定。

2)定期迭代和小版本交付

不仅要定期迭代,而且要尽可能地让迭代周期短,并及时交付可以工作的小版本发布。XP的迭代周期通常为一周,而发布一个小版本大约是一个月。而Scrum则将迭代称之为Sprint,持续时间推荐为一个月。Sprint结束就需要向客户展示当前迭代完成的版本。

敏捷方法绝对不可闭门造车,因为需求总是可能存在二义性,且需求总是处于不断的变化中。若能定期交付一个可以工作的小版本,一方面可以给与开发团队和客户以信心,另一方面也有助于我们及时获得客户的反馈。而衍生带来的还有一个好处是我们可以免费找到最优秀的测试人员了,那就是我们的客户。如果没有现场客户,则小版本的交付则显得尤为重要,因为它给了我们及早修订错误的机会。

3)持续改进

开发过程总是会出现错误,无论是开发方法、技能,还是团队管理与团队合作。持续地改进我们的开发方法、管理方法与开发过程,才能够及时而有效地解决错误,避免重蹈覆辙。一个能够持续改进的团队是一个成长的团队,同时必然会是一个拥抱变化的团队。

在Scrum中,每个Sprint完成并结束了评审会议之后,都会召开一个回顾会议,即使总结优秀经验,检讨错误与教训,团队方能够从错误中成长起来。此外,回顾会议还能够帮助团队正确地认识自己,帮助团队成员进行交流与沟通。作为“鸡”角色的客户若能参加回顾会议,可以让客户更直观地了解团队,比提出自己的看法,有助于在后面的开发过程改善合作的质量。

敬请期待第二篇《敏捷开发思想之自我组织》

本文转自wayfarer51CTO博客,原文链接:http://blog.51cto.com/wayfarer/280167,如需转载请自行联系原作者

敏捷开发思想之拥抱变化相关推荐

  1. 在当前项目组中引入敏捷开发思想

    周五下午4:00,延期多次的内部分享终于开始了. 参加人员有TOPK项目组全员,还有OA项目组的光辉和邹兆芩参加交流学习. 本次分享的主题是:敏捷. 分享之前,先把最近讨论过的发版方案回顾了一下.回顾 ...

  2. 敏捷开发思想及Scrum实践

    导语:现在每当直接或间接带一支研发团队我都会给大家做一次敏捷思想和实践的培训(注:软件方向,复杂的硬件开发流程建议使用IPD思想).作为一个有近10年的开发编码工作经验的资深程序员,作为一个管理者,作 ...

  3. 敏捷开发思想的终极应用:软件快速开发平台

    如今,随着信息技术的不断发展,互联网进入了一个相对繁荣的时期,而企业要想跟得上潮流,信息化建设必不可少,但是面对眼花缭乱的软件开发公司,选择成了难题. 传统软件开发 传统的软件业务更多的是走定制开发的 ...

  4. 敏捷开发_敏捷开发之看板

    什么是敏捷开发? 核心是迭代开发(iterative development),拥抱变化.因为最终目标是让客户满意,所以能够主动接受需求变更,这就使设计出来的软件有灵活性,可扩展性. 敏捷一定是采用迭 ...

  5. 腾讯资深产品经理谈敏捷开发于游戏

    敏捷开发思想谈        敏捷的原则 敏捷开发其实并没有标准型的流程.SCRUM也只是众多衍生体中的一个.实际上就算是SCRUM的实际使用也情况千差万别.所以首先,请大家有这么个概念:       ...

  6. 敏捷开发 vs 传统开发

    说起敏捷开发,并不是因为敏捷而敏捷.这几年的敏捷开发已经被很多敏捷咨询服务商神话了,这个东西并不是神器,实施了就可以解决所有软件公司的问题,而是要结合自己公司的特点和问题摸索出适合自己的一套模式. 大 ...

  7. 敏捷开发-互联网大厂们都在用的软件开发模式

    前言 近些年随着中国移动互联网的高速发展,几乎所有互联网公司和软件开发公司都在实践敏捷开发,那敏捷开发究竟是什么,相比于传统的瀑布开发有什么好处.对于小白程序员来讲,非常有必要了解何为敏捷开发. 什么 ...

  8. 《高效程序员的45个习惯——敏捷开发修炼之道》读书笔记

    <高效程序员的45个习惯--敏捷开发修炼之道>的读书笔记 <高效程序员的45个习惯--敏捷开发修炼之道>[美]Venkat Subramaniam / Andy Hunt 著 ...

  9. \t\t【体会】敏捷开发 - 固本 + 持续小跑

    1) 注重概念和架构设计,而轻详细设计 敏捷开发中,注重概念和架构设计,而轻详细设计.这里的概念设计,可以看成是为什么要做这个产品或模块,强调的是产品的路线规划.市场趋势.客户价值.技术趋势等.架构设 ...

  10. 敏捷开发之道 总结小记

    第一章 敏捷-高效软件开发之道 敏捷开发宣言 个体和交互胜过过程和工具 可工作的软件胜过面面俱到的文档 客户协作胜过合同谈判 响应变化胜过遵循计划 敏捷的精神 一种以人为本.团队合作.快速响应变化和可 ...

最新文章

  1. paddle一体安装
  2. Habana Labs
  3. Python爬虫基础面试题为2020年初大学生就业做准备(文末附教程)
  4. 半监督分类算法_用图网络进行半监督分类
  5. Handlebars partials 隐藏的力量
  6. 同步规则和happen-before规则
  7. Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
  8. 软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...
  9. 计算机机房工程规划方案,机房工程规划书文档.docx
  10. Settings界面分析之Settings一级界面
  11. Codeforces 875C National Property(拓扑排序)
  12. 437.路径总和III (力扣leetcode) 博主可答疑该问题
  13. Python单元测试报告框架PyTestReport
  14. 疯狂原始人服务器维修,《疯狂原始人》进不去解决办法 进不去怎么办
  15. mat1 and mat2 shapes cannot be multiplied ( )的解决
  16. 进程子进程 线程子线程结束问题
  17. 如何让C盘可用空间变大
  18. Python爬取6271家死亡公司数据,一眼看尽十年创业公司消亡史!
  19. 赛灵思 Xilinx UG1506 - Versal ACAP 开发板系统设计方法指南(中文版) (v2021.2)
  20. 计算机课ps软件,电脑上的ps软件叫什么

热门文章

  1. x264去方块滤波函数解析(二)
  2. 自营、自营+平台、平台
  3. 储备池计算(Reservoir Computing)综述
  4. pdm系统是归档服务器吗,PDM系统的主要功能
  5. Resource leak解决办法
  6. php 合并多个pdf,快速查阅多个PDF文件,这2个PDF合并技巧要学会!
  7. 算法题--字符串排列组合、n皇后、字符出现次数(C++)
  8. 图解GC(垃圾回收)复制算法加强版(1)Cheney的复制算法
  9. 我为什么鼓励工程师写 blog?
  10. Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode...