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 ...
随机推荐
- 使用 PushGateway 进行数据上报采集
转载自:https://cloud.tencent.com/developer/article/1531821 1.PushGateway 介绍 Prometheus 是一套开源的系统监控.报警.时间 ...
- IC入门课第五课作业:完善 Microblog 前端(1、显示发布者的名字;2、增加新UI、3、关注其他学员的 canister)
上周完成了 IC 入门课程第五课的作业 现将答案贴出,欢迎同学们参考,禁止抄袭作业哦 课程作业 (完善 microblog 前端) 1. 显示消息的发布者名字 a. 给 Message 增加 auth ...
- POJ3585 Accumulation Degree (树形DP-二次扫描与换根)
本题属于不定根的树形DP,若以每个节点为根求解一次,复杂度太高,所以可以用换根的技巧. d[u]表示以u为根向下可以流的最大流量,这个是比较好求的,直接遍历到叶子节点,由子节点信息更新父节点.然后进行 ...
- 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
前言 前面我们给大家介绍了基于LabVIEW+YOLOv3/YOLOv4的物体识别(对象检测),今天接着上次的内容再来看看YOLOv5.本次主要是和大家分享使用LabVIEW快速实现yolov5的物体 ...
- .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度
作业调度其实就是一个定时器,定时完成某件事, 比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等. 作业类:XiaoFeng.Threadin ...
- 彻底学会Selenium元素定位
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/63099961.html 你好,我是测试蔡坨坨. 最近收到不少初学UI自动化测试的小伙伴私信,对于元素的定位还是有些头疼,总 ...
- python信息检索实验之向量空间模型与布尔检索
import numpy as np import pandas as pd import math def bool_retrieval(string): if string.count('and' ...
- 文盘Rust -- 把程序作为守护进程启动
当我们写完一个服务端程序,需要上线部署的时候,或多或少都会和操作系统的守护进程打交道,毕竟谁也不希望shell关闭既停服.今天我们就来聊聊这个事儿. 最早大家部署应用的通常操作是 "nohu ...
- Day1:Markdown文本基础操作
Markdown学习 标题 一级标题 输入:#+空格+标题名字 :快捷键(Ctrl+1~6) 二级标题 输入:##+空格+标题名字 为二级标题 依次加#(最多六级标题) 三级标题 四级标题 字体 He ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...