Project management 在使用新技术时,如何估计时间?

Project management 在使用新技术时,如何估计时间?,project-management,estimation,Project Management,Estimation,在过去的几个月里,我一直在研究Flex,因为这是我第一次实际使用Flex,我最终低估了项目任务,导致了延迟。那么,在研究一项新技术时,人们如何估计项目的时间安排呢?在承诺在特定日期交付任何产品之前,我会给自己一段时间来试验和学习这项新技术 在第一阶段之后,做一些粗略的估计,确保你的上司知道他们到底有多粗鲁。你不能 你必须把它当作研究,研究不能被估计。 < P>我想对于某个大小的项目,给自己一些时间做一个合理的简单但仍然完整而不平凡的原型,代表你的项目的一部分。然后,您将有一些时间来使用该技术,并

在过去的几个月里,我一直在研究Flex,因为这是我第一次实际使用Flex,我最终低估了项目任务,导致了延迟。那么,在研究一项新技术时,人们如何估计项目的时间安排呢?

在承诺在特定日期交付任何产品之前,我会给自己一段时间来试验和学习这项新技术

在第一阶段之后,做一些粗略的估计,确保你的上司知道他们到底有多粗鲁。

你不能


<>你必须把它当作研究,研究不能被估计。

< P>我想对于某个大小的项目,给自己一些时间做一个合理的简单但仍然完整而不平凡的原型,代表你的项目的一部分。然后,您将有一些时间来使用该技术,并且还可以获得关于使用该技术创建内容所需时间的宝贵见解。

当我在一个项目中工作,将一个中等规模的开发团队切换到.Net时,可以估计完全转换的唯一方法是允许初始研究阶段。这使得一些开发人员能够熟悉该技术,并完全实现一小部分功能。我发现非常重要的一点是,系统的一部分已经按照生产标准完成了

还讨论了聘请一位熟悉该技术的顾问的问题。这是因为成本问题而被否决的,但我认为如果有一个有.NET项目经验的人能为我们指明正确的方向,那将是非常有帮助的

唯一需要补充的是,当您在处理这种性质的项目时,还必须估计需要多长时间才能让其他开发人员跟上进度。显然,这将少于研究阶段所用的时间。尽管开发原型的开发人员应该在场帮助那些现在正在学习新技术的人

总而言之:

  • 你需要给自己时间去学习新技术,然后才能做出真正的估计
  • 您需要根据整个项目的经验和生产标准进行评估
  • 不要害怕雇佣有经验的承包商来快速学习最佳实践
  • 不要忘记,每个人都需要先学习这项技术,然后才能开始编写生产代码

当我在过去使用过一项新技术时(即,当新技术对项目的交付起着核心作用时),我对其进行了良好的评估,结果如下:

New Project Time = Project Time * 1.5

。。。但是不用说,这是一条经验法则和YMMV。

除了雇佣人员或不进行评估之外,您可以做的一件事是评估任务的相对复杂性,然后将实际执行时间与复杂性水平进行比较。随着时间的推移,比率将趋于稳定值

我通常分别估计学习和实施所花费的时间。也就是说,我根据项目的困惑程度来评估项目,就好像我知道自己在做什么一样,然后尝试评估我学习新技术可能需要的时间

不久前,我不得不在Flex中完成一个项目,我以前从未使用过Flex(或Flash)。我还被迫在这个Flex应用程序中使用某个第三方小部件库。我估计了我认为在一种合理的语言(如Java)中需要多长时间,然后将它大约翻了一番,以考虑学习一种新语言。问题是,Flex是不合理的,它没有文档记录,标准库中有很多bug,显然我们的第三方库把标准库的所有设计特性都放在心上了,因为它也被破坏了。我们最终得到了一个性能很差的产品,它有一半的功能,超过了分配的时间。谢天谢地,管理层允许我们在一段时间内继续进行这方面的工作(他们一直在改变需求,所以他们欠我们这么多),我们把它弄得非常好。它仍然没有做到我们想要的一切,但我们绕过了大多数库错误,包括缓解最严重的性能问题(即,实例化UIComponent需要很长时间,因此我们不是在启动时全部执行,而是根据需要执行。这与我们的第三方库无关)

因此,简言之:

  • 始终估计学习新系统所需的大量启动时间。除了学习语言,你还需要学习一些特质。这可能无法准确估计
  • 尽可能避免使用Flex。我无法想象直闪会更好,因为它们共享图书馆的很大一部分

我还建议查看以下线程:

功能点是一个“行业标准”(不管它是什么意思),用于估计完成某项工作所需的时间。在大多数情况下,他们试图找出程序的功能,然后将其放入如下算法中:

long GetManHoursForProject()
{
    long   Count_of_Function_Points = GetFunctionPointCountFromAnalyticalPhaseOfSDLC();
    double Average_Complexity       = 1;  // .8 for easy, 1 for normal, 1.2 for hard
    long   Programming_Language     = 130; // for C++ (higher level languages have higher values)


    double Man_Months = Count_of_Function_Points * Programming_Language * Average_Complexity;


    long   Man_Hours = Man_Months * 20 * 8; // 20 days per month, 8 hours per day

    return Man_Hours;
}
我从上面链接到的帖子谈到了故事板上的观点,这是一个相互询问的对话。我会研究这两个主题,找出哪一个适合你

函数点和故事板点的好处在于它们有一个语言乘数。所有语言都使用相同的思维方式


如果您正在学习一种新的语言,那么对于您的特定系统来说,复杂性会更高

我的经验法则是将你认为需要的时间增加一倍。我发现你总是会遇到一些意想不到的问题,需要时间才能解决。

现在,我遇到了一个像你这样的问题。在阅读了这里的评论之后, 我认为有一个层次需要对新技术有深刻的了解。 首先,只需在短时间内研究新技术