迭代的难题:敏捷团队每次都有未完成的工作,如何破解?
各位是否遇到过类似的情况:每次迭代结束后,团队都有未完成的任务,很少有完成迭代全部的工作,相反,总是将上期未完成的任务重新挪到本期计划会中,重新规划。敏捷的核心之一是“快速迭代,及时反馈”,为什么会发生这种情况呢?
这也是本篇文章想和大家聊的,为什么团队的每次迭代都有未完成的工作,以及我们可以如何改善?
团队承诺不足
在项目过程中,我们有时会遇到这样的场景:老板为了让团队更好地更快地完成项目,有时会采取一些方法,比如告诉团队: 如果不能完成所有工作,他会“采取纠正措施,必要时甚至会解雇”。
这种来自领导的高期望会带来什么结果呢?那就是这个团队不会在迭代过程中 积极地完成大量工作。相反,他们会尽量选择足够多的工作,来避免因为“偷懒”而惹上麻烦,但也不会冒着无法完成全部工作的风险,而选择过多的工作。
团队的谨慎和保守,会让团队陷入“舒适区”,从而降低工作效率,影响整个项目的进度。
敏捷开发不仅注重结果,同时也注重过程。而过于严厉的领导可能也会让团队成员感到压力过大,进而过于关注工作完成情况,进一步限制了他们的主观能动性和自我驱动性。
团队过度承诺
团队对迭代/冲刺中可以完成的工作,设定高一点的目标,是正常的,因为这能激发团队积极性和动力, 但如果团队习惯性地过度承诺,就会变成问题。
当团队过度承诺时,就会一直无法完成迭代中的事情:迭代时间到了,成员就把任务推进到下一个迭代,最终导致项目的延期。时间久了,团队还可能形成一种“总有机会弥补”的心态,导致对每一个迭代的责任心减弱,团队也无法明白敏捷的意义和作用是什么。慢慢地,迭代的开始或者结束就变成了一个随意且没有意义的日期。
所以团队负责人应该让团队明白迭代结束的意义:当迭代结束时,团队会体验到成就感,让团队感受到这种“小胜利的力量”,从而保持更好的节奏和状态迎接下一个迭代。
敏捷团队过度承诺的两个原因
团队过度承诺的最常见原因之一是来自 领导层或团队外部的压力。压力也分好坏,新产品给公司带来的新机会,也能为客户和公司带来更多好处。为了更快的给公司、客户带来好处,他们会采用施加一些压力的方式,激励团队,以便能更快更好地完成任务。但有时, 有些领导的压力并不合适,就像开头提到采用裁员的方式威胁成员的领导那样,不仅不会正向激励成员,反而带来更不好的效果。
团队过度承诺的第二大常见原因是 自身的压力。比如对自我的高要求,满足自己的高期望,或者希望取悦外人,得到别人的认可。
无论过度承诺的压力是来自外部还是团队内部,这对团队来说都不是一个健康的环境,对组织来说也不是一个好的情况。

组织需要可预测性
所有组织都需要一定程度的可预测性,但如果过于追求预期目标的完成,可能反而失去掌控,比如团队设定太高的冲刺目标,反而会因达不到目标而导致失去了工作计划的可控性,降低了可预测性。
因此,团队应该合理规划工作计划,既要设定目标,也要考虑实际操作性。当团队偶尔出现失误时,领导者和团队外的人需要表示理解,这样才能保持工作的可预测性。
三个改善方法
这里分享3个可以帮助改善经常无法实现冲刺目标的团队的方法。
1. 要有适当的目标
什么是适当的目标?根据经验,一个团队适当的目标是 在大约 80% 的时间内完成他们计划完成的所有工作。这不是说在每个迭代完成计划工作的 80%,而是指在 10 次迭代中的 8 次迭代是 100% 完成了所有计划。
不过对于那些迭代节奏容易被频繁打乱的团队来说,每次都成功完成所有工作是不可能的。尤其是那些需要快速响应问题的团队,就可能需要降低目标比例。
2. Sprint 承诺是目标,而不是保证
首先,让团队每个人都明白,冲刺承诺是目标,而不是保证。
承诺是 团队承诺尽最大努力实现目标。如果团队被迫做出保证,他们会少保证一点,以确保“保证”安全。
保证是 有期限的,表示确定性和责任。有时客户确实需要在某个日期之前提供某些功能,这时团队就需要作出保证:一定会在某个日期前完成。
由于承诺和保证的细微差别,作为团队负责人,还需要说服领导,以此让他们在后续的迭代进度中,给予支持和理解。可以尝试将承诺/保证的差异放到领导者可以理解的例子中,帮助他们更好地理解二者的区别,更助于团队执行。例如,可以尝试让他们想象一下,如果询问销售团队他们会承诺销售额达到多少。然后想象一下询问销售团队是否会保证这个金额,或者是其他金额。
3. 找出过度承诺根本原因
除了上面提到的过度承诺的两个原因,还有其他原因。比如有时候无法达成目标,可能是团队对“完成”的预期过于乐观。那么在冲刺计划会议中可以尝试问这样的问题:
- 在迭代中,有哪些情况可能出错并导致无法实现目标?
- 为了实现这个目标,需要做哪些准备?
通过这样类似问题,来帮助团队了解他们计划会中任务的难易程度,以及为了达成任务而预设的所有假设。
最后,我想说的是,虽然衡量敏捷团队的一个常见标准是团队成员是否完成了迭代中的所有工作,但这并 不意味着我们应该期望团队每次都能完成所有的任务。这不现实。即便是一个优秀的团队,可能也不会每次迭代都能实现目标。就像最厉害的篮球运动员也不是每次都能投进的。重要的是让团队明白并记住: 完成目标是承诺,而非保证。
相关文章:
迭代的难题:敏捷团队每次都有未完成的工作,如何破解?
各位是否遇到过类似的情况:每次迭代结束后,团队都有未完成的任务,很少有完成迭代全部的工作,相反,总是将上期未完成的任务重新挪到本期计划会中,重新规划。敏捷的核心之一是“快速迭代,及时反馈…...
ChatGPT未来可能应用于iPhone?
苹果接即将与OpenAI达成协议 ChatGPT未来应用于iPhone 前言 就在5月11日,苹果公司正与OpenAI进行深入讨论,计划在其最新的iOS操作系统中整合OpenAI的先进技术。这一举措是苹果公司在为其产品线融入更先进的人工智能功能所做努力的一部分。 目前情况双方…...
Spring之bean的细节(创建方式、作用范围、生命周期)
在Spring框架中,Bean是一个非常重要的概念,它代表了应用程序中需要被管理的对象。关于Bean的细节,我们可以从创建方式、作用范围以及生命周期三个方面进行阐述。 创建方式 Spring支持以下三种方式创建Bean: 调用构造器创建Bean…...
探索STLport:C++标准模板库的开源实现
在C++编程的世界里,STL(标准模板库)是一个不可或缺的工具。它提供了许多用于数据结构、算法和其他重要功能的模板类和函数。然而,标准模板库的实现并非只有一种,而其中一个备受推崇的选择就是STLport。 官方下载: STLport: Welcome! STLport是什么? STLport是一个开…...
计算机Java项目|Springboot高校心理教育辅导设计与实现
作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…...
数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍
文章目录 前言一、什么是数据结构二、什么是算法三、算法复杂度1. 时间复杂度① 时间复杂度的定义② 大O的渐进表示法 总结 前言 数据结构简单介绍、算法简单介绍、算法复杂度、时间复杂度等的介绍 一、什么是数据结构 数据结构是计算机存储,组织数据结构的方式&…...
Google I/O 2024:有关AI的一切已公布|TodayAI
2024年谷歌I/O大会圆满落幕,谷歌在会上发布了一系列更新,涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型,并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中,展…...
【Shell脚本】Shell编程之数组
目录 一.数组 1.基本概念 2.定义数组的方法 2.1.方法一 2.2.方法二 2.3.方法三 2.4.方法四 2.5.查看数组长度 2.6.查看数组元素下标 3.数组分片 4.数组字符替换 4.1.临时替换 4.2.永久替换 5.数组删除 5.1.删除某个下标 5.2.删除整组 6.数组遍历和重新定义 7…...
Python 全栈系列246 任务调度对象WFlaskAPS
说明 之前已经完全跑通了任务调度,实现了S2S的流转Python 全栈系列243 S2S flask_celery。由于request请求用起来比较别扭,所以创建一个对象来进行便捷操作。 内容 1 功能 WFlaskAPS包含管理定时任务的必要功能 from datetime import datetime from…...
关于Windows中的NTUSER.DAT文件的知识,看这篇文章就差不多了
每个用户配置文件中都隐藏着一个名为NTUSER.DAT的文件。此文件包含每个用户的设置和首选项,因此你不应该删除它,也可能不应该编辑它。Windows会自动为你加载、更改和保存该文件。 NTUSER.DAT包含你的用户配置文件设置 每次更改Windows和已安装程序的外观和行为时,无论是桌…...
【Linux】动态库与静态库的底层比较
送给大家一句话: 人生最遗憾的,莫过于,轻易地放弃了不该放弃的,固执地坚持了不该坚持的。 – 柏拉图 (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) 底层比较 1 前言2 编译使用比较2 如何加载Than…...
私活更好用:SpringBoot开源项目!!【送源码】
今天分享一款非常香的SpringBoot大屏开源项目,非常适合接私活用。 这是一款基于SpringBoot代码生成器的快速开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design。强…...
SprintBoot案例-增删改查
黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类3.1 引入myb…...
【机器学习】:基于决策树与随机森林对数据分类
机器学习实验报告:决策树与随机森林数据分类 实验背景与目的 在机器学习领域,决策树和随机森林是两种常用的分类算法。决策树以其直观的树形结构和易于理解的特点被广泛应用于分类问题。随机森林则是一种集成学习算法,通过构建多个决策树并…...
.NET 4.8和.NET 8.0的区别和联系、以及查看本地计算机的.NET版本
文章目录 .NET 4.8和.NET 8.0的区别查看本地计算机的.NET版本 .NET 4.8和.NET 8.0的区别 .NET 8.0 和 .NET 4.8 之间的区别主要体现在它们的发展背景、目标平台、架构设计和功能特性上。下面是它们之间的一些主要区别: 发展背景: .NET 4.8 是.NET Fram…...
23.HashMap的put方法流程
一、put方法的流程图 二、put方法的执行步骤 首先,根据key值计算哈希值。然后判断table数组是否为空或者数组长度是否为0,是的话则要扩容,resize()。接着,根据哈希值计算数组下标。如果这个下标位置为空&a…...
元类结合__new__
__new__:用来生成骨架 __init__:骨架添加血肉 【一】类中的__new__ class MyClass(object):def __init__(self,name,age):print(f"给当前MyClass类的对象初始化属性的时候会触发__init__")self.name nameself.age age def __call__(self,*args,**kwargs):pri…...
(C语言)队列实现与用队列实现栈
目录 1.队列 1.1队列的概念及结构 1.2 队列的实际应用联想 1.3队列的实现 2. 队列应用——队列实现栈 主要思路 1.队列 1.1队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进…...
字符画生成网站 ascii字符画
_____ / ___/__ ___ / /__/ _ \/ _ \ \___/ .__/ .__//_/ /_/ font推荐:1.Slant 2.Small 3.Small slant https://patorjk.com/software/taag/#pdisplay&fSmall%20Slant&tCpp https://www.kammerl.de/ascii/AsciiSignature.php https://asciia…...
【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类
标题:【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类 水墨不写bug (图片来源于网络) 目录 (一)静态成员 (二)友元 (三)…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
