User Story 无法在规定的时间内完成, 都是估算人天的方法不对惹的祸?

当User Story
无法在规定时间内完成时,
许多人的第一反应便是: User Story 估算的方法不对, 所以, 需找一个可 “准确” 估算人天的方法?

1) 首先,我想任何解决问题的方法,  都没有对错,
只有因果?

当 User Story
无法在规定时间内完成时,
我们可以花更多的时间去做 User Story
工作量的评估? 这绝对是个 “对”
的方法,
而这个 “对”
的方法,
最终所带来的最大且唯一的价值便是:
证明我们大家都能如期交付 User Story;
证明大家都没有做错事?

但真正的重点是:
证明我们大家都能如期交付 User Story;
证明大家都没有做错事,与能高效的交付符合使用者预期的产品间,
是否就能划上等号?
我想这才是我们大家,
真正该去严肃面对与深度思考的问题?

2) 回到估算人天这件事?

软件开发目前还是个纯手工打造的工作?

天底下的任何事只要是牵扯到有人类行为的介入,
就只能以 “概率”; “高斯曲线”
来预估,
预测人类行为的模式或发展?

所以,
估算人天较为合理的作法应该是:
同样的一个需求项 (专题或 User Story)
在不同的估算人天数下,
会达到的 “概率”
是多少?

也就是说,
某一个需求项 (专题或 User Story),
预估可在 20
人天完成的概率是 10%,
预估可在 8 人天完成的概率是 50%,
而预估可在 2人天完成的概率是 0%.....等等?

唯有经由如此合理但颇为费劲的作法,
才能建立起团队开发效率的高斯曲线,
客观的 “预估”
出, 团队成员的开发人天完成的 “概率”;
而非所谓 “准确”
的完成天数?

所以,
敏捷开发期望一切化繁为简,
一切以 “人”
为本;
以人的主动性来代替耗时且依旧无法提升效率的估算人天模式,
以人的主动性来决定 User Story
该完成的天数?
正因为如此, 敏捷开发中所估算的人天,
其中的主要目的,
是要排定迭代内 User Stories
的优先级,
而非告诉开发人员, 你有多少人天可以做开发?

3) 我们大家需要深度思考的另一个问题是:
我们今天是以问题的表象做决策?
还是以问题的根因做决策?

当 User Story
无法在规定的时间内完成时, “人天预估不准确”
是问题的表象?
还是问题的根因?

时间: 2024-07-31 01:43:57

User Story 无法在规定的时间内完成, 都是估算人天的方法不对惹的祸?的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

JavaScript框架探索1——为何JavaScript开发需要框架

当下浏览器是JavaScript重要的宿主环境,因此我们非常有必要讨论一下浏览器这款客户端应用程序.而浏览器是伴随着互联网的发展而发展的. 1969年互联网诞生,此后得到了飞速的发展,它将全世界各地互联了起来. 1991年一个划时代的东西----浏览器横空出世,自此,互联网走进普通大众的家中,我们只需要输入一个url地址再按下回车这个窗口中就显示出我们想要的内容,早期的时候这些内容通常以文字的形式呈现出来,后来又有了图形化呈现的方式,我们通常把这个窗口和里面的内容叫做网页. 通过以上过程的描述,

Java面試題(实用性高)

3.Spring MVC中的注解你都用过哪些,SpringMVC的运行原理是什么? @Controller:使其普通的java类充当控制层的作用. @RequestMapping:有两个参数 url 代表要访问的路径 method请求方式 @Service::使其java类充当service层. @Repository::使其java类充当持久层. @Resource:默认按照名字注入指定的bean. @Autowired:默认按照类型进行注入可以结合@Qualifier("bean的的名字 名

NoSQL -- redis 安装 主从 配置详解 常用命令

Redis 也是key-value存储系统,官方站点 http://redis.io,但相对于memcache,有如下优势: 1.支持更多地value类型(string.hash.lists.sets.sorted sets等): 2.支持数据持久化,预防服务重启后需要重新存储: redis 有两种文件格式:全量数据(RDB=redis database).增量请求(aof=append only file). 前者是将内存中的数据写进磁盘,便于下次读取文件时直接进行加载,快照形式: 后者是将r

Java synchronized的实现原理与应用

在多线程中synchronized应该是我们运用的最多的,很多人会称呼它为重量级锁.java中的每一个对象都可以作为锁.具体表现为以下三种形式. 对于普通同步方法,锁是当前实例对象. //图书 class Books { private int id;// 图书ID private String name; // 图书名称 private int number; // 图书数量 //存书 public void stockBooks(int count) { number+=count; try

你不知道的JavaScript--Item23 定时器的合理使用

1.定时器概述 window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval.其中前者可以使一段代码在指定时间后运行:而后者则可以使一段代码每过指定时间就运行一次.它们的原型如下: window.setTimeout(expression,milliseconds); window.setInterval(expression,milliseconds); 其中,expression可以是用引号括起来的一段代码,也可以是一个

Android 多线程及线程通信

AsyncTask AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现. AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result. Params 启动任务执行的输入参数,比如HTTP请求的URL. Progress 后台任务执行的百分比. Result 后台执行任务最终返回的结果,比如String. AsyncTas

[leetcode]3Sum

问题描述: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c) The

Java synchronized详解

Java synchronized详解 第一篇: 使用synchronized 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用.我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款.取款操作的. 在程序中我们使用了一个简化版本的Account类,代表了一个银行账户的信息.在主程序中我们首先生成了1000个线程,然后启动它们