【科普】Scrum——从橄榄球争球到敏捷开发
对敏捷开发Scrum稍有了解的都知道Scrum来源于橄榄球,但你知道为何要以这项球类运动的术语来命名这个敏捷开发方法论吗?
Scrum与橄榄球对应关系
Scrum 一词源于英式橄榄球运动,是指双方球员对阵争球。双方前锋肩靠肩站成一横排,面对面躬身,肩膀互相抵在一起,形成一个通道。犯规队的球员低手将球抛入通道,此时通道两边的球员们互相抗挤,争取踢球给本方前锋。
比赛分为两支队伍,每个队伍上场的球员为11名。整个队伍中的球员分为进攻、防守和特别三种职能,三者各有优势又互相配合。进攻队员身手敏捷,凭借速度变化和身形穿透对方防线;防守队员身形强壮,阻挡对方球员的进攻;特别队员较为灵活,进可攻退可守,随时可充当前面二者的替补。
与橄榄球比赛对应,在Scrum组织中没有传统组织所强调的岗位、上下级关系、汇报等元素,每个人只有“一起赢得比赛”的目标,而且每个人的工作会有较大的重合覆盖度,角色可因势而变,提高效率的同时,有效避免传统组织可能存在的推诿和不作为。
英式橄榄球比赛中,球是被禁止向前传的:规则并不限制球员将球往前踢,但当踢球员踢球时,他的队友必须在球的后方。那么为了让球有方向地运动起来,球员必须将球往后传。如此显而易见的矛盾凸显了团队合作的重要性,同时创造了绝佳的纪律,因为这不是光靠一名球员就能成功胜利的比赛。球员们必须团队合作,才能带球向前冲过敌队的阵线,赢得最后的胜利。
在Scrum的工作方式下,团队化繁为简,只有三个角色,分别是产品负责人(PO)、Scrum
Master和开发团队。Scrum中的产品负责人,就像橄榄球队的四分卫,对产品的方向负责,对产品的Why和What负责。Scrum
Master,是一个团队的教练,关注人和人的互动质量,并减少外部干扰对团队工作影响。Scrum中的团队成员就是一支橄榄球队,大家共享时空、闭环决策。
此外,橄榄球赛还有一些特殊规则:与美式橄榄球不同,英式橄榄球无需佩戴护具,这使得比赛随时可以开展并更容易推广普及;比赛时间较短,上下场各7分钟;对不持球的球员不可以冲撞和阻挡;有意外或所谓的暴行时,裁判会判犯规,中断比赛来进行Scrum。
读到这里是不是若有所思?没错,Scrum开发模式并不只是简单地借用了英式橄榄球的术语,许多精神也与之一脉相承,二者的许多元素都可一一对应。
Scrum“出道”历程
Scrum的乘风破浪开发产品与橄榄球披荆斩棘赢得比赛有着一脉相承的精神与灵魂,橄榄球是深受全世界球员喜爱的运动,那么Scrum是如何借势乘风破浪“C位出道”成为目前软件开发主流模式的呢?
1986年,竹内弘高和野中郁次郎在《哈佛商业评论》上发表《新新产品开发游戏》的文章,首次提出将Scrum应用于产品开发,文章指出传统的接力式开发模式已不能满足日益激烈的市场竞争,开发模式需转向团队整体前进的橄榄球式。
1993年,进入Easel公司后,Scrum的创始人Jeff
Sutherland借鉴日本精益理念和《新新产品开发游戏》中的知识管理策略,在效率底下的部门中使用了新方法及工具,此时的实践就成了之后系统性Scrum中的各种元素。Jeff
Sutherland拥有空军飞行员经历带来的观察、导向、决定、行动四大要素,攻读生物统计学博士学位时又吸收了生物学生物组织系统和进化论适者生存的理念,在实践中取其精华,形成Scrum的定义。
1995年,Jeff Sutherland和另一位创始人Ken Schwaber规范化Scrum框架,并在OOPSLA 95上公开发布。
2001年,敏捷宣言及原则发布、敏捷联盟成立,Scrum是其中一种敏捷方法。Ken Schwaber和Mike Beedle推出第一本Scrum书籍《Scrum敏捷软件开发》。
2002年,Ken Schwaber 和Mike Cohn共同创办了Scrum联盟。
至今,根据《2020敏捷状态调查报告》,总共有76%的组织采用Scrum,Scrum已成为当之无愧的“C位”开发模式。
最新文章
- Gulp-前端进阶A-1
- H5图片裁剪升级版(手机版)
- js 自带的 sort() 方法
- Android——不同activity之间数据传递
- c++常用的一些库函数、常量和头文件
- 自定义View 实现软键盘实现搜索
- 关于C#中的DateTime类型的技巧
- linux tar使用
- 2.9. Scalar Properties for Primitive Data Types 选项(Core Data 应用程序实践指南)
- BZOJ-2463
- CAN总线基础知识(三)
- BZOJ 2243 染色
- 简述我理解的C#
- 深度学习原理与框架- tf.nn.conv2d_transpose(反卷积操作) tf.nn.conv2d_transpose(进行反卷积操作) 对于stride的理解存在问题?
- Python selenium webdriver设置加载页面超时
- Arcgis Server Manager发布ArcGISTiledMapServiceLayer服务
- Node负载能力测试
- Python 3 学习笔记之——错误和异常
- Django【进阶】信号
- JDK版本更改,修改环境变量不生效解决办法
热门文章
- Java实现 洛谷 导弹拦截
- Java实现 蓝桥杯 算法训练 排序
- Java实现 LeetCode 299 猜数字游戏
- Java实现 蓝桥杯VIP 算法提高 最长公共子序列
- Java实现 LeetCode 98 验证二叉搜索树
- TZOJ 1214: 数据结构练习题――线性表操作
- 【原创】Linux中断子系统(二)-通用框架处理
- 温故知新-java虚拟机
- Cypress系列(0)- 如何学习 Cypress
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Api (3) - Stream的终端操作