软件开发中估算的困境和思考

组织和个人花了无数精力进行各种估算,结果往往不尽如人意,产出和付出难成比例。为什么?

估算是什么?

单独看估算这个词,其实意义不大,他只是一个动作,并不完整。完整的说,应该是,某人来给某物(某事)估计出某种度量指标。比如,我给这件古董估计一个价格,分析师给明天的大盘估计一个点数。回到软件行业,系统工程师给这个feature估计出Man hour的数值,PO或者团队给这个user story估计一个点数。

这里看到了估算的几个要素:

评估者

评估对象

评估单位,用什么尺子

评估约束条件,比如时间,谁来做这件事情,谁来买这个东西等等。

这些因素都影响着估算的结果。

既然估算是一个估计的活动,那么它还有其它相关因素

估算的方法

估算的工具

估算活动本身的成本

估算所需要的时间

估算的精度

估算的假设

估算的有效性(时效性,条件性等)

我们为什么要估算?

我们进行估算主要是为了帮助我们进行决策,指导我们的活动和行为。比如估计股市的趋势,进行操作,估计商品的价值进行买卖,估计市场的变化做好准备。

那么我们在软件开发活动中进行估算的目的是什么呢?

计算成本,估值报价

计算人工,安排人手

做项目计划,预计交付时间

项目、feature的横向评比

现实中估算的实际情况

现实中,估算活动的一些特点

估算是一项非常有挑战性的任务,尤其是对于人类而言

越是难以准确估算的领域,越是具有巨大的估算效益

估算是一项价值很高的大能力,精通的人很少

受不同估算因素的影响,估算的结果差异很大。不同的估算者,方法的不同,假设条件的不同等等

准确的估算只能产生于,局部,小范围,简单的环境下,短期内等,尽管估算相对准确,然而这样的估算对象往往难以产生较大的价值,它们往往被更多的不确定性所包围。比如汽车厂可以精确的估计汽车的生产速度,原材料的成本,可是很难去估算库存等成本,也就难以准确的估算汽车真正的厂家成本。

很多估算活动本身是费时、费力、费钱的

讽刺的是,很多估算活动本身成为了估算不准确的原因,比如长时间的估算过程,导致很多要素发生了显著变化

对于估算活动进行大量的投入,并不能带来相应的回报。估算的准确度不能成比例的提高,甚至会降低。然后由于准确的估算可以带来巨大的价值,很多组织无法忍受无所作为,依然投入不菲去加强估算活动。

走出估算的困境

估算为什么这么困难?原因很简单,估算的复杂度超出了估算的能力。解决的方法也是从两方面着手

提高估算能力

降低估算对象的复杂度

或者两者结合

如何提高估算能力,如何降低估算复杂度,必须从组织的实际情况,业务的实际情况出发来思考。没有包治百病、一吃就灵的灵丹妙药,必须认真思考。

敏捷实践中估算新思路

敏捷中很多实践就是从这两个方面入手的。

提高估算能力:

提高估算能力的核心是提高业务能力,对业务有着更深刻的理解。不深入钻研业务而希望估算能力有实质性的提高,是在希望一根魔术棒。如果有这么一根魔术棒的话,它也一定是价值不菲的。

计划会议,以往很多估算往往是少数专家进行估算,他们在必要的时候征求团队的意见。现在的做法是要求团队集体进行估算,在估算的时候,PO, 团队,团队内部的专家全部都在,而且可以采用planning poke的方式充分的收集团队意见。在现有人员基础上,增强了估算的能力,提供了更多的估算信息。

在SAFe (scaled Agile Framework) 模型中,大规模团队也要求所有scrum 团队一起,进行全员的计划会议,在大规模项目中聚集了更多的估算能力。

从发展的角度看,所有的员工都参与到了估算的活动中,随着短周期迭代,估算的经验不断丰富,每个员工的估算能力都得到提高,进而整个组织的估算能力也得到提高

有效的高频率反思会可以可以不断提高估算的能力

从精益和丰田生产方式来观察,通过价值流分析,安灯,看板,消除浪费等一系列的工具去暴露问题、发现问题,每当发现一个新问题的时候,就意味着对业务的理解又加深一些,当解决这些问题的时候,又意味着进一步的提高。当竞争对手还在用库存在解决问题的时候,丰田已经对形成库存的各种原因进行了细致而深入的理解。因此,丰田可以对各个生产、流通、物流环节有着更为精确的评估和预计。

降低估算对象的复杂度:

降低估算的复杂度主要从两个方面入手,一是改变业务方式,降低业务对估算的要求,二是分而治之,减小评估对象的规模、进而降低复杂度。

从估算目的上讲,敏捷弱化了估算目的2)计算人工,安排人手和3)预计交付时间,强化了估算目的4)横向比较,确定feature优先级,PO在管理backlog的时候,通过ROI来对待办事项进行排序,估算是为ROI排序服务的。基于这个目的,对于估算精确的要求大大降低了。估算侧重中相对排序,而不是绝对价值。五个指头比长短,要比五个指头量长度要容易很多。

从估算对象上,限定到可以在一个短周期的scrum迭代中完成的user story上,相比一个feature,或者项目,估算的规模要小很多。

把user story这个粒度上,它的技术复杂度也降低了,一个scrum 团队具备所有的相关知识和技能,评估者的能力和评估对象复杂度的鸿沟给弥补了。

评估的周期也在几周之内,而且估算之后马上执行,减少了不连续带来的变化和不确定性。

估算和执行也是由同一个团队完成,也消除了替他人进行评估的复杂度和不准确性。

敏捷实践中估算的问题

良好的实践可以带来估算新思路的收益,然而现实中还是遇到种种问题。

热衷于形式化的工具,比如planning poke, 不花心思去钻研业务,工具只成为了形式和热闹,没有切实提高业务能力和估算能力

专家和PO,或者其它架构师、系统工程师游离于团队之外,依然控制着估算过程,本质上估算的主体和方式没有发生太多变化

估算目的依然是安排人手、 报价、预计交付时间等,依然要求对于项目和feature级别在早期进行较为准确的估算,要求觉得人工、资金等成本估算。

PO对于product backlog的管理,徒有形式

User story不是独立的用户价值

Scrum 团队无法独立完成user story, 团队间依赖关系很强。

因为这些原因,团队的估算能力没有提高,估算对象的复杂度也没有减低,所以估算的困境并没有得到改善。因为估算要求未发生改变,新的估算方式(尤其是相对估算)不能完全满足估算要求,老的估算的方式依然以某种形式存在,反而增加整个组织的负担

相对估算和绝对估算

严格意义上讲,没有绝对估算,所有的估算都是相对的。是评估者,评估对象,评估单位(尺子),约束条件下的产物而已。只看尺子,是有失偏颇的。从尺子看,也没有绝对的尺子,黄金、美元、人民币这些都是绝对的么?换一把尺子,就会有不同的结论。

先来看看软件领域内所谓的绝对估算吧,man hours, 或者 man days, person months, 这人月真的就成了一个神话,离了他很多人都心中不安。

man day 中的这个man是谁呢?评估者自己,或者评估者心中的平均水平的那个抽象的人,或者是评估者预计到的那个工作者(或者工作团队)的抽象的劳动力,或者其它心中构思出来的man。换一个评估者,那个man又不一样了。这个man day绝对么?

Man day不是一个绝对的评估值,她是一个人人都可以理解的评估值。然而,虽然人人都可以理解,但是每个人看到这个评估值的时候,心中理解的真实工作量都会是不一样的,也会根据评估者的背景和自己的背景再来折算、评估一下。

除了容易理解,man day还有一个优点,管理者可以利用人月神话去计算各种需要的数据了。可以计算成本,可以计算交付周期,还可以用人手去换取时间,用时间去换取人手。有了man day, 一切都可以管理了。有了意外怎么办?有风险管理,危机管理,还可以有lesson learn去反思为啥估算不准确,找几个改进点,下次继续改善。从管理上看,已经自我完备了,各种情况都可以得到处理。

再来看相对估算,相对估算的单位是点 (point), 它的尺子是某个功能或者user story (用户故事),这尺子和man day有所不同,它是一个客观的任务,不是人的工作量,这是这把尺子的优点。估算就是用这把尺子和估算对象进行比较。我们类比一下用货币去衡量商品的价值,我们可以用黄金、美元、人民币,这些货币的尺子是大家用了很多年的,广为理解和熟悉的,而且所有的人都在用这几把尺子。

很不幸的是,在开发中,相对估算没有黄金这样的尺子。这把尺子很不固定,一个scrum 团队在不同的迭代中都有可能用不同的尺子,不同的scrum 团队也会用到不同的尺子,不同的产品线也会用的不同的尺子。这把尺子本身时间上不具备稳定性,空间上不具备通用性。所以这样的尺子就很难被大家理解。

当用这样的尺子去计算成本,交付周期,安排人手的时候,就会遇到很大麻烦。在现实中,需要在某个环节进行一些复杂的计算和转换。

对于相对估算来说,需要有几个问题要考虑:

划定相对估算的作用范围,时间范围和空间范围,一个团队,几个团队,一个产品?若干迭代, 一个release, 一年?

在各个独立的作用域里,选择合适的尺子,保持尺子的稳定性和通用性,使大家容易理解

有了稳定和通用的尺子,计算出来的velocity就有了实用价值。可以用点数,结合velocity, 计算、评估进度,工作量,具体的 man days (这不是抽象的man, 是那个具体工作的man, 这不是评估的man day, 是根据经验趋势计算出来的 man days, 因此也是更加准确的 man days), 也可以预计成本和交付时间

User story的质量是找到这把尺子的关键,如果没有良好的product backlog, 没有高质量 (INVEST) 的用户故事,是很难找到这把尺子的。

寻找一把合适尺子是相对估算的计算,没有这把尺子,相对估算的各种方法和技术只能是水中月、鏡中花,看起来很美,带给人的却是困惑、忧愁,抱着美好的愿望,花费了很多心力,到头来却是竹篮打水一场空。

建议

要想用好相对估算,需要打好基础,这基础打好了,即便不用相对估算,团队也能收益。

管理好product backlog

提高用户故事的质量

提高scrum 团队的独立工作能力,尽量解耦各个团队。

寻找一把好的尺子做相对估算。

结合相对估算和velocity,给管理团队提供各种数据。


2015-08-11 广州

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • Scrum指南的目的 Scrum是用于开发和持续支持复杂产品的一个框架。本指南包含了Scrum的定义,其中包 括S...
    iceinto阅读 2,323评论 0 10
  • 1.敏捷Scrum如何开始? 为了成功实施Scrum,团队必须坚持Scrum的基本要素。 团队必须理解Scrum的...
    颜小婧阅读 3,612评论 3 13
  • 首先,大力水手,它是一部动画片(在我的世界里,日本的会动的图画就叫动漫,其余一概为动画片…)的名字;然后,它是我今...
    i9gg阅读 369评论 0 1
  • 读萧红传的时候,因为是别人写的传记,带有强烈的非本人的主观色彩。所以看起来的时候总有些生疏,那些评论和煽情的部分...
    痞姑娘阅读 350评论 0 9
  • 概述 Metrics is a Java library which gives you unparalleled...
    FX_SKY阅读 4,906评论 0 0