软件项目管理之日计划_第1页
软件项目管理之日计划_第2页
软件项目管理之日计划_第3页
软件项目管理之日计划_第4页
软件项目管理之日计划_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件项目管理实践之日计划袁光东原创- 胡磊推荐如何提高项目的生产率,保证项目按期交付是每个软件开发项目经理都需要面对的难题。关于这方面的研究,在人月神话、人件等书籍都有很详细的论述。研究表明,不同程序员之间的生产率最高差别在40倍以上。虽然笔者没有亲睹这种样例,但是笔者的开发和管理生涯中所发现的相同技术水平程序员之间的生产率最大差距可达4倍。这个数据就发生在笔者的一个项目中,这让笔者感到非常的震惊。如果说40倍的生产率差距可能会有技术能力、工作经验、熟悉程度诸多因素的影响。那么,笔者所发现的4倍生产率差距却更让笔者感到不可思议。案例程序员J:四年开发经验程序员L:三年开发经验程序员Y:五年开发

2、经验技术能力:Y J LJ,L,Y同时进入一个项目组,开发时间为30个工作日,即6周,包括需求分析、设计、编码和集成。其中编码和单元测试时间为10个工作日(2周)。产生的工作绩效为:程序员规模(代码行)J1500L3600Y6000可见,当程序员的技能达到一定水平后,技能与生产率并不成正比,并不是技术水平越高的程序的生产率越高。一、最后期限很多程序员都会有类似的经历:1月1日,项目经理说:“小张,在1月5日之前把这项工作做完,详细的需求文档我已经发到你的邮箱中。”1月1日,小张对需求文档瞥了几眼,估计2天就可以完成,嘀咕:“现在才是1月1日嘛。这项任务要1月5日才提交。我还有时间,不用管它,还

3、是先看我的小说吧。”1月2日,小张继续看他那心爱的小说.1月3日,小张继续看他那心爱的小说.1月4日 9:00,小张开始看需求文档,2小时后中断,因为他需要修复系统的一个Bug。1月4日 18:00,小张正在埋头苦干,因为明天就要提交工作,可是一个代码还没有写呢。1月4日 23:00,小张完成大部分工作,下班走人。1月5日 9:00,项目经理问:“小张,那个功能做完了吧?”小张答道:“就快了,今天提交没有问题。”1月5日 14:00,小张发现有一部份代码需要重写。用户的要求是需要一个可配置的功能,而小张却写成了硬代码。1月5日 17:00,项目经理来到小张面前:“小张,你中午不是说今天提交没有

4、问题吗?怎么现在还没有看你提交代码?”小张委屈地答道:“经理,遇到一点小麻烦。不过相信我,下班之前一定完成。”1月5日 18:00,项目经理急匆匆赶到小张的座位旁:“小张,请马上提交代码,不然就来不及了。”小张这时也急了:“你不要催我。这个功能麻烦大了,没有想象得那么简单。我今天晚上得加班。”项目经理无可奈何地走了。小张加班到凌晨1点。但程序还是有一些问题。1月6日,小张仍然在修改程序.1月7日,小张仍然在修改程序.1月8日,总算是修改完成。已经拖了三天,来不及测试,只能匆匆把代码提交。后来,又经过5次修改,直到1月20日,这个功能总算是彻底完成。小张向项目经理请了一周假。因为这两周来几乎每天

5、晚上都是加班解决问题。许多的程序员还会有这样的经历:4月1日,项目经理:“小王,这个功能交给你,需求你看了吗?你看需要多长时间完成?”小王:“哦,经理,这个功能我刚看过,大约需要1周时间。”项目经理:“那就是4月5日可以提交啦?”小王:“是的,经理。这个功能内容很多,还要实现一个邮件功能,4月5日能提交已经是我的极限了。”项目经理:“那就4月5日吧。”4月2日,小王发现:系统中已经有一个类似的邮件功能,直接使用就可以。4月2日 18:00,小王已经把功能都完成了。4月3日 9:00,小王把功能都测试通过,并且还私下请用户帮他进行测试通过。4月3日 11:30,项目经理:“小王,那个功能做完了吗

6、?”小王:“经理,正在做呢。你看,昨天你又叫我修改另外一个Bug。不过,经理你放心吧,4月5日一定可以提交。”(小王已经做完工作,但声称没有做完。)4月4日,小王专注的看着一本电子书,名字叫The Deadline。4月5日 15:00,小王把代码提交,并向经理发邮件,主题是:XXX功能已经完成。4月6日 9:00,项目组开会,项目经理表扬了小王,要求大家向小王学习。因为这次发布只有小王按时完成了工作。简直不可思议,我们的程序员就是这样工作的。是的,我也认为不可思议!可是哪个程序员敢保证自己没有这么干过呢?这就是所谓的最后期限:人们总是在最后期限才开始工作二、热衷于加班在所有的软件项目组中,加

7、班已经成了天经地义的事。甚至有些管理层认为,如果一个项目组不加班,说明项目组没有尽全力的去做事。我至今不明白这是什么道理,工作是否尽力与加班到底有何关系?工作的绩效又与加班有何种关系?在笔者的项目组中,笔者的客户方也曾对笔者要求项目组必须加班,遭到了笔者的拒绝。在保证每个阶段在不加班的情况下按期完成,客户方才勉强同意。事实证明,不加班也是可以把项目做完的,而且可以做得更好。在我的程序员生涯中,曾经两次长达4个月的封闭开发期,被要求每天从19:0022:00集体加班。但实际情况是,每天都可能要在23:00之后才可以下班。因为项目经理没有走,所以其它开发人员也只能留下。痛苦的是,我在那段加班时间里

8、除了看技术电子书外,找不到任何可做的事情。我相信,当时项目组有太多的人跟我一样。当我每天23:00回到宾馆时,已经完全麻木了。我无时不想那该死的项目早一天结束。在那段时间里,我最大的收获时进行了大量技术积累。项目结束时,我的加班记录累计长达30人天。甚至有些程序员在正常的工作时间里也是不做事的,下班前开始忙碌,加班干活。想想这样的加班又有什么效果呢?三、工作成熟度与团队成熟度因此,我一直致力于研究提高个人工作绩效的方法和提高项目组工作绩效的方法。在长期的学习、摸索、实践中,我发现全心的投入工作,干好4个小时就足以把工作做好。这种全心投入产生的绩效要比以前一周所干的还要多。如果每天努力干好8个小

9、时,你会比周围的人产生2倍以上的绩效,当然也会非常疲惫。在管理一个40人规模的团队时,我每天投入仅仅4个小时就足够。为什么会有这么高的工作效率?主要是长期坚持下面的方法:1.日计划,列出工作清单(列出当天需要做的事情)2.为任务划优先级(标出当天必须完成的事情)3.只做最重要的事情,而不是最紧急的事情4.绝不拖延,计划当天必须完成的事情就一定要做完才走。笔者长期以来在思考,这个方法能否帮助团队提高工作绩效?能否让项目组提高生产率?能否使项目按期交付和提前交付?能否帮助程序员在不加班的情况下把项目做好?在笔者带项目和监控项目的过程中发现,程序员工作效率不高的原因除了技能因素外,还有几个重要的因素

10、在影响着程序员的工作绩效:1.工作无计划:很多程序员根本不知道每天要做哪些事情,每天必须做完哪些事情。很少有程序员对当天的工作进行计划,2.工作无重点:很多程序员通常按事情发生的先后顺序来做事。有时,有些程序员忙碌了一天下来却发现当天其实没有做什么有用的事情。3.工作无目的:程序员不知道当天要把事情做到什么程度,完全是凭心情做事,凭良心做事。事情没有做完,别人下班自己也跟着下班,认为反正明天还有时间,还没有到最后期限。4.工作不到位:工作起来总是觉得差不多就行。把代码写完和功能能够运行当作两回事情。工作到位就是一次就把工作做好,达到可交付。5.工作无积极性:被动式工作,就算工作做完也不提交,一

11、定要等到最后期限才提交。如果比承诺时间提前提交工作,马上就会带来新的工作,多干和少干一个样,谁愿意多干呢?我们可以提出一个概念叫做“工作成熟度”。工作成熟度高的程序员通常会有计划性、工作有重点、有目的性、工作做到位。而成熟度低的程序员通常是无计划的,工作不分轻重,很容易被突发事件打断当前工作,工作要通过多次修改才能够完成。所以,我发现,工作成熟度对程序员生产率造成最直接的影响。笔者在监控项目的过程中也发现造成项目组效率低下、进度落后的一些因素:1.项目经理不了解项目当日状态。是的,有些项目经理根本不知道今天每个程序员会干些什么?该干些什么?2.项目经理不了解项目实情。没错,项目经理根本就不知道

12、每个程序员当天干了多少活,干到什么程度,还要干多久?也就不知道项目到了什么程序,还有多少工作量要做?3.项目经理不知道每个人是否能够按期交货。项目经理只能是望天收成,期望程序员凭良心、凭职业道德做事。但是,至于程序是否能够按期交货,只有鬼才知道。4.项目经理不知道工作的重点是什么?哪些工作是本阶段必须要完成的?哪些是可以拖后的?5.不良沟通。项目组的沟通不良,产生大量重复代码。甚至会有两个程序同时开发一个功能,但是彼此间却不知道。6.信息不能共享。程序员彼此之间不知道别人干得怎么样?也不知道项目整体情况到底怎么样?这也难为程序员了,因为项目经理也不知道。糟糕的项目都存在着一个黑洞。通常会是在编

13、码阶段,整个项目组就像在黑洞中穿行一样,谁也看不清对方,不知道黑洞的尽头在哪里,谁也不知道走过多少地方,还要多久才能走出黑洞。总之,项目经理只能拼命的喊:“快点,快点,兄弟们,我们的时间不多了。”所以,项目经理只能让所有的人每天加班,星期六不能休息,到最后,星期天也不能休息。这就是我们可以提出的另一个概念“团队成熟度”。“噢,伙计,我已经听烦了。好像是有那么回事!可是又能怎么样呢?所有的项目不都是这样过来的吗?”四、日计划做什么?程序员的工作成熟度直接影响了程序员的生产率;项目的团队成熟度直接影响了项目的生产率。如果我们能够提高程序员工作成熟度和团队成熟度,就一定可以提高项目的生产率。而程序员

14、工作成熟度和项目团队成熟度的共同核心点就是计划。在笔者的研究和实践过程中,可以通过在项目中实施日计划来提高程序员的工作成熟度和项目的团队成熟度,从而提高程序员的生产率和项目的生产率。实施日计划的流程:1.每天8:30-8:35,项目组召开晨会。由项目经理列出每个开发人员的工作清单,并对每个工作任务标注优先级别,设定任务完成的标准,指明当日必须要完成的任务,并得到责任人的承诺。2.每天下班前20分钟,由项目经理依次检查开发人员的工作。评定工作是否完成。如果有开发人员未能完成任务,一起分析任务未能完成的原因。然后召开一个简单的会议,介绍当天工作的完成情况及当前阶段的项目状态,未完成任务的开发人员需

15、要加班完成。每天早晨的会议我们称之为晨会,下午的会议称之为夕会。日计划的实施环节:设定目标,制定计划,检查,反馈。日计划的特点:1开发人员每天在晨会承诺完成的任务必须当天完成,提倡日清日结。2提交可交付的成果。(事先制定任务完成的标准,并由项目经理进行检查,评定任务是否完成。)3做最重要的事情4保证把工作做完五、我们是怎么实施日计划的?日计划看起来非常简单,下面我们将对日计划的实践进行讨论。1.实施日计划对项目有什么作用?实施日计划,使项目有良好的沟通机制。每个开发人员都非常清楚项目的当前情况:项目已经完成了多少?还有多少工作没有完成?日计划提倡可交付的成果,也就是每天完成的工作都一定是可交付

16、的。日计划提倡只做最重要的事情,使项目抓住了重点。项目经理通过实施日计划,非常清楚每个开发人员每天需要完成哪些任务,每天必须完成哪些任务,以及每个人的完成情况怎么样?项目经理充分地掌握了项目的情况,可以及时调整计划,应对各种变化。日计划实现了项目的良好沟通,每项任务都由开发人员和项目经理达成一致。日计划通过晨会和夕会实现了项目组的信息共享。2.实施日计划对程序员的作用日计划列出了程序员每天要做的任务清单,并且对任务确定优先级。对程序员的工作指明方向,并且要求程序员优先做最重要的任务,使程序员抓住了工作重点。日计划要求提交可交付的成果,要求程序员把工作一步要做到位,养成良好的习惯。日计划提高了程

17、序员的工作绩效,程序员可以回到正常的工作时间,减少无谓的加班。程序员比以前完成更多的工作而获得奖励。3.在实施日计划时,与传统项目管理的工作分配有什么不同?如何进行工作分配?传统项目管理的工作分配中,工作项的粒度比较粗。每一个工作项通常指一个功能。通常是把一个功能分给某程序员,甚至把一个模块分派给某个程序员。工作项的工时以周为单位,通常是一周或者两周。传统项目管理任务分配表模块功能当前状态计划开始计划结束实际开始实际结束责任人订单管理订单信息查询已开始2009-3-12009-3-72009-3-1L新增订单已开始2009-3-12009-3-72009-3-1L订单管理修改订单未开始2009

18、-3-12009-3-7L删除订单未开始2009-3-12009-3-7L实施日计划的工作分配中,“工作项”的粒度更小。如果按照XP和Scrum的说法,功能就是指一个“故事”,完成“功能”的步骤或事件叫“任务”。传统项目管理的任务分配是以“故事”为最小粒度。日计划的任务分配是以“任务”为最小粒度。“任务”是指完成某一个“功能”的步骤或事件。每个人当天的任务工时总合为1人天。故事和任务的区别:故事任务订单信息查询DAO编码DAO单元测试业务层编码JSP表示层编码集成测试要实现订单信息查询就由右边的那些任务组成。开始,我不知道怎样来描述一个“功能”和实现一个功能细化的“任务”。后来,当我看到Scr

19、um的书籍后,看到Sprint和任务板时,才知道自己的实践与Scrum的某些实践竟有如此相似之处。我困惑很久,想不到用什么词来表示一个“功能”和实现一个功能所需要的“步骤”。Scrum使用“故事”和“任务”来定义它们,我认为非常的准确到位。但是日计划的工作分配与Scrum的工作分配是不同的。实施日计划是由项目经理主导的;而Scrum强调由程序员主导。至于这两种方式,哪一种更好。我觉得可以结合具体的情况进行不同的实践。如果是程序员成熟度比较高的项目,可以由程序员来主导。程序员成熟度较低和工期很紧的项目,可以由项目经理来主导。总之,这都需要程序员和项目经理达成一致。程序员需要向项目经理承诺。Scr

20、um会对每个任务进行事先估算,而日计划分配工作任务前才会进行估算,并且只为每个人分配工作量为1人天的任务总和。日计划样例:2009-3-22程序员L工作计划开发人员今日计划工作及完成情况序号工作任务优先级完成标准是否完成完成百分比完成情况未完成原因检查人L1订单管理模块DAO实现50单元测试通过2与用户确认页面原型10用户确认邮件程序员L任务1的优先级为50,任务2的优先级为10。这并不表示两个任务的重要程度相差40,而是表示L当天应该先做任务1,再做任务2。笔者认为这种日计划更加灵活。因为项目经理可以灵活的设置任务。Scrum的任务都是依据故事。日计划甚至可以把与开发根本不相干的事情包括进来

21、。当天要完成哪些任务是由项目经理先计划的,但是程序员可以提出不同的意见。双方达成一致。并且任务是可以量化和检查的。因此,事先还要设置完成标准。一旦程序员与项目经理达成一致,就相当于程序员向项目经理承诺,今天可以完成这些任务。对于成熟度比较高的程序员,完全可以由程序员先提出计划。然后,由项目经理进行评估和检查。双方达成一致后,就把任务放入日计划的工作任务表中。4.为什么要检查?怎么进行检查?如果没有检查,计划就是无效的。日计划强调提交可交付的成果。虽然事先制定了标准,但是程序员和项目经理可能会对可交付成果的理解不同。项目经理如果要清楚地了解到项目状况就必须要亲自进行检查。如何进行检查?项目经理一定要在现场工作,最好的办法就是让他演示给你看。对于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论