介绍
最近忙着赶项目,无暇去写博客。今天我想知道大家是怎么估算项目时间进度的?
我把我这次项目经历,唠叨唠叨。
情况
要做新的项目,产品经理A来找我,问我,这个项目你需要多长时间完成?
前提条件:我没看过需求,我只是泛泛的看了下demo,只是知道,页面上有哪些内容,有多少种情况?我没有办法回答她,因为我自己也不知道到底用多长时间。因为我实在没有办法估算时间。然后产品经理A告诉我,你差不多2周就能完成。那我说,你给我3周吧?我还得做代码调试呢!(其实我挺心虚的,我知道这个页面的功能相当的复杂,但是产品经理A告诉我,数据,接口都是准备好的)。
然后又过了两天,产品经理B找了我,问我,这个项目你估计多长时间能做完?我说3周。B跟我说,我们这个项目比较紧,老大那里着急要呢?时间拖的太长了(这不是因为你们一直拿不下方案,拖了快半年了,怎么到我这里就剩这么点时间了)。我跟他解释:差不多代码2周就能形成,还要一周进行相关调试呢?然后B就回去了。
又过了两天,项目下来了,时间是维期2周,我的开发时间就2周,怎么会这样?A跟我说,不是你跟B说,2周吗?——我冤死了,算了,反正就是做事吗?自己赶紧点应该能完成。
意外不断
我周一需要开始开发,A还没有给我需求。A说,周日他过来加班,然后再给我需求。周一回来了,需求只是一部分,A说,这个估计你也要开发一段时间了。等你开发完了,我后面的需求也就上来了。
就这样开发了一周。设计人员那里的demo也在同步进行中。
后来,开发一周左右,发现原来使用的模块,要用新的接口A,但是接口A还不能满足我现有的需求,必须需要程序员A重新包装给我,这样再等了一下午,第二天,问题不断,不停的跟程序员A进行调试,终于完成此模块的功能。
临近项目结束,模块B又出现问题,产品人员许诺的接口,找了相关技术人员,并没有准备好。原有的接口B也要抛弃掉,跟产品A商量后,决定先放弃此模块,项目结束后再继续开发。
临近项目上线的前两天,测试人员才开始真真正正的测试,给我提了一堆的bug。然后第二天,我疯狂的修改bug。
在项目开发阶段,小问题不断,这里不要这个模块了,这个模块需要列表了,这个模块要移动按钮要修正了......。
终于项目于昨日匆匆结束。
今天一天,问题不断,不停修改bug。
感受
这两周,我快累得吐血了,不停的编码,几乎就没有休息过。
1、产品人员追的太紧了,他们自己不紧不慢的定方案快小半年了,给我的开发时间就2周。——我快疯了。
2、测试人员,给了他一周的测试时间,结果临近上线才真正的测试,然后快要上线了,给我提了一堆的bug。——我快神经质了。
3、接口提供的开发人员。不停的把事情推到我这里,我自己这边的事情越来越多。估计是我嘴笨,老是说不过他们,我也不知道,他们哪里来的那么多道理。——我快气死了。
痛定思痛
1、在项目开始阶段,我并不十分清楚每个模块详细情况(如,接口数据的存储情况,复杂度,以及怎么展现)。因为本身这时根本就没有需求文档。
2、项目开始阶段,本身就不应该受产品人员的影响,他们说多长时间,你就受他们的影响,而拟定自己的时间计划,应该让更熟悉这块的人来给你拟定时间度(如找我们头,项目经理)。
3、在开发阶段,不应该让产品不停的修改方案,我本身知道这个道理,但是没有办法,因为本身就没有详细的需求文档,想到哪里就做哪里。
4、应该在临近上线的时候不能让测试人员提bug,或者此bug(不是紧急的bug)只能上线之后,后期再进行跟踪修复。——这个我明天找项目经理,反应一下这个情况。否则,明天上线,你还在不停的修改代码。
5、接口提供的开发人员,必须要求他们给我们详细的文档,以邮件的形式发给我们,否则,你根本就无从入手。——此次开发,我不停的去他们那里询问接口调用细节。
6、同事建议我,把需求打成碎片,一块一块的评估。——天,哪有什么需求,他们自己拟定方案的时候,我就参与过一次会议,其他会议我都没有参与过,无暇知道他们是怎么想的。——估计是有预谋不让我参加,怕我知道,时间拖得比较长吧?(我猜的)。
总结
以上是我这次项目的经历,在这过程中,我知道自己有很多的问题,但是我最大的疑虑,也是我5年开发中一直遇到的问题,就是开发周期问题。
我同事跟我说,开发周期,你要预估下时间,然后你再这个时间基础上再加一周时间。但是我这预估的时间,我自己都没办法预估出来。很多时候我都是被自己的项目搞的晕头晕脑的。——很多道理我懂,但是真正到实际中,实在摸不开面子,既然拿了人家的工资,就要努力给人家做事情。自己吃点亏,累点没什么。
也许大家会责怪我,这一切都是你自己的错误,自己酿下的苦果,自己就要承受。——呵呵,是啊,我写此文,也是发发牢骚而已,一吐心中的烦闷。
如果大家在时间估算上有什么技巧的话,不妨相授彼人,不慎感激。
续:
上一次我们聊到 估算项目的时间进度! ,感谢很多博友的建议。我也向我们老大咨询了一下,他给了我很多宝贵的意见。
以下是我跟老大的一些交谈,希望对大家有所帮助。
把握三个点
以下是老大给我的建议,大家可以考虑一下。
这三个点中,我们最终要完成的就是目标的完成。
1、这里的资源,主要指开发人员。 2、现在开发人员就我自己,我们就自然要求把时间弄长了。——这里的时间包括加班时间。 3、如果开发人员也不增加,时间也不延长,那只能削减产品功能了。 |
现在的主要问题是沟通问题,怎样才能让产品信服,愿意把时间延长呢?那我们就需要把需求罗列出来,让产品看到我们要做这么多的事情,自然就愿意给你时间了。
分解需求
我们都知道分解需求,但是分解需求的时候,我们最容易犯的错误就是笼统,那么我们怎么避免笼统呢?这就需要你具体的描述。你既然是技术人员,当然需要你以技术角度,给产品人员讲述,产品人员在技术这块他们也是多少知道的,不是一穷二白的。——把别人当傻子,其实很多时候,自己就变成傻子了。
现在举个例子。——我拿博客园举例子,从我个人技术角度分析。
demo:
我:很多时候,产品人员就给个demo,然后让我估算时间,连个需求都不给。
老大:我们平时都是这样做的。
我:那怎么评估时间?
老大:我们从demo上,大致就能了解有什么模块需要我们开发了。
然后老大,就给我分解了demo.
老大:1这个模块你开发需要多长时间。
我:如果接口数据都完整的话,应该两天时间吧。
老大:你说的太笼统了。你能再具体一些吗?
我:首先,我要了解,这几个tab的数据接口是否已经提前准备好的呢?还是需要我这里再重新整合。所以我需要跟接口人员沟通一下。如果数据无需重新组装,那组织数据这块,我半天就能完成,如果数据需要重新组织,怎么组织,我就需要一天的时间了。其次,tab展现这块,如果tab过长是不是做特殊处理 (比如需要一些按钮做tab切换),如果做特殊处理,那我需要1天时间。如果不做特殊处理,那我需要半天时间。——所以这块加在一起最多2天。
老大:恩。如果接口那边没有准备好,你怎么办?
我:那我先确定一下,接口开发人员什么时候,能够把接口准备好,然后到时间了,我再进行这个模块的开发。我先开发其他模块。
老大:恩。那么2这个模块你需要多长时间?
我:这个功能,看起来比较简单,先判断数据层那里是否有这个接口,如果有,就直接链接过去,没有就不出现。就是个链接问题,瞬间就能完成。
老大:那第3个某块呢?
我:3这个模块看起来比较简单,如果只是单单的从接口取数据回来,那这个可以不用具体分配时间,如果这个是从众多数据中汇总出来,那我需要1天时间。
老大:那你是怎么估算出1天时间的。你是无法知道具体的算法的。如果汇总的数据非常复杂,那你用1天时间够吗?你怎么计算?所以,你需要先跟接口人员进行沟通,要知道怎么进行数据计算。把整个流程弄明白,然后再进行沟通。所以这个也需要你沟通之后,才能确定时间。不能凭空想象。
我:恩。
老大:第4个模块你需要多长时间?
我:这个需要到不同的接口把数据拿过来,里面还有其他信息,比如评论数,阅读数,这些都要组织成一个新的数据结构,然后进行展现。因为关联四个接口,而且四个接口都要到同一个接口取评论数和阅读数,所以我需要1天半时间。
老大:因为这个数据比较复杂,所以我建议你,用2天时间去做。那你第5个模块,需要几天完成?
我:我觉得第五个是所有当中最重要的模块。1>我需要兼容所有tab模块。2>我需要做一些后加载 。3>在后加载的过程中,到一定数目的时候,我还需要进行翻页。因为关联前端js和后端php代码交互,我需要设计一下,然后进行相关编码,这个我需要3天时间。
老大:恩,这样,你不就把时间估算出来了吗?
我们在估算时间的时候,我们要考虑很多因素,这样你才能比较准确的估算时间。 |
此进度图不是使用office 的project工具,而是一个在线工具。建议大家使用,非常好用。——https://www.smartsheet.com/