前言

  作者所在的公司在项目开发的过程中采用着当下互联网公司中流行的小步快跑开发策略,特别借鉴了敏捷开发中的迭代递增思想来指导项目的开发。我们经过对相关敏捷开发方法的调查研究,最终采用了Scrum敏捷开发方法来管理项目。敏捷开发思想和相关方法的应用降低了项目的风险,极大地提升了项目团队对需求变更的响应速度和处理能力,每个迭代周期的版本发布都是对团队成员对激励,让整个团队对项目的信心越来越强。今天作者和大家聊聊Scrum敏捷开发方法以及它的实践。

敏捷开发原则

  《敏捷宣言》中发布了12条敏捷原则和相关的敏捷开发价值观,用来指导软件开发过程。其中我们在项目中主要遵循的两条关键原则是:可工作的软件优于面面俱到的文档;对需求变化的响应优于对计划的遵循。

其中,可工作的软件系统优于面面俱到的文档这一原则是强调通过频繁持续地提供可供用户使用的软件系统来提升用户和开发团队对软件系统的信心,能够更及时地获取到用户和市场的反馈,调整后续的开发计划和需求的优先级。用户最终需要的是一个满足需求的可工作的软件系统而不是面面俱到的文档,过多过复杂的文档会成为开发团队的负担,而且也没有人愿意去读。根据作者多年的软件项目开发和管理经验来看,这个观点是在当前的互联网环境下是十分适用的。当前的互联网应用迭代更新很快,市场的需求也在瞬息万变,在半年前还十分重要的需求,在半年后可能也已经不是一个优先级很高的需求了。而且,及早地发布可以使用的软件版本确实可以尽早地收集到用户的反馈,从而及时调整后续项目的开发方向。举例来讲,Instgram在最初的版本只是一个简单的根据地理位置进行打卡的工具。市场的反响不是很理想,同时发现用户对地理位置不是很在乎,反而对上传照片很感兴趣,后来就调整了开发的方向转做图片上传的软件。

对需求变化的响应优于对计划的遵循。敏捷开发承认开发过程中的不确定性,在开发的过程中需要通过不断规划,执行和调整来消除不确定性。如果一味地遵循一个庞大而复杂的计划,会使团队变得很被动,无力抵抗需求的变化,最终开发出的软件系统并不满足市场和用户的需求。作者对这一点深有体会,作者之前所在的公司是一家传统的商业智能分析公司,其BI产品在市场中占有很高的占有率。2013年,公司的高级管理层做出一个决定,要做一款软件,帮助人们享受智能生活,只要有一部智能机在手就可以满足人们所有的日常生活需要,其愿景有点儿类似今天的支付宝和微信。为此,公司做了一个长达一年的开发计划,投入了很多优秀的开发人员和软硬件资源,但是因为没能够及时获取到市场的反馈,投入市场的APP并没有得到市场的认可。

Scrum开发方法

通过对当前各种类型敏捷开发方法的分析和比较,以及结合我们公司的实际情况。我们最终选择了Scrum敏捷开发方法,Scrum敏捷开发方法流程如下图所示。

Scrum开发方法包含5种不同类型的会议,每一种会议都有它明确的目标。

1.Sprint计划会议

在每个迭代开发周期的开始阶段,Sprint计划会议被召开。通常来讲,整个团队成员最好都参加计划会议。计划会议的目的是制定出一份切实可行的待办需求列表,同时选择出一个最高优先级的需求,每个需求的开发周期最好在2周以内。产品经理可以给开发团队解释待办需求列表中的每一个需求。

2.每日站会

当一个迭代开发周期被启动之后,每天举行站会是十分必要的,该会议的持续时间要严格控制在15分钟之内。该会议上面每个人都要回答三个问题:

  1. 你昨天完成了哪些任务?
  2. 今天你的工作安排是什么?
  3. 是否有任何障碍影响了你的工作进度?

3.Sprint评审会议【可选】

每个迭代开发周期结束的时候,最好举行一个评审会议,这个会议的主要目标是向大家演示产品的功能,让大家了解到我们完成的产品是符合预期的。随着互联网应用的更新迭代速度越来越快,实际上现在每个迭代开发周期结束后都举行一次评审会议,已经变得不是十分必要了。

4.Sprint回顾会议

Sprint回顾会议,顾名思义,主要是帮助团队来总结每次迭代开发周期中有哪些地方做得好,哪些地方做得不好,未来有哪些需要改进的地方。

5.Backlog Refinement会议【需求细化会议】

在Sprint计划会议之前,实际上还有一个需求细化会议,其主要目标是对待办需求列表中的需求进行细化,让团队能够更好地理解需求细节以及需求的目标是什么。需求细化会议可以减少Sprint计划会议的持续时间,同时也给团队成员一些时间去思考需求的问题、意义和优先级。

实践与问题

在实践中,我们不能去生搬硬套Scrum开发方法的流程,而是要从自身的开发环境和需要出发制定适合自己团队的开发流程。

1.取得团队成员的认同

很多时候,你的团队成员可能并不会认同Scrum开发方法,他们可能会认为依照Scrum开发流程没什么好处,只是单纯地在浪费时间而已。因此,我们必须尽可能让团队成员理解这个开发流程和项目的目标。这样有助于将团队所有成员凝聚成一个整体,消除团队成员在方向和认知上面的冲突。

2.会议目标要明确

在每次会议之前我们都要有明确的会议目标,否则的话我们的会议很容易就变成漫无目的的闲聊。

3.面对陌生领域

  有些待开发的需求会涉及到技术上的未知领域,开发团队不好对相关需求所需的时间和资源进行评估。我们会根据实际情况采用如下的解决方案。如果相关技术领域团队的人员比较充足,我们会拆分部分开发成员去调研相关技术领域的解决方案;如果相关技术领域团队人员不足,我们会首先调整待开发需求的选择,不再采用“高价值”优先的选择策略,而且采用避重就轻的策略选择技术难度较低的需求,从而给相关的技术团队留出相应的技术调研时间。如果,没有这样的需求可供选择,我们会单独安排一个小的周期专门用于相关技术调研。

4.团队成员缺席

  在开发的过程中,难免会遇到团队成员请假的情况,从而影响整体的开发进度。这个时候,我们采用的做法是留出相应的冗余时间,我们给出15%的冗余时间用来应对部分团队成员因为不可预知的情况而缺席迭代开发任务的情况。

总结

  Scrum开发的迭代增量思想非常适合当前的互联网项目开发,但是必须根据自身的情况进行相应修改。没有放之四海而皆准的开发流程,在任何的开发管理流程中都会需要突发情况,对于相应的突发情况,我们要做好相应的预案尽可能降低项目的风险。

Scrum敏捷开发方法实践的更多相关文章

  1. 敏捷开发方法(一) Scrum

    Scrum团队:由产品负责人.开发团队和Scrum Master组成. 是跨职能的自组织团队 自组织团队自己选择如何最好地完成工作,而不是由团队外的人指导 跨职能团队拥有完成工作所需要的全部技能,不需 ...

  2. 关于敏捷开发方法(Agile Software Development)的阅读笔记

    对“敏捷开发”(Agile Software Development)这个词,我是在这学期邹欣老师<现代程序设计>课上第一次听到的,刚听到时并不知道其具体指什么,只是从字面上直觉其意思应该 ...

  3. 【软件工程】week5-个人作业-敏捷开发方法初窥

    敏捷开发方法初窥 引言:本周的软件工程个人博客作业是阅读关于敏捷开发方法的文章(http://martinfowler.com/agile.html),并撰写自己的读后感.文章内容非常丰富,对敏捷开发 ...

  4. XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化

    XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...

  5. 产品研发团队如何融合OKR与Scrum敏捷开发?

    「 OKR 」现在非常的火爆,很多公司都在使用,不仅国外的 Google.英特尔等大公司在用,国内的一线知名互联网企业今日头条和一些创业团队也都在使用. 那为什么「 OKR 」这么受欢迎呢,因为把它可 ...

  6. Scrum敏捷开发沉思录

    计算机科学的诞生,是世人为了用数字手段解决实际生活中的问题.随着时代的发展,技术的进步,人们对于现实世界中的问题理解越来越深刻,描述也越来越抽象,于是对计算机软件的需求也越来越高,越来越复杂,变化也越 ...

  7. 如何避免Scrum敏捷开发团队反思会形式化,海星法介绍

    如何避免Scrum敏捷开发团队反思会形式化? 迭代压力很大,根本没时间,而且,反思会上大家都在互相推脱责任,会议成了“批斗大会”,所以团队的人都觉得这个会很鸡肋. 很多团队在开反思会时是这么干的:产品 ...

  8. Scrum敏捷开发简介

    Agile 敏捷开发实践中,强调团队的自我管理.在 Scrum 中,自我团队管理体现在每天的 Scrum 会议中和日常的协同工作,在每天的 Scrum 例会中,团队成员一般回答一下几个问题 : 昨天完 ...

  9. 项目的敏捷开发方法(转自MBAlib)

    项目的敏捷开发方法 敏捷方法很多,包括 Scrum.极限编程.功能驱动开发以及统一过程(RUP)等多种法,这些方法本质实际上是一样的,敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作: 按短迭代 ...

  10. SCRUM敏捷开发规则一栏

    敏捷.敏捷开发这类词近期非常火!敏捷开发,就是指可以在需求迅速变化的情况下高速开发软件.我们接触最多的和敏捷相关的名词是:极限编程(XP).结对编程.測试驱动开发(TDD)等. 敏捷建模(Agile ...

随机推荐

  1. python动态参数

    Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,实际上你可以使用*any或**whatever的方式. ...

  2. 🔥支持 Java 19 的轻量级应用开发框架,Solon v1.10.4 发布

    Java 轻量级应用开发框架.可用来快速开发 Java 应用项目,主框架仅 0.1 MB. 相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) ...

  3. 追求性能极致:Redis6.0的多线程模型

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  4. 关于maven插件在Myeclipse中的使用

    出现了如下几个错误: 1.访问不到maven的中央仓库,插件下载失败,无法使用插件启动tomcat命令. 解决方法到 maven的配置文件中,一般在我的文档中的.m2文件中的settting.xml中 ...

  5. Java递归查找层级文件夹下特定内容的文件

    递归查找文件 引言 或许是文件太多,想找某个文件又忘记放哪了;又或者是项目改造,需要将外部调用接口进行改造,项目太多,又无法排查.那么怎么快速找到自己想要的内容就是一件值得思考的事情了. 根据特定内容 ...

  6. Hive之权限控制

    Hive之权限 一.库级的权限 -- 授予所有权限给某个用户 grant all on msta to user {userName}; -- 授权admin privilege权限 grant AD ...

  7. FileNotFoundError: Could not find module libmxnet.dll

    解决方法:把CUDA的bin目录下的dll文件全部复制到libmxnet.dll所在的目录 问题原因:libmxnet.dll引用了一些CUDA的dll,但是找不到路径.

  8. 基于FPGA的SATA3.0主机控制器IP

    SATA3.0 Host Controller IP SATA3.0 Host IP不仅实现了SATA协议的PHY(物理层).Link(链路层)和TRN(传输层),并且实现了CMD(命令层)和APP( ...

  9. 死磕Java面试系列:深拷贝与浅拷贝的实现原理

    深拷贝与浅拷贝的问题,也是面试中的常客.虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝.其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入 ...

  10. 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换

    有时候,为了给前端页面输出内容,有时候我们需要准备和数据库不一样的实体信息,因为数据库可能记录的是一些引用的ID或者特殊字符,那么我们为了避免前端单独的进行转义处理,我们可以在后端进行统一的格式化后再 ...