软件的估算,不管是整个项目的估算,还是某个具体交付任务的估算,都是世界难题。完成一个任务实际花费的时间总会超过计划花费的时间。但是作为客户、用户或业务,他们需要我们提供估算,以便确定一个项目的预算和交付时间。一方面我们面对一个项目,里面充满着巨大的不确定性,另一方面客户、用户或业务需要确定性,这对矛盾如何破解?如果这对矛盾无法破解,是否可以转移矛盾?

本场将通过实际经验分享,在估算不准确的情况下,钱少时间紧的项目如何也可以实现客户、用户或业务与 IT 的双赢。内容包括:

  1. 为什么软件项目估算永远不准
  2. 客户、用户或业务的预算和时间一定是固定的
  3. 钱少时间紧的限制并非坏事,如何利用这些限制,直击核心痛点,善用有限的预算和时间

软件项目估算不准确的原因

摘自李笑来的《把时间当朋友》第二版第 54 页:

错误估算任务所需时间,是最常见,也是最致命的错误。在时间领域有一个与墨菲定律同源、貌似悖论的侯世达法则值得牢记:

完成一个任务实际花费的时间总会超过计划花费的时间,就算指定计划的时候考虑到本法则,也不能避免这种情况的发生。

大家是不是有似曾相识的感觉。

为什么人们总是错误估计完成任务所需要的时间呢?因为大多数人在执行任务之前忽略了一个重要的步骤,那就是分辨任务的属性——它是熟悉还是陌生的?

有些任务是你所熟悉的,即以前曾经做过的。在这种情况下,正确估算时间是很容易的。

然而,有些任务是你陌生的,那么在执行过程中就必然会遭遇各种所谓的“意外”。其实它们根本不是意外,只不过是因为你对任务不熟悉,它们才成了“意外”。

很不幸,软件项目每次都在实现不同的目标、完成不同的东西,每次都是陌生的,充满“意外”,所以无法准确估算所需要的时间。

对用户来说,估算就是承诺

前面说了,软件项目由于每次不重样,估算无法准确。

但客户、用户并不会理会这些。他们的要求很简单,我提了需求,你告诉我要多少钱、花多少时间,我觉得 OK ,你就去做。

对用户来说,估算就是承诺

但这样的后果也是显然易见的。

大家可以想象一下,在充满各种意外的项目执行过程中,原来的估算很快就会失效。但是由于估算被当成了承诺,项目经理习惯做的肯定就是粉饰太平。

而这种事情并非项目经理会这样做,项目经理也会一直过问 BA 、开发、测试等人员的进度,各角色也做过自己任务的估算,同样会被当成承诺,被问到的时候,也会粉饰。

但纸终究包不住火,这样下去项目一定会在最后时刻翻车,导致无法挽留的后果,所有干系方全盘皆输。

这不是项目经理和交付团队的无能,而是一种保护自己的应激反应。

训练有素的项目经理会试图及时管理估算不准确的问题,一旦发现有超预算或超时的苗头、原定的范围有变更,或者发现范围假设有误、发现了自己原来不知道的事情,就会启动变更流程。但在传统项目管理中,这个流程非常重,相当于重新立项,项目组也必须暂停交付支援,进行重新估算。这种费时费力的事情肯定是不到万不得已不做的。

限制未必是坏事

既然估算永远不准,又会被当作承诺。所产生的后果一定钱少时间紧,这个死结能破吗?

答案是肯定的,但我们需要一点创新的思维。有句话说的好,所谓创新,就是改变主要矛盾

举个例子,需求与资源,永远是一对矛盾。面对无限的需求,一个思路是增加资源,招更多的人。但这也会极大地增加管理成本和难度,也无法保证人员素质和交付质量。另外一个思路是,把现有资源当作限制,倒逼用户对需求进行有效的价值和优先级排序,实现价值驱动交付,精耕细作,确保质量。这就改变了主要矛盾。

对于前文提到的问题,我们的思路一定不仅是提高估算的准确性,提高估算准确性可以在一定程度上缓解问题,但并不能完全解决问题。

估算是否精确,不应该成为一个考核点,因为这既不公平,也没有意义。

有一天和同事吃饭,我们聊到愚公移山。一个有趣的结论是,由于愚公移山这个“项目”并没有期限,因此它无所谓成功与失败。所以,无限时间、无限资源并不代表能带来成功。很多成功恰恰因为有限制条件

阿波罗登月计划,一个很重要的成功因素就是有一个明确的目标和不可改变的期限。对于复杂项目而言,严格的期限意味着取舍

当年,美国总统肯尼迪对于登月任务提出的目标是:“在 60 年代结束之前,要把人送上月球,然后再安全地返回地球。”

有了这个清晰的目标和期限,在项目推进过程中,管理者们思考的角度就变成了某个考量是会保证进度还是会拖延进度。一些更高级的技术、更复杂的实验,就算再有价值,如果没法保证那个期限,就会被搁置。

比方说,当时登月计划采用的燃料就是煤油、液态氢和液体氧,而不是更先进但未成熟、研发周期长的固体燃料。

明确的期限和有限的资源,为设置优先级提供了有力的依据

1991 年,李安准备拍摄电影《推手》时,预算只有区区 300 万人民币,作为新手的他专门请了独立制片人来帮他控制预算、严控进度。在这种严格管理下,《推手》顺利地在 18 天内完工,投资方开心,也一举树立了李安在电影界的地位。这个独立制片人的作用,就是限制李安必须在预算范围内,对天马行空的想法进行取舍,确保进度与完成。

反观早年卓别林和其他几个著名导演,因为要摆脱好莱坞的制片人制度,一起创办了一家独立制片公司,里面都是导演这样的艺术家,没有专业制片人,不受预算约束,完全按照创作意愿来拍电影。

在这种“无拘无束”下,公司被一部叫《天堂之门》的电影制作搞垮了。该电影原始预算是 700 多美金,最终花了 4400 万美金,超支六倍多,票房却只有 400 万美金。

可见,限制并非坏事。利用好限制,反而可以把资源集中到核心目标上,实现最大价值

把估算的结果作为限制

我们来看看软件项目估算到底确定了什么?它确定了预算(包括所需要的资源)和期限

传统项目管理是以资源、期限和范围作为铁三角。理想模式是,这三者都不能变。出现意外时,范围不能变,然后通过增加人手或加班、延期和牺牲质量来弥补。

我们知道所谓敏捷模式,或者价值驱动交付模式是,资源和期限不变,范围可调,围绕着项目的核心目标,对范围进行持续地合理裁剪,让最有价值的部分先上线,产生效益并获得反馈,后续进行持续交付

今年我们部门在预算上,也从过去的需求驱动型预算变成供应驱动型预算。

过去,只要业务部门有充足的预算,我们就照单全收,然后据此制定招聘计划。结果是如果某一年业务部门特别有钱,IT部门规模就需要快速扩张,招聘任务艰巨,培训也跟不上,同时要兼顾好几个大型项目,应接不暇,一地鸡毛。

今年,我们以现有的人员加上合理的人员规模增长作为预算,倒逼业务部门基于这有限的资源对项目进行取舍,确保我们能在有限的、高价值的项目上深耕细作。

实例:让 MVP 先跑起来

最近有一个项目,核心系统是一个定时发送报表的系统。系统需要配置定时发送时间、频率以及生成报表所需要的复杂参数。

过去,这些配置需要IT来做,每次配置都是一次正式发布,需要走标准的交付流程,业务觉得这样太慢,他们要求我们做一个UI,把这个功能开放给他们,让他们自己来维护,省却繁琐和冗长的交付流程。

为此,业务部门利用了一个特别预算来立项,因为这个特别预算是千载难逢的机会,过了这村没那店。在立项时,除了上面提出的核心需求外,也顺带提了十几个针对这个系统的其他需求。

结果这个项目仅需求就谈了一年多,没有什么实质进展。后来这个烫手山芋来到了我手上。

我和对接的业务人员明确说,这个项目剩余的预算已经不多了,而且我们的人手也很紧张,我们不会像以前那样再花几个月谈那十几个需求的设计文档,然后花几个月开发所有的需求,这样做到明年年底也未必能上线。

我们要先谈哪些需求是 MVP (最小可用产品),然后先做 MVP 的设计、开发、测试和上线,剩下的需求等 MVP 上线后再说。而且 MVP 应该只解决核心痛点,也就是允许用户自行配置的需求,不涵盖任何其他非核心痛点的需求。

由于 MVP 相对简单,范围可控,我们可以承诺在今年内把MVP交付上线。这既能保证交付能在预算内完成,又保证了今年内这个期限可以把对方的核心痛点给解决了。

业务答应了这个约定。

这个项目剩余不多的预算和时间,反而成了我们和用户谈判的有利筹码。这里博弈的重点是,不管对方提出了多少需求,核心痛点,也就是更快地完成报表定时发送配置,才是对方最急迫要解决的问题。在预算、时间和资源都非常紧张时,对方必须放弃不现实的期望,做出选择。

总结

软件项目的估算永远不会准确,完成一个项目实际花费的时间总会超过计划花费的时间。我们不应该紧盯如何提高估算的准确性这个伪命题,而是转换主要矛盾,把估算确定下来的预算(资源)和期限作为限制条件,围绕着项目目标,管理用户持续调整范围,实现价值驱动交付,并通过持续交付不断满足核心痛点和获取真实反馈。


本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

阅读全文: http://gitbook.cn/gitchat/activity/5d5aa902f854f21d5e0cb272

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App , GitChat 专享技术内容哦。

软件项目估算永远不准怎么办?钱少时间紧未必是坏事相关推荐

  1. 软件项目估算之代码行估算方法

    软件项目估算之代码行估算方法 现在软件在大多数基于计算机的系统中已成为最昂贵的部分,如果 软件成本估算的误差很大,就会使盈利变成亏损. 软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题非常 ...

  2. 理论与实践的完美结合:《软件项目估算》译者序

    这本书需要仔细读. 没有哪一本书能够替代此书在如何建立生产率模型方面的严谨性与实用性,它讲的不是经验法估算工作量,而是模型法估算工作量. 它理论完备.严谨,并给出了工程化的软件工作量估算方法和大量的经 ...

  3. 软件项目管理Follow Me--如何进行项目估算

    一个成功的软件项目首先要有一个好的起点,也就是一个合理的项目计划:一个好的项目计划,离不开一个准确的.可信的.客观的项目估算数据作为基础.如何提高估算的准确性,如何利用项目估算的数据来制定项目计划,本 ...

  4. 软件开发过程与项目管理(6.软件项目成本计划)

    软件开发过程与项目管理(6.软件项目成本计划) 软件项目规模 软件项目规模即工作量包括 软件规模单位包括 软件项目成本 成本估算 估算基本方法 代码行估算法(简略) 功能点估算法- Albrecht ...

  5. 软件规模估算常用的5种方法及实用工具。

    方法一.Delphi 法 Delphi法是最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来,新技术与特定程序之间的差别,但专家"专"的程度及对项目的理解程 ...

  6. 软考复习-软件工程05-软件项目估算进度管理

    软件项目估算 常用估算方法: 基于已经完成的类似项目进行估算. 基于分解技术计划进行估算. 基于经验估算模型进行估算. 成本估算方法 自顶向下:从以前完成项目的总成本来估算现在的总成本,再进行分配. ...

  7. 项目经理必备的6个项目估算方法

    不管你是做工程.IT.建筑.农业.工业还是其他领域,但凡做项目管理,就离不开这几大问题:工作范围.时间.成本.质量.资源和风险. 在每个项目开始的时候,项目经理面临的常见问题如下: ○要估计多少工作( ...

  8. 一文掌握软件项目成本预算、估算的方法和成本控制的秘籍

    每个企业都希望在完成项目后获得盈利,但不少企业到了年终后才发现项目做了不少,公司却并没能达到预期,甚至还出现了亏损.那么钱究竟去了哪里?很多公司都搞不清楚原因,出现糊涂账较多的状况,这将会造成严重的后 ...

  9. 关于软件项目工作量估算的若干问题

    作者:张克强 软件项目工作量估算从估算依据上看可以分成如下两类: 1,基于规模估算 2,基于工作量估算 基于规模估算的情况下,需要估算软件项目的规模.本文首先来看规模方面的问题. 问题1:如何表达规模 ...

  10. 软件项目工作量估算中使用的功能点方法是什么?

    简单的说,功能点方法是一种估算软件项目大小的方法,它是从用户视角出发,通过量化系统功能来度量软件的规模,这种度量主要基于系统的逻辑设计.功能点规模度量方法在国际上的应用已经比较广泛,并且已经取代代码行 ...

最新文章

  1. 抽象工厂模式java_面试官:说一下静态工厂模式,工厂方法模式,抽象工厂的区别吧...
  2. 【BZOJ-3033】太鼓达人 欧拉图 + 暴搜
  3. 王俊和尹玉新团队合作开发代谢组联合人工智能肺癌早期检测新方法
  4. 钉钉开放平台:内网穿透工具 - 服务器免费打造教程
  5. 嘉年华专访 | 我有故事,你有酒吗?
  6. C++---string类接口整理与深浅拷贝
  7. 落地即王道,锁死企业智变CP——云+AI
  8. 零基础学python知乎-编程零基础应当如何开始学习 Python?
  9. python 读取远程服务器文件
  10. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案...
  11. 34 个免费学习编程的最佳网站
  12. DHCPv6相关知识简单总结
  13. 现代通信技术之交换技术基础
  14. 1688API接口:item_search_img - 按图搜索1688商品(拍立淘)
  15. pythonlambda多行_Python中通过lambda抛异常的奇迹淫巧
  16. Programming-寻找发贴水王(C)
  17. JS实现最美的3D宇宙特效
  18. 经常使用网页播放器代码
  19. STL — 迭代器设计思维(二)
  20. Framer for UX Design 用于UX设计的Framer Lynda课程中文字幕

热门文章

  1. 金邦达:做最值得客户尊重的IC卡项目服务商
  2. linux历史数据导出命令,Linux Bash history从入门到进阶
  3. 【数据结构练习题——查找】
  4. 软件工程本科生实习_我从n00b实习生到工程团队主管的方式
  5. 头歌-自己动手画CPU(第二关)-原码一位乘法器-Logisim
  6. 冒泡排序和鸡尾酒排序
  7. Java反射 二三事
  8. 机顶盒利旧改造,实现安卓和Linux双系统启动
  9. 配置git mergetool不产生*.orig文件
  10. win10无法访问xp计算机,WinXP无法访问Win10共享文件夹,拒绝访问怎么办?