摘要:团队用于估算时间过多,留给开发的时间会相应减少,大家工作紧张,状态不佳。团队过度承诺直接造成迭代目标不能完成,士气低落。以上弊端直接伤害敏捷团队,是敏捷团队保持稳定健康节奏的阻力。

背景

敏捷江湖桃花岛社区下线会议时,敏捷实践者问了很多关于估算的问题。作者在这里把具有共性的问题简单做了梳理。问题主要集中在团队只关心估算结果,也就是数字。再则团队经常在外界压力下过度承诺迭代目标。这两个比较集中的问题描述如下:

问题一:团队只关心数字。计划会议大家只关心估算的数字,经常花费大量时间做估算,怎么办?

问题二:团队过度承诺。有时候,团队被迫承诺过多的工作,迭代目标完不成,怎么办?

团队用于估算时间过多,留给开发的时间会相应减少,大家工作紧张,状态不佳。团队过度承诺直接造成迭代目标不能完成,士气低落。以上弊端直接伤害敏捷团队,是敏捷团队保持稳定健康节奏的阻力。

问题分析

以上两个问题也是敏捷初始团队经常遇见的问题,现简单分析发生原因如下:

问题一:团队只关心数字。

团队从瀑布开发方式转为敏捷开发后,学习了敏捷Scrum框架,然后开始使用敏捷开发。他们知道其中有一个事件是迭代计划会议。在会上团队成员经常耗费大量时间做估算。常见对话:“这个估算数字合理吗,我们要不要再好好想想清楚?”因此团队常常陷入无休止的讨论中。团队狭隘的理解为,计划会议中最重要的事情就是估算,而估算最重要的事情就是得到每个用户故事完成所需要花费的精确时间,即数字。也就是说,团队过于追求数字的准确性,忽略了估算的真正核心价值。

问题二:团队过度承诺。

团队经常在产品上市日期已经确定的情况下过度承诺。因为时间紧迫,领导施压(与资金和绩效挂钩)。比如,领导经常说:“大家加把劲儿,我相信大家的能力,努力一下,这些需求你们是可以做完的,大家的表现会影响绩效评估,年底咱们多发点资金。”所以团队常常了了估算、一言堂(架构师说的算)、猜测工作量,最后造成过度估算,经常完成不了迭代目标。

小结

“团队只关心数字”和“团队过度承诺”两个问题是敏捷初始团队经常遇见的问题。从以上问题分析中可知,团队成员并没有了解估算的真正核心意义,导致团队狭隘地理解成估算就是要最后的数字,而且在有外部压力的情况下团队也顾不上认真估算,盲目地过度承诺工作内容。

其实估算并不只是为了得到估算数字和不靠谱的承诺。我们先一起学习和了解什么是估算的核心内容,这样可以更好地理解估算,然后再针对以上2个问题进行解答。

解决措施

利用核心概念树立正确认识

在这里,我们只考虑不了解核心概念而导致估算活动不理想的情况。还有其它情况可以导致估算活动不理想。比如,不会利用故事点估算、不会估算具体方法等。这两种情况我们在后续的2篇文章中给予解答。

通过上一篇《估算第一篇:利用用户故事了解需求》相信了解了如何利用用户故事理解需求。如果对用户故事不太了解的朋友,建议可以花一点时间阅读上篇文章,也会有助于做好估算。

现在我们一起了解一下估算的4个核心概念,以便理解估算,树立正确认识,然后才能更好地解答以上2个问题。估算的4个核心概念所对应解决的问题如下表所示:

区分准确与精确

估算应该准确,但不必过分精确。比如,我们估算某产品是10888人时(是怎么做到这么精确的?)。其实这是很荒唐的,过于精确的估算纯属浪费。我们需要应该投入刚好够用的工作量,得到一个刚好的、大致正确的估值,如做估算时工作量和准确度的对比图所示:

做估算时工作量和准确度的对比图

在做估算时,有一个收益递减的点,在这个点之外,额外投入任何时间和精力都不会使估算更准确。在这个点之外,就属于浪费时间。

团队成员在做一项工作的同时,难免会遇到各种各样的问题,所以为了做到准确估算,在做估算时,任务的拆分一定要适当细,只有细化后,团队成员才清楚每项工作预计会花多少时间。当然细化也是有个度的,如前面提到的做估算时工作量和准确度的对比。当团队成员反馈超过预计工时时,需要了解是不是遇到了什么困难,需不需要帮助解决。超过16小时的任务建议需要再细化。

在做估算时,我们经常会填写预计工时和实际工时。预计工时是我们估算的结果,实际工时是对估算结果的检验。我们允许预计工时的不准确,但是一定要填写准确的实际工时,这样才有助于我们在估算不准的问题上有充分的证据做分析,然后改进,进行良性循环。随着团队成熟度的提高和对业务的越来越了解,估算准确度经过几个Sprint会有所提高。

估算相对大小

建议使用相对大小而不是绝对大小来估算PBI。比较所有条目,然后确定某个条目和其它条目的相对大小。如下图所示,讨论一个杯子相对于另一个有多大比较容易,但对于杯子中可以盛多少绝对数量的液体,我们可能没有概念。

相对大小对比图

人们更擅长对大小进行估算,而不是绝对大小。让团队成员做估算,建议用大家都擅长的技术。当然,有些较成熟的团队,也可以借鉴历史数据和经验,直接应用工时或理想人天估算也并非不可。更多关于相对大小的内容介绍,可以阅读下一篇《如何估算第三篇:估算故事点》,其中会介绍一个具体实践,即故事点估算。

团队一起估算而不是个别人估算

在估算活动中,团队成员一起估算,而不是仅仅由项目经理、架构师、主要程序员估算。简单说,是负责完成工作的所有人,也就是指实际动手设计、构建并测试PBI的开发团队来估算。产品负责人和Scrum Master这两个角色都在场,但并不实际参与估算。产品负责人负责阐述PBI,并回答团队要求澄清的有关需求的问题。Scrum Master负责帮助指导和引导估算活动。最终的目的是开发团队能够一起确定每个PBI的大小,当然包括开发和测试的所有工作量。团队成员一起估算也是为了确保工作没有遗漏,不管怎么拆分任务,甚至是不拆分任务以story为最小颗粒度,那就按照story可以上线为标准来估算。如果团队非常关注每个人手头上的task,比如测试和开发人员手头上的task,那就没有统一标准,根据具体task内容估算。 记录工作项工时,可以参考华为云DevCloud,工作项工时显示如下图所示。

需要客观估算而不是盲目承诺

估算不是承诺,重要的是我们不能这样认为。举一个例子,如果在估算的时候告诉团队成员他们的估算正确性直接影响着他们的奖金和绩效,那么每个人都会给出一个比开始大得多的估值。估算应该是较为实际的估值,应该靠谱,我们不想因为外因而人工放大估算值,变成团队成员往上加和管理层往下减的抛球游戏。

所以,团队成员在没有外因干扰情况下,大胆、放心的估算工作量,也就是估算预计工时。预计工时不仅仅是用于安排任务和估算本Sprint PBI在哪个时间点完成的,它还可以用于持续改进。预计工时就是估算需要多少时间可以完成,在Sprint进行中,会让团队成员根据实际情况去更新实际工时。例如,昨天更新4小时,今天又更新4小时,那就把实际工时更新为8小时。当Sprint结束后复盘时,我们会整体看这些预计工时和实际工时的数据,主要是为了提升团队/个人估算水平。如果估算和实际有明显差距,是需要深入分析的。本身也是期望通过估算促进做简单设计。

应用正确认知处理问题,做好估算

以上是估算的核心内容。现在我们回头看看之前的两个问题。

问题一:团队只关心数字。

面对这个问题,作者主张团队成员不要只是关心数字,还要关心投入产出比(ROI),避免浪费。另外还可以考虑采用更快、更易于理解的方式来进行估算。

从估算的核心概念“准确与精确”中了解到,在做估算时,有一个收益递减的点,在这个点之外,额外投入任何时间和精力都不会使估算更准确。在这个点之外,就属于浪费时间。另外从估算的另一个核心概念“估算相对大小”中了解到,人们更擅长对大小进行估算,而不是绝对大小。让团队成员做估算,建议用大家都擅长的技术。因此,我们在做估算时:首先,要把握一个估算的适度准确原则,不要过度浪费。其次,为了降低难度,团队更好的达成一致意见,可以采用相对大小方式进行估算。

问题二:团队过度承诺。

面对这个问题,作者主张估算由真正完成工作的成员在安全的环境下大胆、放心地估算,避免过度承诺。

从估算的核心概念“团队估算”中了解到,估算活动是负责完成工作的所有人,也就是指实际动手设计、构建并测试PBI的开发团队来完成。也就是说,真正完成工作的人才会对工作需求内容更用心,也更了解团队的速率,他们的承诺更客观。估算另一个核心概念“估算不是承诺”中提到,估算应该是较为实际的估值,应该靠谱,我们不想因为外因而人工放大估算值,变成团队成员往上加和管理层往下减的抛球游戏。团队成员在没有外因干扰情况下(不建议奖金、绩效明显挂钩),大胆、放心的估算工作量。如果能做到以上相信至少在估算的结果上更为客观和靠谱。

有些朋友可能会问,如果得到的估算结果是靠谱的,完成需求就是那么多工作量,产品上市日期也已经确认,那么怎么办?如果真的是因为产品上市日期已定,有上线压力,团队一定要承诺过多的工作内容,那么就确保团队把故事拆分得更细,即使他们交付不出设想中的高档理想的全功能版,至少也能每个典型的功能领域多少交付一些内容。说到这里,还是不建议这样做,尽量采用高价值的事情优先做原则,与客户协商,产品经理对需求排好优先级,优先实现高优先级的PBI。

了解更多

以上是针对不了解估算核心概念而导致估算活动不理想的解决措施。朋友们看到这里,相信对估算的核心有了基本了解。也许对什么是故事点估算以及具体估算方法感兴趣,欢迎阅读接下来的关于估算的另外两篇文章,即《如何估算第三篇:利用故事点做估算》和《如何估算第四篇:利用2种常见方法做估算》。

参考附录

  1. Kenneth S. Rubin. Scrum精髓[M].北京:清华大学出版社。
  2. Mark C. Layton. 敏捷项目管理[M].北京:人民邮电出版社。
  3. Rachel Davies. Liz Sedley.敏捷教练[M].北京:清华大学出版社。

点击参与评论,获取下载资料

【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题(内附下载材料)的更多相关文章

  1. 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法

    背景 在某开发团队辅导的回顾会议上,团队成员对于优化估计具体方法上达成了一致意见.询问是否有什么具体的估计方法来做估算. 问题分析 回顾意见上大家对本次Sprint的效果做回顾,其中80%的成员对于本 ...

  2. 【DevCloud·敏捷智库】如何利用用户故事了解需求

    摘要:这篇文章主要解决因为不能很好地理解需求而估算做不好的问题,在这里可以了解下如何利用用户故事了解需求. 背景 很多团队在应用敏捷开发时,对估算经常感到困惑.这里所说的估算是指产品列表条目(PBI, ...

  3. 【DevCloud · 敏捷智库】如何拆分用户故事

    提起用户故事拆分,我们听得最多的就是INVEST原则(关于INVEST原则可以参考文章“用户故事等于需求说明”——你一定没有写好用户故事),但很多人面临的问题是拿到一个较大的用户故事时,该如何拆分才能 ...

  4. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  5. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  6. 领域驱动设计(DDD)部分核心概念的个人理解(转)

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  7. lucene 核心概念及入门

    lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...

  8. Laravel 核心概念

    工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...

  9. TensorFlow.js之安装与核心概念

    TensorFlow.js是通过WebGL加速.基于浏览器的机器学习js框架.通过tensorflow.js,我们可以在浏览器中开发机器学习.运行现有的模型或者重新训练现有的模型. 一.安装     ...

  10. Laravel 的核心概念

    工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...

随机推荐

  1. 数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具

    数字时代的自我呈现:探索个人形象打造的创新工具--FaceChain深度学习模型工具 1.介绍 FaceChain是一个可以用来打造个人数字形象的深度学习模型工具.用户仅需要提供最低一张照片即可获得独 ...

  2. 【分段传输】c#使用IAsyncEnumerable实现流式分段传输

    引言 在使用SSE的时候,前端可以实现流式传输,但是有个问题就是这是一个独占的连接,相当于如果你不手动关闭连接,就会一直请求,一直连接调用接口,而且发送的数据格式也是按照定义好的协议来,而使用c#自带 ...

  3. Redis平台-整合PHP

    1.Redis的相关介绍: 定义: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...

  4. 9.26 多校联测 Day 5 总结

    虽然比赛还没打完,但是因为又罚坐了,提前把总结写出来吧() 看 T1,构造了一会发现大概就是把 b 序列放在 a 的最后面,前面位置填几个数. 先码了暴力,再码正解.但求出来的方案显然不是同一种/fn ...

  5. Java线程安全详解

    并发与多线程 blog:https://devonmusa.github.io 1 常见概念 1.1 操作系统线程运行状态 NEW RUNNABLE RUNNING BLOCKED 1.2 Java虚 ...

  6. QT(7)-初识委托

    @ 目录 1 简介 2 QT中的委托类 2.1 函数 2.1.1 关键函数 2.1.2 其他函数 3 例子 3.1 官方例子 3.2 修改官方例子 4 设想 1 简介 委托是Qt中的一种机制,用于在Q ...

  7. 美团面试:Redis 除了缓存还能做什么?可以做消息队列吗?

    这是一道面试中常见的 Redis 基础面试题,主要考察求职者对于 Redis 应用场景的了解. 即使不准备面试也建议看看,实际开发中也能够用到. 内容概览: Redis 除了做缓存,还能做什么? 分布 ...

  8. 会自动写代码的AI大模型来了!仅10秒就写出一个飞机大战游戏!

    一.写在前面 昨天分享了一款可以帮我们写代码的插件CodeGeex,其实能帮我们解决大部分问题,讲道理已经很好了对不对? but,他就是最好的插件吗? 肯定不是,这不又让我又发现了一款可以平替的插件T ...

  9. [WPF]动手写一个简单的消息对话框

    消息对话框是UI界面中不可或缺的组成部分,用于给用户一些提示,警告或者询问的窗口.在WPF中,消息对话框是系统原生(user32.dll)的MessageBox,无法通过Style或者Template ...

  10. 超详细的Mysql锁 实战分析,你想知道的都在这里~

    1.mysql回表查询 在这里提起主要是用于说明mysql数据和索引的结构,有助于理解后续加锁过程中的一些问题. mysql索引结构和表数据结构是相互独立的,根据索引查询,只能找到索引列和主键聚簇索引 ...