Scrum敏捷开发方法实践
前言
作者所在的公司在项目开发的过程中采用着当下互联网公司中流行的小步快跑开发策略,特别借鉴了敏捷开发中的迭代递增思想来指导项目的开发。我们经过对相关敏捷开发方法的调查研究,最终采用了Scrum敏捷开发方法来管理项目。敏捷开发思想和相关方法的应用降低了项目的风险,极大地提升了项目团队对需求变更的响应速度和处理能力,每个迭代周期的版本发布都是对团队成员对激励,让整个团队对项目的信心越来越强。今天作者和大家聊聊Scrum敏捷开发方法以及它的实践。
敏捷开发原则
《敏捷宣言》中发布了12条敏捷原则和相关的敏捷开发价值观,用来指导软件开发过程。其中我们在项目中主要遵循的两条关键原则是:可工作的软件优于面面俱到的文档;对需求变化的响应优于对计划的遵循。
其中,可工作的软件系统优于面面俱到的文档这一原则是强调通过频繁持续地提供可供用户使用的软件系统来提升用户和开发团队对软件系统的信心,能够更及时地获取到用户和市场的反馈,调整后续的开发计划和需求的优先级。用户最终需要的是一个满足需求的可工作的软件系统而不是面面俱到的文档,过多过复杂的文档会成为开发团队的负担,而且也没有人愿意去读。根据作者多年的软件项目开发和管理经验来看,这个观点是在当前的互联网环境下是十分适用的。当前的互联网应用迭代更新很快,市场的需求也在瞬息万变,在半年前还十分重要的需求,在半年后可能也已经不是一个优先级很高的需求了。而且,及早地发布可以使用的软件版本确实可以尽早地收集到用户的反馈,从而及时调整后续项目的开发方向。举例来讲,Instgram在最初的版本只是一个简单的根据地理位置进行打卡的工具。市场的反响不是很理想,同时发现用户对地理位置不是很在乎,反而对上传照片很感兴趣,后来就调整了开发的方向转做图片上传的软件。
对需求变化的响应优于对计划的遵循。敏捷开发承认开发过程中的不确定性,在开发的过程中需要通过不断规划,执行和调整来消除不确定性。如果一味地遵循一个庞大而复杂的计划,会使团队变得很被动,无力抵抗需求的变化,最终开发出的软件系统并不满足市场和用户的需求。作者对这一点深有体会,作者之前所在的公司是一家传统的商业智能分析公司,其BI产品在市场中占有很高的占有率。2013年,公司的高级管理层做出一个决定,要做一款软件,帮助人们享受智能生活,只要有一部智能机在手就可以满足人们所有的日常生活需要,其愿景有点儿类似今天的支付宝和微信。为此,公司做了一个长达一年的开发计划,投入了很多优秀的开发人员和软硬件资源,但是因为没能够及时获取到市场的反馈,投入市场的APP并没有得到市场的认可。
Scrum开发方法
通过对当前各种类型敏捷开发方法的分析和比较,以及结合我们公司的实际情况。我们最终选择了Scrum敏捷开发方法,Scrum敏捷开发方法流程如下图所示。
Scrum开发方法包含5种不同类型的会议,每一种会议都有它明确的目标。
1.Sprint计划会议
在每个迭代开发周期的开始阶段,Sprint计划会议被召开。通常来讲,整个团队成员最好都参加计划会议。计划会议的目的是制定出一份切实可行的待办需求列表,同时选择出一个最高优先级的需求,每个需求的开发周期最好在2周以内。产品经理可以给开发团队解释待办需求列表中的每一个需求。
2.每日站会
当一个迭代开发周期被启动之后,每天举行站会是十分必要的,该会议的持续时间要严格控制在15分钟之内。该会议上面每个人都要回答三个问题:
- 你昨天完成了哪些任务?
- 今天你的工作安排是什么?
- 是否有任何障碍影响了你的工作进度?
3.Sprint评审会议【可选】
每个迭代开发周期结束的时候,最好举行一个评审会议,这个会议的主要目标是向大家演示产品的功能,让大家了解到我们完成的产品是符合预期的。随着互联网应用的更新迭代速度越来越快,实际上现在每个迭代开发周期结束后都举行一次评审会议,已经变得不是十分必要了。
4.Sprint回顾会议
Sprint回顾会议,顾名思义,主要是帮助团队来总结每次迭代开发周期中有哪些地方做得好,哪些地方做得不好,未来有哪些需要改进的地方。
5.Backlog Refinement会议【需求细化会议】
在Sprint计划会议之前,实际上还有一个需求细化会议,其主要目标是对待办需求列表中的需求进行细化,让团队能够更好地理解需求细节以及需求的目标是什么。需求细化会议可以减少Sprint计划会议的持续时间,同时也给团队成员一些时间去思考需求的问题、意义和优先级。
实践与问题
在实践中,我们不能去生搬硬套Scrum开发方法的流程,而是要从自身的开发环境和需要出发制定适合自己团队的开发流程。
1.取得团队成员的认同
很多时候,你的团队成员可能并不会认同Scrum开发方法,他们可能会认为依照Scrum开发流程没什么好处,只是单纯地在浪费时间而已。因此,我们必须尽可能让团队成员理解这个开发流程和项目的目标。这样有助于将团队所有成员凝聚成一个整体,消除团队成员在方向和认知上面的冲突。
2.会议目标要明确
在每次会议之前我们都要有明确的会议目标,否则的话我们的会议很容易就变成漫无目的的闲聊。
3.面对陌生领域
有些待开发的需求会涉及到技术上的未知领域,开发团队不好对相关需求所需的时间和资源进行评估。我们会根据实际情况采用如下的解决方案。如果相关技术领域团队的人员比较充足,我们会拆分部分开发成员去调研相关技术领域的解决方案;如果相关技术领域团队人员不足,我们会首先调整待开发需求的选择,不再采用“高价值”优先的选择策略,而且采用避重就轻的策略选择技术难度较低的需求,从而给相关的技术团队留出相应的技术调研时间。如果,没有这样的需求可供选择,我们会单独安排一个小的周期专门用于相关技术调研。
4.团队成员缺席
在开发的过程中,难免会遇到团队成员请假的情况,从而影响整体的开发进度。这个时候,我们采用的做法是留出相应的冗余时间,我们给出15%的冗余时间用来应对部分团队成员因为不可预知的情况而缺席迭代开发任务的情况。
总结
Scrum开发的迭代增量思想非常适合当前的互联网项目开发,但是必须根据自身的情况进行相应修改。没有放之四海而皆准的开发流程,在任何的开发管理流程中都会需要突发情况,对于相应的突发情况,我们要做好相应的预案尽可能降低项目的风险。
Scrum敏捷开发方法实践的更多相关文章
- 敏捷开发方法(一) Scrum
Scrum团队:由产品负责人.开发团队和Scrum Master组成. 是跨职能的自组织团队 自组织团队自己选择如何最好地完成工作,而不是由团队外的人指导 跨职能团队拥有完成工作所需要的全部技能,不需 ...
- 关于敏捷开发方法(Agile Software Development)的阅读笔记
对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...
- 【软件工程】week5-个人作业-敏捷开发方法初窥
敏捷开发方法初窥 引言:本周的软件工程个人博客作业是阅读关于敏捷开发方法的文章(http://martinfowler.com/agile.html),并撰写自己的读后感.文章内容非常丰富,对敏捷开发 ...
- XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化
XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...
- 产品研发团队如何融合OKR与Scrum敏捷开发?
「 OKR 」现在非常的火爆,很多公司都在使用,不仅国外的 Google.英特尔等大公司在用,国内的一线知名互联网企业今日头条和一些创业团队也都在使用. 那为什么「 OKR 」这么受欢迎呢,因为把它可 ...
- Scrum敏捷开发沉思录
计算机科学的诞生,是世人为了用数字手段解决实际生活中的问题.随着时代的发展,技术的进步,人们对于现实世界中的问题理解越来越深刻,描述也越来越抽象,于是对计算机软件的需求也越来越高,越来越复杂,变化也越 ...
- 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍
如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...
- Scrum敏捷开发简介
Agile 敏捷开发实践中,强调团队的自我管理.在 Scrum 中,自我团队管理体现在每天的 Scrum 会议中和日常的协同工作,在每天的 Scrum 例会中,团队成员一般回答一下几个问题 : 昨天完 ...
- 项目的敏捷开发方法(转自MBAlib)
项目的敏捷开发方法 敏捷方法很多,包括 Scrum.极限编程.功能驱动开发以及统一过程(RUP)等多种法,这些方法本质实际上是一样的,敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作: 按短迭代 ...
- SCRUM敏捷开发规则一栏
敏捷.敏捷开发这类词近期非常火!敏捷开发,就是指可以在需求迅速变化的情况下高速开发软件.我们接触最多的和敏捷相关的名词是:极限编程(XP).结对编程.測试驱动开发(TDD)等. 敏捷建模(Agile ...
随机推荐
- MongoDB 副本集故障情况描述
副本集有两种类型三种角色 两种类型: 主节点( Primary)类型:数据操作的主要连接点,可读写. 次要(辅助.从)节点( Secondaries)类型:数据冗余备份节点,可以读或选举. 三种角色: ...
- python动态参数
Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的方式. ...
- Fluentd部署:错误排查
介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent.l ...
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案
大家好,又见面了. 不知道下面这玩意大家有没有见过或者使用过?这是一个插座转换器.我们都知道日常使用的是220v的交流电,而国外不同国家使用的电流电压是不一样的(比如日本使用的是110v).且插座的接 ...
- POJ2104 K-th number (整体二分)
刚学了整体二分,用这种解法来解决这道题. 首先对于每个询问时可以二分解决的,这也是可以使用整体二分的前提.将原来的序列看成是插入操作,和询问操作和在一起根据值域进行二分.用树状数组来检验二分值. 1 ...
- JavaScript基本语法(函数与对象)
3.函数 #①内置函数 内置函数:系统已经声明好了可以直接使用的函数. #[1]弹出警告框 alert("警告框内容"); #[2]弹出确认框 用户点击『确定』返回true,点 ...
- centos7 安装RabbitMQ3.6.15 以及各种报错
成功图镇楼 各个版本之间的差异不大,安装前要确保rabbitmq 的版本和 elang的版本一致.预防各种错乱. 注意点:(重要!!重要!!) * 同时安装的时候最好确保rabbitmq和erlang ...
- 那齐博x3又什么什么?
那齐博x3又什么什么? 齐博x3是齐博X1/齐博x2之后的升级版本. 主要优化圈子系统
- 使用 etcdadm 快速、弹性部署 etcd 集群
Etcd 是一个可靠的分布式键值存储, 常用于分布式系统关键数据的存储:而 etcdadm 是一个用于操作 etcd 集群的命令行工具,它可以轻松创建集群.向现有集群添加成员.从现有集群中删除成员等操 ...
- 亚马逊云 RDB数据故障转移(多可用区)
RDB关系数据库(Relational Database,RDB) 创建名为VPC for RDS的vpc 两个可用区,两组公内网 创建安全组 创建RDS数据库实例用的数据库子网组 创建RDS数据库实 ...