项目经理被问到最多的问题就是,“这个项目什么时候才能完成?”
被问的时候,可能项目才定下来,仅仅知道大概的功能模块,非功能性需求还模糊不清,甚至团队成员都没到位。但是上级、销售、客户急切地要知道,这个项目什么时候才能完成?
被问的时候,也可能项目已临近结束,或者说临近当初计划的交付日期。然而待完成的功能还有一堆,测试出来的bug有一大堆,客户又提出了新的需求,团队正有人要离职 …。但是上级、销售、客户非常急切地要知道,这个项目到底什么时候才能完成?
这还不算糟糕。更头疼的问题是:“再有三周,项目应该完成了吧?”
因为后者根本不是问题,而是命令。项目经理必须要能够合理解释为什么三周不能够完成项目;或者说明在三周内,能够完成什么。
我们都用过MS Project, 但是那上面的漂亮表格对这样的困境毫无帮助。相反,正是Project 中的甘特图和日程表,埋下了陷阱。因为,在Project 中无法预估需要多少工作日才能完成模糊不清的需求,也无法体现实际情况发生变化后对进度的影响。
当我们讨论进度的时候,其实包含了两个未知的变量。第一是完成需求所要的工作量,包括需求定义、开发内容边界;第二是团队的工作能力,包括成员的行业知识专业技能,成员之间、成员和外部的沟通能力,等等。
关键就在于,这两项都是变量。如果任务是搬一千块砖头,每分钟每人能搬10块,那么结果是显而易见的。
在敏捷开发中,采用相对估算和迭代求精的方法来处理项目进度的问题。
首先是工作量。用估算代码行数或者界面元素的方式,就像论斤卖书一样,只适用于粗制滥造的软件生产过程。用户需要的并不是代码或者按钮,而是可靠易用的功能。
在敏捷开发方式中,先由用户和设计人员粗略估计各个功能模块的相对规模和难度,给出一定的分值。分值不代表具体人月,起相对比较的作用。例如有查询、显示、修改三个模块,如果实现显示模块的工作量是10分,那么查询模块可能是15分,而修改为20分。
下一步,选择一个工作量估分最低的模块,例如这里是显示模块,然后进一步考量其工作量。例如要准备数据库、设计界面、执行查询,显示内容等等。假设这轮估算得出此模块需要10人天,从而得出单位分值对应的人天为1;那么,整个项目就需要45人天。
这个估算建立在对项目的初步了解上,主要依赖项目经理的经验。有偏差?没关系。接下来通过迭代来求精。先来实现显示模块,如果事实上花费了12人天,那么根据比例关系,剩余内容的估算大约就是42人天。
当然,比例关系也不是一成不变的。随着模块的逐个完成,项目经理对项目的认识也在加深,他可以再调整剩余模块的相对分值。
在实际操作中,项目经理首先按照优先级排列功能模块。然后把高优先级的模块尽可能地细分,再选择分值最小的模块开始开发。统计总工作量时,按比例累加其他模块的工作量,并加一定的调整系数,因为模块的复杂度不是线性增长的。每次迭代开发完成后,逐步降低调整系数。通常4~5次迭代后,可以将调整系数归零。
在上面的例子中,第一次估算的初步结果是45人天,因为完全是凭经验,因此要给较大的调整系数,比如说0.4,因此给出的估算工作量区间为[45*0.6,45*1.4],即27到63人天之间。为保险起见,项目经理上报的工作量为70人天。
第二次估算,剩余内容的初步估算为42,调整系数下降为0.3,因此给出估算区间为30到50人天之间。依此类推,通过不断迭代,对剩余工作量的估算将越来越精确。
这样估算的好处在哪里?
首先,工作量变量的很大一部分因素,存在于非功能需求,例如界面的美观程度。而同一项目的不同模块之间,非功能需求往往是一致的,相对估算法过滤了这一层复杂度。团队能力这一变量因素也是如此。当然,随着项目的进展,成员的开发能力应该有一定的上升,但随着加班出差等因素,投入程度也可能下降,因而会相互抵消。总之在周期6个月以内的项目中,很少出现团队工作能力戏剧性变化的情形。因此相对估算也过滤了这个复杂度。
其次,迭代求精的方式让项目经理对估算时间更有把握。最初出现偏差是必然的,但只要团队稳定,没有大的需求变动,估算范围将迅速收缩。这比一次性报数更准确。
它的额外好处是,敏捷开发是遵循优先级的,即使对剩余时间(即低优先级模块的开发时间)的估算不十分准确,影响也不是非常大。
对比一下甘特图方式,在开发初期就要把各个模块的开发时间估算出来以统计总量,这就是瀑布开发的模式。
进度问题的另一方面,是项目经理如何了解团队以及每个开发人员的开发速度。当任务分配之后,项目经理如何做到心中有数,估算任务实际完成时间。
敏捷开发过程中,由开发人员自己来估算完成该任务所需要的时间。当然,每个人的能力不同;每个人的心态也不同,有的人保守,有的人乐观。没关系,还是靠迭代来逐步求精。
在每天的例会上,开发人员被要求对当前任务的剩余开发时间做重估。不同于Project 统计每人每天在任务中花费了多少时间,敏捷方式只关心这项任务还需要多少时间去完成,直到归零,然后再来统计实际的工作时间。
为什么?因为统计开发过程中的花费时间是毫无意义的。这和搬砖头不同,也许昨天用了8个小时没有一点进展,今天一旦想通了就事半功倍。我们真正关心的,就是到底还需要多少时间来完成任务,而不是已经花费掉不可恢复的时间成本。
在每天例会中,项目经理需要注意时间曲线保持水平的成员,他是不是遇到瓶颈了,是否需求帮助?也要留意时间曲线下降幅度过大的成员,他发现了什么好的办法,有没有低估需求?这样,项目经理会更面向结果,只要按计划保证质量完成任务就行,成员到底花了多少时间是个人的事。传统做法记录每个人每天的工作内容,第一是因繁琐而失真。其次,一旦上级发现某人工作时间不够(即便他完成了任务),忍不住会派新任务,从而造成越干活越多,反过来打击程序员的积极性。
敏捷估算的关键之处,是把成员能力这个变量的估算,交给最合适的人去做,即程序员本人。然后通过比较历次迭代时的预估和实际时间,给出校正系数,以避免程序员过于保守或过于乐观。这肯定不是绝对准确的,但效果往往比项目经理自己拍脑袋估算,然后强行指定deadline 要好得多。
在敏捷开发中,做计划比计划本身更重要。项目经理需要时刻向前考虑,考虑各种动态因素,而不是死报着计划本身。在进度估算的时候,项目经理应该在不同阶段,根据实际情况,给出合乎情理的回答。
摘自:http://developer.51cto.com/art/200906/130031.htm
分享到:
相关推荐
### 敏捷开发的核心理念与实践 #### 一、敏捷开发概述 敏捷开发是一种强调灵活性、快速响应变化的软件开发方法论。与传统的瀑布模型相比,敏捷开发更加注重团队之间的紧密协作、持续改进以及高质量的产品交付。...
这些工具涵盖了从产品积压工作簿到小版本积压工作簿,以及容量规划和报表等多个方面,使得团队能够更好地适应变化,同时保持对项目进度的清晰把握。 首先,我们要理解敏捷规划的核心理念。敏捷并不意味着无序或快速...
用户故事是敏捷开发中用于表述需求的一种方式,它帮助团队更好地把握用户需求,保证项目顺利进行。 **估算和规划** 敏捷项目管理中的估算和规划是持续进行的过程,通过迭代周期性地进行估算和规划,不断优化项目...
敏捷开发强调的是短周期迭代和持续交付,袁斌在他的演示中详细讲述了如何使用敏捷需求管理的流程来引导产品的开发。这个流程以愿景为核心,通过迭代逐步实现从系统级故事到开发级故事的转变,确保开发工作与市场和...
同时,对软件工程方法论(如敏捷开发、Scrum等)的理解和应用也是评估此能力的关键。 3. **沟通能力(权重10%)**: 软件开发并非孤立的工作,需要与团队成员、项目经理、产品经理等多方协作。良好的沟通能确保...
本章节将详细介绍一系列用于支持敏捷团队协作的工具,包括但不限于项目管理工具、代码管理平台、沟通协作平台等,这些工具能够帮助团队更高效地实现敏捷开发原则与实践。例如: - **Jira**:用于跟踪问题和任务的...
11. **敏捷开发方法**:如Scrum、Kanban,强调迭代和灵活适应变化。试题可能会探讨敏捷原则和实践。 通过这些历年试题的练习,考生不仅可以掌握软件开发工具的使用,还能加深对软件工程整体流程的理解,提升解决...
敏捷开发模式中的SCRUM是一个典型的敏捷开发框架,它通过短迭代周期(通常为1-4周)的Sprint来进行开发,每个Sprint结束都会产生一个可工作的软件版本,有助于持续交付价值。 文章通过一个生动的例子说明了项目管理...
IPD与其他研发管理模式如敏捷开发、精益生产等有所区别,但也有共通之处。例如,IPD强调端到端流程,而敏捷开发注重迭代和灵活性;精益生产追求消除浪费,IPD则致力于优化整个产品生命周期的效率。企业可以根据自身...
1. **开发文档**:开发文档是软件开发过程中的重要组成部分,它记录了项目的各个阶段,包括需求分析、系统设计、编码实现、测试验证和后期维护等。这些文档有助于团队成员之间的沟通,提高项目的可维护性和可扩展性...
传统瀑布模型中,软件开发过程被严格划分为需求分析、设计、实现、测试和部署等阶段,每个阶段之间的沟通和协作成本高,导致项目进度缓慢且难以适应快速变化的市场需求。敏捷开发模式的出现部分解决了这一问题,通过...
无论是问题本身的复杂性,还是开发团队的沟通难题,或是大规模项目中对整体和细节的把握,都增加了软件开发的难度。以Windows为例,随着代码行数的急剧增长,管理和协作的复杂性也随之增加。 二、软件工程方法 为...
考生应熟悉瀑布模型、敏捷开发等常见的开发方法,并理解它们在不同情境下的适用性。同时,了解质量管理标准,如ISO 9001,以及软件工程中的测试策略,如单元测试、集成测试等,也是必不可少的知识点。 此外,数据库...
### 敏捷项目管理在互联网公司中的应用 #### 一、互联网公司的特点与挑战 互联网公司的项目具有多样性,包括新产品开发、运营维护和技术升级等。这些项目的共同特点是产品效果难以预测,受到市场、竞争对手以及...
采用敏捷开发、迭代或瀑布模型等方法,取决于项目的特性。 5. 实施建议 实施过程中,建议团队采用敏捷原则,保持灵活性,及时调整策略以应对变化,同时保持良好的沟通和协作。 6. 涉及到的相关文件和表单 相关文件...
在IT行业中,构建一个高效的软件开发环境是至关重要的。本篇将详细讲解如何结合Nexus、SVN、Jenkins(Hudson)、Maven以及...同时,禅道的项目管理功能可以让团队对项目的整体进展有清晰的把握,促进敏捷开发的实践。
此外,敏捷开发和迭代模型也是现代软件开发中常用的方法,它们更注重灵活性和适应性,允许在开发过程中随时调整需求。 在IT应用生命周期管理中,检查点(CheckPoint)和里程碑(Milestone)是重要的管理工具。检查...