项目经理应该知道的97件事68478.docx
《项目经理应该知道的97件事68478.docx》由会员分享,可在线阅读,更多相关《项目经理应该知道的97件事68478.docx(129页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、项目经理应该知道的97件事以往的软件开发模式是先了解用户的要求,然后再在极度神秘的环境下进行编程测试。毕竟,用户根本不知道我们在做什么,对吧?直至项目结束,我们的魔术师才会匆匆登场,揭去魔法布,然后期望用户会对我们卓越的产品惊叹不已。然而用户此时的通常反应是: “咳,好吧,我知道你们花了很多功夫,但我们真正需要的是”今天,项目成功的秘诀就是尽早向用户展示任何可以展示的东西。如果能在项目启动早期,而不是当整个项目都结束的时候,就能发现项目中存在的问题,那该有多好啊!随着项目时间的推进,变更项目的成本越来越高。重新编码、重新测试以及改进当前软件的时间,加上整合外围代码进行集成测试所花费的时间都会大
2、大拖延项目进度。如果变化非常重大,还可能危及时间和成本底线,需要经过变更控制委员会一个漫长的批准程序。在一些细小环节上做出的编程决策,或许对于软件开发人员和项目经理而言道理十足,可当软件投入使用后却有可能给用户造成巨大的混乱。我知道曾经有一个大型的培训公司,花了500万美元重新设计它的订购软件系统。此前,项目编号同订购产品之间的匹配存在一定逻辑性。例如,4125可能是学生手册,4225则是配套的学生练习盘,4325可以代表教师手册,4425则是营销宣传时使用的课程大纲等。你可以在同一屏幕上订购4X25系列的所有项目。 PHR,即 Professional in Human Resources(
3、人力资源专家) ,是由美国认证协会(American Certi- fication Institute)推出的在国际范围内比较权威的人力资源管理知识体系认证资格。编者注每天,全球 140 个地方的行政助理一遍遍地反复订购同类材料,并很快记住了项目编号。一旦知道了学生手册的编号,他们无须查看就可以立即键入其他项目的编号,这样一来,订购过程十分快捷。在重新设计时,不知何故,这个项目团队居然忘记考虑实际情况下真人是如何进行订购的。新的设计方式中,项目之间没有逻辑关系。项目 6358 可能就是4125 曾经代表的学生手册,而其配套的学生练习盘现在是 8872,而同一类教师手册又是 3392。现在,不
4、仅用户不得不逐项查询并试着“忘记”旧的编号和系统,而且同类产品的不同项目也会分别出现在不同的页面上。行政助理们很愤怒。订购过程慢得就像是蜗牛在蠕动。该项目最后远远突破了它的时间和成本底线。作为项目经理,你应该尽早并经常让软件开发人员和用户交谈。2. 避免免打地鼠鼠式开发发软件项目经经理经常常面临及及早交付付产品的的巨大压压力。时时间是关关键。你你如何才才能快速速完成任任务呢?假设你你的团队队有两名名程序员员,伯尼尼和罗布布。两人人都很能能干,知知识面相相同,编编程语言言技巧也也相当。你你发现在在开发过过程中伯伯尼实现现软件功功能的速速度远远远超过罗罗布。当当伯尼着着力于快快速完成成编程时时,罗
5、布布正花时时间写代代码并对对其进行行重构。罗布布对变量量和方法法的命名名更擅长长。一旦旦写的程程序能够够运行起起来,他他就把这这个程序序分成几几小块。现现在他要要写测试试来确保保该程序序的每一一块都能能按照他他的意图图运行。当当他觉得得结果比比较满意意时才宣宣称实现现了功能能。但是是假设你你并不知知道上述述这些细细节。如如果你只只看他们们谁先宣宣称实现现了功能能,那么么很明显显伯尼表表现得更更好,对对吗?几几个星期期之后,你你向客户户演示这这些功能能。像往往常一样样,顾客客喜欢你你已经完完成的功功能,但但现在需需要你做做一些改改动和完完善。你你让软件件开发人人员修改改这些代代码。当当你把新新改
6、进的的功能带带回给客客户时,他他们试用用了罗布布实现的的功能,对对他做出出的改动动十分满满意。 重重构就是是改动代代码,完完善其内内部组成成结构而而不改变变其外部部功能。它它改进软软件产品品设计。重重构代码码是回过过头去完完善以前前仓促创创建并测测试的某某项可用用的功能能。现在在需要进进一步对对该功能能进行内内部改进进,以便便长期使使用,也也使日后后增加功功能更为为方便。遗憾的是他他们发现现伯尼实实现的功功能有些些奇怪。当当伯尼编编写好新新的功能能后,一一些以前前能使用用的功能能现在却却不能用用了。客客户把这这些作为为缺陷标标记出来来,然后后你让伯伯尼来修修改。客客户又一一次测试试这些功功能,
7、结结果后来来新增的的功能也也不能用用了。这这到底是是咋回事事呢?如如果你有有孩子,就就会知道道发生了了什么。伯伯尼创建建的是一一个打地地鼠式的的应用程程序。打打地鼠是是一种游游戏,孩孩子们拿拿着一个个木棒敲敲打几个个孔中随随意弹出出的地鼠鼠,他们们会很惊惊奇接下下来是哪哪个地鼠鼠弹出来来,而且且还乐此此不疲。然然而,在在修改应应用程序序的时候候如果总总有坏代代码不知知从何处处随意弹弹出,那那可不是是好玩的的事情。那那会令人人沮丧,结结果也难难以预料料,并且且它会减减慢产品品开发速速度。伯伯尼一开开始就全全速冲刺刺,只是是南辕北北辙了。 尽管管罗布从从一开始始就表现现得较慢慢,但实实际上他他编写
8、的的代码更更胜一筹筹。事实实证明,他他的节奏奏是可持持续发展展的。由由于最初初编写的的代码就就有较好好的质量量,所以以,他才才能更快快地做出出可行的的改动。而而且他早早期编写写的测试试能随时时带给他他反馈信信息,让让他了解解自己新新写的代代码是否否与原有有应用程程序的其其他部分分兼容。 当估估计某一一功能的的实现时时间时,不不要只考考虑最初初写代码码所花费费的时间间,还要要加上提提升、调调整和改改进这些些代码所所需的时时间。写写高质量量的代码码和测试试都需要要花时间间。从短短期来看看,这似似乎是一一种损失失,然而而它带来来的却是是长期收收获。问问问自己己,你是是想要速速度还是是想尽情情享受可可
9、持续发发展的乐乐趣。3. 一词词不慎坏坏大事哪一个词会会让你错错过最后后期限?答案是是“任何何一个词词” 。在在开发一一个将以以非英语语语言发发布的产产品时,你你将给项项目带来来许多新新的风险险和限制制。有些些风险和和限制是是技术性性的,且且显而易易见。例例如,如如果你的的产品将将投放日日本,那那么它必必须支持持适当的的字体。如如果不支支持,那那么,即即使英文文版运行行得很完完美,日日文版的的产品也也无法运运行。但但是,字字体兼容容性不受受你的控控制。你你和团队队需要特特别注意意的倒是是一些特特殊的翻翻译译法法,并在在编码前前就要考考虑到这这些因素素,确保保开发活活动遵循循有关国国际标准准,消
10、除除这类问问题。仅仅仅是转转换成其其他语言言版本也也会影响响到你何何时做何何种决定定。通常常情况下下,产品品本地化化(日语语、瑞典典语和德德语等)与与英语版版本的开开发是同同时进行行的,只只是具有有一定的的滞后。滞滞后的时时间可以以是几天天,几周周,甚至至几个月月。尽管管如此,在在某个时时间点,外外文版的的翻译必必须要“赶赶上”英英文版。在测试和审查阶段,你需要确保:英文版里的内容都可以被准确翻译过来; z翻译过来的内容同英文版是真正相符的; z翻译版产品的运行没有瑕疵。 z这里有一个问题。这三项事情可能是在英文版完成并批准后才进行测试的。在测试和审查本地化的版本时,你总会发现不止一个具有挑战
11、性的问题无法得到解决,除非回头去改变英文版产品。然而,要知知道,在在英文产产品里最最后一分分钟所做做的一个个相对简简单和低低风险的的改变,如如改写句句子(这这只需要要几秒钟钟来编码码) ,却却往往需需要好几几天时间间来运行行和重新新测试所所有本地地化的版版本。这这可能需需要额外外花费数数千美元元,尤其其是当你你正和一一家国外外的公司司签订翻翻译合约约时。经经验不足足的软件件开发项项目经理理常犯的的这个错错误很简简单。他他们就是是低估了了对英文文版进行行意外更更改所造造成的影影响有多多严重。为了预防这种情况发生,你可以采取以下两项主要措施。在进度表最后加一个“本地化缓冲区” 。 z 进度表的截止
12、日期意味着与项目计划中的英语产品相关的所有工作都必须在这个有效期限内结束。在目标结束日期之后做的任何改动,都必须符合非常具体、非常严格的标准,只有达到这个标准才可以“进入”返工队列。这个版本的任何变化都不可避免地引起其他外文版作出相应变化。把这些任务排序,让功能的质量控制和英文文本的质量审查分开来做。 z这其实很简单,甚至可以复制所有英文文本到一个电子表格里去进行校对。这样一来,如果有措辞不清楚的情况,我们就能立即发现它,而不必等到测试可运行的产品时才发现它。于是我们可以提前作出必要的改动,可能就不需要对所有其他的语言版本都进行返工了。4. 让项项目发起起人自己己写需求求项目失败并并不是只只有
13、美国国公司才才遇到的的问题。根根据几年年前一家家日本领领先 IIT杂志志社进行行的调查查,如果果按照质质量、成成本和交交付期的的标准来来衡量,日日本企业业实施的的项目中中,超过过 755% 都都被认为为是失败败的。跟跟大多数数其他国国家一样样,在日日本,项项目不能能达标的的首要原原因几乎乎总是需需求定义义太差。处处境最危危险的公公司是那那些业务务分析能能力较差差的公司司。由他他们来做做软件开开发这样样的技术术项目时时,成功功就被委委婉地归归为“不不可能发发生的”事事项。这这一结果果表明,要要发现、识识别并定定义一个个软件项项目的真真实需求求有多么么困难。既然是这样困难,很多项目所有人,如客户、
14、项目发起人或公司主管,就期望项目经理能自己定义和细化这些对软件的要求。项目所有人很少会提供指导或明确他们的需求。既然是一个软件项目,而自己可能又不懂软件开发,所以,他们认为没必要来亲自定义自己的期望。而对于软件项目经理而言,他通常没有权力或时间来自己发现、选择项目需求并排定优先级,尤其是当该项目可能涉及多个利益团体时,大家对软件完成后应实现的功能可能会有相互冲突的设想。项目经理要在项目实施前花时间与资助该项目的人交流,帮他们准确定义各自想要的功能。要能够迅速完成项目且只有少数错误,而且需要的预算尽可能地少,这难道不是最重要吗?但你又不能一箭三雕。哪些资源和技能对创建所需软件而言是至关重要的?资
15、助人是否给团队提供了这些资源?软件如何用于运行基础架构或为公司赚钱?时间期限是切实可行的吗?这些时间限制是不是被写进客户合同,是否绑定到某个重要的节假日,是否据此精心制作了一份营销计划?如果在需求定义阶段没有认真、具体地考虑这个项目要创建什么,那么,这个项目可是岌岌可危了。请记住,项目所有人需要传达的是他们想要这个软件做什么,而不是程序员将如何着手生成这一结果。说服项目所有人,他们必须自始至终参与这个过程。步调一致的需求计划可以明确地将商业意义、项目目标和项目结果联系到一起。否则,该项目不能产生他们所期待的令人满意的结果。 失败的软件项目对项目所有人伤害最大,因为是他们资助了这个项目,是他们一
16、直期待着能靠这个软件赚回投资。5. 要简简单,不不要复杂杂我的微波炉炉只需要要有一个个按钮,即即“增加加一分钟钟” 。要要烧开一一杯水喝喝咖啡,我得按下按钮三次;要融化奶酪饼干,只需轻轻点击一下;为了加热玉米粉饼,我按“增加一分钟” ,到点后过 15 秒钟再打开门。只有一个按钮的微波炉会通过产品规划委员会的认可吗?可能不会。看看我的那台微波炉上的功能选项(都是从未用过的) ,我就知道,产品规划委员会喜欢复杂而不要简单。当然,他们可能会给“复杂性”冠以“功能丰富”的头衔。没有人从一开始就树立目标:生产的产品就得极尽复杂。复杂性总是意外出现的。假设我有一块凉比萨饼需要热一下。根据制造商的说明,我应
17、该按“菜单”按钮。我现在面临的选择是“速热”和“再热” 。 (嗯,我猜应该选择“再热” ,虽然我有点饿了。速热会比再热快吗?) “饮料” 、 “面条” 、 “比萨饼” 、 “盘菜” 、 “酱”还是“汤”? (我选择“比萨饼” ,尽管它上面确实有酱并且它也放在盘中。 ) “熟食 / 新做”还是“冷冻”? (当然都不是,它只是吃剩下的外卖比萨饼。我猜应该选择“熟食 / 新做” 。 ) “一块” 、 “两块” 、 “三块”还是“四块”?我不知道这样的盘问将持续多久,所以我按取消,然后按“增加一分钟”按钮。这和软件开发有什么关系?就我而言,A 只有一个按钮,即“一键购物” 。哦,当然,我第一次访问时必
18、须输入我的地址和我的信用卡号码,但现在我只要点一下就可以实现自己的冲动购物了。软件通常要要解决复复杂的问问题。现现在的问问题是,那那种固有有的复杂杂问题中中有多少少是你强强加给最最终用户户的?你你的软件件是不是是一个复复杂问题题放大器器?成功功的软件件通常是是一个复复杂问题题吸收器器,因为为它首当当其冲地地为用户户承受了了复杂的的问题,而而不是将将这些问问题一路路传递给给用户。作为项目经理,你是复杂问题吸收器还是复杂问题放大器?最优秀的项目经理能够吸收程序员、最终用户和公司管理层等各方面抛出的复杂问题。当最终用户提出看似矛盾的需求时,你的任务就是帮助清理这些需求,而不是盲目地将这些问题传递给开
19、发人员。当开发人员由于技术原因不能实现需求时,你的任务就是翻译(吸收)这个复杂的问题,并向用户进行解释,用足够多的信息帮助用户选择另一个途径。使用你的应用程序有多容易?为应用程序添加一项新功能有多容易?对一项新功能提出要求有多容易?报告缺陷、部署新版本、回滚不良的版本又有多容易? 简单性不会偶然发生,它需要积极培育。而复杂性会因你不留意而丛生。6. 偿还还你的技技术债不管是普通通的市民民还是成成功的企企业,只只要他们们管理得得当,债债务就是是一种有有用的金金融工具具。它通通过对未未来利润润的预支支来平衡衡目前的的资金不不足。明明智地使使用短期期债务能能够有效效地消除除现金大大涨大落落。可一一旦
20、滥用用,短期期债务又又会成为为一个使使企业举举步维艰艰的沉重重枷锁。在软件开发界,为了实现那些“处于危险之中”的里程碑,同时完善大部分需要实现的工作,借用时间可谓是一种有效的策略。沃德 坎宁汉(Ward Cunningham)提出了“技术债”的概念,就是指在时间紧迫的情况下,开发人员为实现迭代目标或快到截止日期时所采取的一种方法。在那一刻,他们无力用很恰当的方式来处理代码,但采取一些捷径,他们也许能够让编写好的程序“刚刚足以”冲过终点线。即使这套软件是临时的、有缺陷的,但只要有效地管理出现的技术债,这就是一种恰当的举措。可是,如果这笔债没有得到偿还,它就会变成一个令人痛苦的越滚越大的雪球。如果
21、持续向未来借债而不偿还,那么就会令整个项目变得岌岌可危。要想还清技术债,最好的方法就是评估在每个迭代结束前发生的所有“债务” 。可以要求开发人员确定他们想要展开的临时修改具体是什么,这样做需要花费多少时间。 迭代是指由一个敏捷项目小组选择的一段较短的时期(一周、两周或一个月等) ,在此期间,该小组会开发并测试由客户挑选的一个关键需求,并将结果发送给客户以征求其同意或意见。然后,小组会开始下一个迭代,以开发下一个最重要的需求并(或)纠正前一个迭代中完成的工作。 临时修改是指对一个在运行的编程问题作快速修复或解决,但这种解决方案并不是很理想,在时间允许的情况下可能需要重新修改。修改这种不完善的代码
22、可以称为“展开修改” 。开发人员并并不需要要立刻还还清债务务,不过过,趁他他们对这这些捷径径仍然记记忆犹新新时来估估量所需需的修复复工作,当当然是不不错的。一定要发现要重写的代码有什么具体问题,而不只是随意判断所需要花费的时间。不要借机偷懒,这是一种严肃的、保持代码库干净的有效方法。另外,有越来越多的软件分析工具能自动帮助识别出现“技术债”的地方,了解代码覆盖率、分析耦合性、检测风格偏离等,这些工具或许都可以在你不知情时工作。把留下“技术债”的地方记录到问题跟踪系统,并安排在以后的迭代中解决。只要可以平衡添加新业务功能的工作量并同时还清这些债务,就有可能既满足客户的功能要求又不使这些“技术债”
23、失去控制。软件难用的原因有很多,但通常都归结到临时修改、文档不足、依赖关系不恰当、快捷方式以及偏离预期设计等问题上。当开发人员最终举手投降说他们需要在一个系统上重打锣另开张时,实际情况极有可能是,许许多多没有偿还的技术债已经使他们不堪重负,债台高筑之下,他们觉得还不如痛快地宣布这套软件破产了。只有一直坚持识别债务并迅速处理它,你才可能总是用“最低补偿”来避免接踵而至的混乱。在向业务利益相关者进行解释时,这种比喻说法可谓出奇地管用,能让他们立刻明白软件如何会随着时间的推移而变得无法控制,以及为什么应该投入力量保持代码洁净。7. 为团团队增添添人才而而非技能能我过去采用用的招聘聘标准同同我们这这个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目经理 应该 知道 97 68478
限制150内