Scrum之 术语和流程

前面我和大家分享了 敏捷开发之 4句敏捷宣言  、 敏捷开发之 12条敏捷原则,敏捷原理其实不复杂,只是简单两篇文章就可以概括了。然而你可千万不要被这简单给欺骗了,以为你能顺利的实施敏捷。

在中国软件技术大会和中国软件工程大会上也专门做过一次敏捷本质的主题演讲,我用了一个模型图来表示:

上面的图是我建的一个敏捷相关模型,模型看似简单,就几个文字和图形,但一般简化的背后其实都是有复杂的东西作为背景的,看似简单却不容易。

而我们怎么去理解这些简单却不容易的事情呢?按照自我导向型学习的方法,我们先从流程和术语开始。

什么是Scrum?

Scrum是一个迭代性、增量性的流程,适用于任何的产品开发以及工作管理。 在每个迭代结束后,Scrum都会产生一套可以交付的功能性产品。(来源:Scrum Alliance Scrum联盟)

Scrum的特点

  • Scrum是一个敏捷的流程,可用于管理和控制研发工作。
  • Scrum是现有设计流程的总结。
  • Scrum以团队为基础,是一种在要求迅速变化情况下迭代地、增量地开发系统和产品的方法。
  • Scrum是一个控制由利益和需求冲突导致的混乱的流程。
  • Scrum是改善交流并最优化合作的方式。
  • Scrum是一种检测产品开发和生产过程中障碍并将其去除的方式。
  • Scrum是最大化生产率的一种方法。
  • Scrum适用于单一的项目到整个组织。Scrum可以控制并组织多件具有相关性的产品开发以及拥有超过千名开发者和执行者的项目实施过程。
  • Scrum能让每个参与者都对自己的工作以及自己做出的贡献感到满意,并让他们感觉自己的工作已经达到最佳的水平。

Scrum人员角色

任何人力流程都离不开人来执行,所以在讲解Scrum流程之前,有必要先把Scrum中的角色讲一下。

一天,一头猪和一只鸡在路上散步,鸡看了一下猪说,“嗨,我们合伙开一家餐馆怎么样?”,猪回头看了一下鸡说,“好主意,那你准备给餐馆起什么名字呢?”,鸡想了想说“餐馆名字叫火腿和鸡蛋怎么样?”,“我不这么认为”,猪说, “我全身投入,而你只是参与而已”

全身投入项目和Scrum过程的人,有三种角色:

  1. 产品负责人(Product Owner),负责业务概念与想法(例如backlog)
  2. ScrumMaster,负责领导Team执行与质量,关注于及时完成Sprint
  3. 团队(Team)
角色 职责
ProductOwner
  • 确定产品的功能
  • 决定发布的日期和发布内容
  • 为产品的profitability of the product (ROI)负责
  • 根据市场价值确定功能优先级
  • 在30天内调整功能和调整功能优先级
  • 接受或拒绝接受开发团队的工作成果
ScrumMaster Scrum官方网站把ScrumMaster的职责定义为:
ScrumMaster负责在团队中正确、完整地贯彻Scrum流程。虽然在实施开始的时候必须做一些折衷,而且因为实施环境的限制不得不放弃某些实践,但是ScrumMaster在脑海中始终要铭记实施完整的Scrum所带来的好处和价值,渐进地推动团队和组织走向完美状态。ScrumMaster特别要对以下工作负责:

  • 清除挡在客户和开发工作之间的拦路虎,客户从而可以直接驱动开发。
  • 教导客户如何最大化ROI,以及通过Scrum实现他们的目标。
  • 通过激发创造性与推动授权来提升开发团队的成员
  • 以任何可能的方式提升开发团队的开发效率
  • 改进工程实践和工具,使得每次功能性上的改进都能得以交付
Scrum Team
  • 具有不同特长的团队成员,人数控制在7个左右
  • 确定Sprint目标和具体说明的工作成果
  • 在项目向导范围内有权利做任何事情已确保达到Sprint的目标
  • 高度的自我管理能力
  • 向Product Owner演示产品功能

Decomposing Agile 中也对职责进行了介绍:

Product Owner
Set Vision Define a high level vision of the goal of the product and how it will be met.
Define Product Roadmap Articulate the big blocks of Features and Customer Value that will be delivered to achieve the product vision.
Define Requirements Generate a description of the features and stories that will be fulfilled to execute on the product roadmap.
Maintain Backlog Order the features and stories. Elaborate on enough stories to meet the near term needs of the team.
Achieve Customer Acceptance Get the customer to look at the product and provide feedback. Sometimes this feedback is acceptance and sometimes it is more input for the backlog.
Engage Stakeholders Keep everyone involved in the product fulfilling their obligation to the team and informed about expectations and status.
Planning Decide on a delivery date. Keep track of the burn down charts. Provide information to management for decisions.
Coordinate External Resources Get anything the team needs from outside.
Financial Management Produce any financial reporting that is needed to responsibly manage the product.
Manage Suppliers Make sure any third party suppliers are clear on their goals and are providing what is needed by the team.

 

Scrum Master
Ensure Process Adherence Facilitate agreement on how work will be performed. Then make sure the team does what it agreed.
Identify & Remove Impediments Identify any impediments to the team’s productivity and remove them.
Ensure Internal Communication Make sure the team is having the right conversations to ensure productivity
Maintain Work Environment Keep the team free from external interruptions. Protect the teams from disruptions in work. Address Conflicts. Make sure the team doesn’t work excessive overtime.
Develop Team Make sure the right people are on the team. Promote cross training and skill development among team members.

 

Team
Coordinate Work Work together to coordinate who will do what work. Swarm on work to ensure everything is completed according to the teams agreed up cadence.
Maintain Architecture Agree on how the product will be structured.
Understand Requirements This is where the requirements/stories are explained to the team. The Team has responsibility to understand what the customer is asking for.
Maintain Code Quality Through patterns , code standards, continuous integration, effective branching, and configuration management.
Design and Engineer Solution Actually deciding how to write the code and writing the code.  This includes unit tests/automated testing.
Production and Support Moving the code into production.

 

Everybody
Learn from Outside Sources Understand how other people are solving the problems you face. Learn from multiple bodies of knowledge. Bring in knowledge from the outside to apply to your team.
Commit to Agility I don’t know if this is a capability. There is some action that results in intentionally deciding to be agile. As the multiple decisions are made in the course of performing the effort, your team might need to remember to recommit to Agile.
Manage Risks Agile in and of itself is an approach to risk management. Through small bets, constant feedback, early learning, and shared insight the team stays focused on threats to the delivery of value. There are numerous other risks and it is important to everyone to scan the environment and help manage the risks.
Train for Job This is similar to Learn from Outside Sources but it involves developing personal mastery of different skills required by the
team.

 

在知道Scrum的主要角色后,我们看看下图中的过程图:它由Product backlog开始,经过sprint会议从Prdouct backlog挑选出一些优先级最高的故事(story)形成迭代的sprint backlog(一个sprint一般为1个月)。在sprint中会进行每日站会,迭代结束时会进行演示和回顾会议。

第一次听到以上术语的可能不能很好的理解backlog和spring之类的东西,大家不用着急,以后会慢慢对每一个过程进行仔细讲解。

以下将对一些术语进行简单介绍,以便大家现在开始逐步了解Scrum。

Backlog

Product Backlog

在项目开始的时候,Product Owner要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog,一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。Scrum team会根据这个来做工作量的估计。Product backlog应该涵盖所有用来构建满足客户需要的产品特性,包括技术上的需求。高优先级的一些产品特性需要足够的细化以便于我们做工作量估计和做测试。对于那些以后将要实现的特性可以不够详细。

在下一篇我将着重讲解如何制定Product Backlog,怎么写故事,如何拆分和合并故事,以及如何确定优先级和进行估算。

Sprint Backlog

Sprint Backlog 是Sprint规划会上产出的一个工作成果. Sprint英文指短距离疾跑,就是说集合精力在短时间内(一个迭代)完成一些价值。当Scrum team选择并承诺了Product backlog中要递交的一些高优先级的产品功能点后,这些功能点就会被细化成为Sprint Backlog:一个完成Product Backlog功能点的必需的任务列表.这些点会被细化为更小的任务,工作量小于2天。Sprint backlog完成后,Scrum team会根据它重新估计工作量,如果这些工作量和原始估计的工作量有较大差异,Scrum team和Product Owner 协商,调整合理得工作量到Sprint中,以确保Sprint的成功实施。

会议

Sprint Planning Meeting(Sprint规划会)

根据Product Owner制定的产品或项目计划在Sprint的开始时做准备工作。Product Owner可以是客户或者客户代表或代理。对于产品型的公司,客户就是市场,Product Owner扮演市场代理的角色。一个Product Owner需要一个确定产品最终目标的远景,规划出今后一段时间产品发展的路线图,以及根据对投资回报的贡献确定的产品特性。他要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog,一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。

当为一个Sprint定义好足够多的Product Backlog,并且排列好优先级后Scrum就可以开始了,Sprint规划会是用来细化当前迭代的开发计划的。规划会开始的时候,Product Owner会和Scrum team一起评审版本,路线图,发布计划,及Product Backlog。Scrum Team会评审Product Backlog中功能点的时间估计并确认这些估计尽可能的准确。Scrum Team会根据资源情况看有多少feature可以放在当前的Sprint中。Scrum Team按照优先级的高低来确定开发的先后是很重要的。

当Sprint backlog确定后,ScrumMaster带领Scrum Team去分解这些功能点,细化成Sprint的一个个任务. 这些任务就是细化的来实施这些功能点的活动. Sprint Planning的这个阶段需要控制在4个小时。

Daily Scrum Meeting(每日站会)

一旦计划阶段结束,30天周期的Sprint就开始了。ScrumMaster需要组织团队成员每天开站会. 这个会议是用15分钟的时间来让大家过一下scrum的状态。在会上,每个团队成员需要问3个问题:我昨天做了什么,今天做什么,遇到哪些障碍。谁都可以 参加这个会议,但只有Scrum团队成员有发言权。这个会议的目标是得到一个项目的全局观,用于发现任何新的依赖,定位项目成员的要求,实时的调整当天开 发计划.

Sprint Review Meeting(Sprint评审会)

在Sprint结束的时候召开Sprint评审会. 这个会议最多不超过4个小时.会议的前一半时间用来演示在这个Sprint中开发的产品功能给 Product Owner. Produc Owner会组织这阶段的会议并且邀请相关的利益相关者参加。 业务,市场,技术都要做相关的评审。由Product Owner来决定Product Backlog中的哪些功能已经开发完成 。会议的下半部分,是由Scrum Master和Scrum Team一起回顾当前的Sprint。团队评估大家在一起的工作方式,找出好的方式以后继续发扬,找出需要做的更好的地方,想办法提升。Sprint评审会结束后,新一轮的迭代又继续开始(中间最好修整半天或者隔个周末),迭代会一直继续,直到开发了足够多的功能去交付一个产品。

发表评论