重读《人月神话》(15)-祸起萧墙(Hatching a Catastrophe

embedded/2024/11/28 5:39:49/

增加更多的人手到一个已经延期的项目中往往不会加快项目的进度,反而可能使情况变得更糟。

项目进度的细微延迟往往难以察觉,但它们却能悄无声息地累积起来,最终对整个项目的完成时间造成重大影响。昨天,一位关键成员因突发疾病未能出席重要会议;今天,一场突如其来的雷暴导致公司供电系统受损,所有设备因此陷入瘫痪;而明天,由于供应商那边出现了预料之外的延误,原定用于磁盘例程测试的新硬盘无法按时到位。此外,还有不可预见的天气变化、紧急任务的插入、个人突发事件、与客户的紧急沟通需求以及管理层的临时审查——这些因素无一不在悄悄消耗着宝贵的时间资源。尽管每次看起来只是半天或一天的小耽误,但日积月累之下,整个项目的推进速度开始逐渐放缓,直到落后于最初的计划安排。

里程碑还是沉重的负担?

精心设计的里程碑实际上为团队提供了支持,使他们能够向项目经理提出合理请求;而模糊的里程碑则成为负担。

在计划中,每个关键节点被称为“里程碑”,并配有明确的时间点。选择这些时间点需要基于技术评估,并且通常依赖于过往的经验。里程碑的选择原则是:它们必须是具体、特定且可度量的事件,能够被清晰地定义。

例如,避免使用模糊表述如“编码完成90%”或“调试接近尾声”,因为这样的描述缺乏精确性。相反,应采用诸如“架构师与实现人员已签署规格说明书”、“100%源代码开发完毕并已录入磁盘库”、“所有测试用例均通过验证”等具体指标作为里程碑。这些明确的里程碑有助于区分那些界限不甚分明的阶段,比如规划、编程和调试。

清晰界定的里程碑不仅便于上级审核,更重要的是它们减少了团队成员自我欺骗的可能性。当里程碑的具体要求无法被轻易篡改时,人们更倾向于诚实报告进展状况。反之,如果里程碑含糊不清,则容易导致报告失真,因为没有人愿意主动传递坏消息。

针对大型项目的估计工作,政府承包商的研究揭示了以下几点:

  • 在活动开始前就进行初步估计,并定期(每两周)更新调整,这样即便最终情况不佳,也能保持一定的预见性。

  • 活动初期往往对所需时间过于乐观,但随着活动推进,这种乐观情绪会逐渐减少。

  • 相反,低估的情况在整个过程中变化不大,直到接近截止日期前三周左右才显现出来。

“其他的部分反正会落后”

当项目进度落后一天时,我们可能会想:“这没什么大不了的,反正其他部分也落后了。”然而,这种态度忽视了一个重要事实:每一天的滞后都可能成为潜在风险的累积。在棒球运动中,队长明白进取心对于优秀队员和团队的重要性。同样,在软件开发中,进取心也是不可或缺的。它促使团队成员追求更快、更高效的工作表现,并为应对不可预见的问题提供缓冲空间。

但是,过于乐观地看待时间安排也会带来负面影响。如果团队因为预计可以轻松赶上进度而放慢脚步,那么小问题可能会演变成大麻烦。因此,我们必须对每天的滞后保持警惕,因为它们可能是导致重大延误的前兆。

并非所有的滞后都会造成灾难性后果,但准确判断哪些偏差是关键的至关重要。这时,PERT(Program Evaluation and Review Technique)或关键路径方法就显得尤为重要。这些工具可以帮助识别哪些任务处于关键路径上,以及它们的延迟将如何影响整个项目的完成日期。此外,它们还能指出一个非关键任务可以在不影响最终期限的情况下允许的最大滞后时间。

尽管PERT技术要求对每个事件进行三次估计,以考虑不同可能性下的完成时间,但这额外的工作量是为了获得更加精确的计划。实际上,准备PERT图的过程——包括展开网络结构、确定任务依赖关系、评估各个任务链——本身就是一项极具价值的工作。第一份PERT图可能会让人感到有些畏惧,但通过不断努力和完善,我们可以制作出更加实用的图表。

随着项目的推进,PERT图能够帮助我们回答诸如“其他部分反正会落后”的借口。它不仅显示了为了使某项工作远离关键路径需要提前多少时间,还提供了补偿其他部分失去时间的方法。这样,我们就能够更好地管理项目进度,避免由于个别任务的滞后而导致整体项目的延误。

地毯的下面

当一线经理发现团队的工作偏离了原定计划时,他通常不会立即向上级报告这一情况。经理们往往倾向于自己解决这些问题,避免给高层带来额外的烦恼。从某个角度来看,这似乎是一个合理的做法,因为处理这类问题是他们的职责所在。然而,这种做法却隐藏了一个潜在的问题:所有的问题都被掩盖在地毯之下,而没有得到及时的曝光。

实际上,老板需要两类信息:一类是关于需要采取行动的具体问题;另一类是用来分析项目状态的数据。为了有效地管理项目,老板必须对所有开发队伍的情况有全面的了解。但要获取这些真实的状态信息并不容易,因为一线经理和老板之间存在利益冲突。经理可能担心如果汇报了问题,会导致上级介入,从而削弱自己的权威或打乱现有的安排。因此,只要经理认为自己能够独立解决问题,他就不太愿意向老板透露问题的存在。

为了解决这个问题,有两种方法可以揭开地毯下的污垢:

  1. 减少角色冲突,鼓励透明度:

    • 老板需要明确区分需要立即采取行动的信息和仅用于分析的状态信息。

    • 他们应该控制住自己不对每个问题都做出反应,尤其是在审查状态报告时不应直接干预。

    • 通过这种方式,项目经理会逐渐感到放心,开始提供更加真实的评估结果。

    • 此外,将会议明确标记为状态检查或问题-行动会议,并且保持相应的行为规范,可以帮助建立一个更健康的沟通环境。

  2. 强制性的状态评审机制:

    • 即使是在合作良好的情况下,也需要有一个可靠的系统来揭示项目的实际状态。

    • PERT图和频繁设立里程碑是这种评审的基础。

    • 对于大型项目,可能需要每周对部分工作进行评审,大约每个月进行一次整体评审。

    • 关键文档如里程碑进度和实际完成情况的报告,对于识别潜在问题至关重要。

    • 例如,在一次会议上,报告指出手册批准时间与产品测试开始时间存在冲突,这就需要产品构件经理准备解释延迟原因、预计结束时间以及所需的任何支持措施。

通过这两种方法的结合使用,可以确保管理层及时获得准确的信息,从而促进更有效的决策制定和项目管理。这样的透明度不仅有助于解决问题,还能增强团队之间的信任和协作。


http://www.ppmy.cn/embedded/141106.html

相关文章

mysql函数、查询、排序场景使用

1. 查询第二高薪资: 知识点: **IFNULL(XX,null)**函数:如不不存在则展示null; order by XX DESC :降序; distinct :去重; limit XX offset YY: 每页展示XX条&#xff0c…

【RISC-V CPU debug 专栏 3 -- Debugging RISC-V Cores】

文章目录 RISC-V 调试规范开源与多样性挑战调试规范的重要性外部调试支持的主要组件调试功能Lauterbach 的贡献RISC-V 调试规范 调试 RISC-V 内核涉及许多独特的挑战,这是由 RISC-V 的开源特性和多样化的生态系统所决定的。为了避免专有调试接口的泛滥,RISC-V 基金会内的工作…

Apache SeaTunnel 自定义连接器适配华为大数据平台集成组件ClickHouse

技术背景 Apache SeaTunnel 作为一款开源的数据集成框架,支持多种数源的集成。根据我司的业务场景,需要将每日的流水数据从MySQL按日期归档到ClickHouse中。 用户可以通过ClickHouse实现在线分析处理查询(OLAP)和分析数据报告生…

什么是 C++ 中的函数对象?函数对象与普通函数有什么区别?如何定义和使用函数对象?

1) 什么是 C 中的函数对象?它有什么特点? 在 C 中,函数对象(也称为仿函数或 functor)是一种重载了 operator() 的对象。这意味着这些对象可以像函数一样被调用。函数对象通常用于需要传递行为(即代码&…

数据结构------树(Java语言描述)

一、树的基本概念 树是一种非线性的数据结构,它由节点组成,有一个特定的节点称为根节点,其余节点可以分为多个互不相交的子树。 树中的节点具有以下特点: 1.每个节点有零个或多个子节点。 2.除了根节点外,每个节点…

SQL99版链接查询语法

连接查询按照功能分类 内连接 等值连接 非等值连接 自连接 //92SQL 外连接: //红色的连接查询类型92版SQL 左外连接 右外连接 全外连接 交叉连接 #剩下连接类型的SQL语法就不是前面同一个发布版本了 99版SQL语法格式区别于92版的是连接不在是用“”了&am…

平安科技Java面试题及参考答案

多个线程 a++,单个线程不管别的线程怎么改变 a 的值,只管自己的 a 的值,但是只有一个对象 在 Java 中,当多个线程对同一个对象的共享变量 a 进行 a++ 操作时,如果不进行适当的同步处理,就会出现数据不一致的问题。因为 a++ 操作并非原子操作,它实际上包含了读取 a 的值、…

爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具

第三节:使用Postman和浏览器开发者工具 在网络爬虫开发过程中,我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具(特别是Network面板和Console面板)是两种最常用的工具,能够帮助开发者有效地捕…