微软研发致胜策略 05:进度狂

news2024/12/24 8:36:58

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案,强调团队合作、项目管理和开发流程的优化。该书成为软件开发和项目管理领域的经典著作,受到了广泛的认可和赞誉。


不记录,等于没读。


在大多数公司中,开发团队需要保持一个进度表,以便公司其他部门能够协调他们的工作。至少营销团队需要了解他们应该在什么时候开始推广产品。尽管进度表对于协调各产品团队的工作非常重要,但如果制定和使用进度表缺乏合理性,它们可能对开发产生毁灭性的影响。一个不切实际的进度表可能会打击团队士气,并最终导致生产力下降。一个仅仅过于激进的进度表可能会导致“进度狂”,即程序员为了短期内满足进度而采取捷径,从而危及产品的长期质量。进度计划应该设定在既具挑战性又切实可行的范围内,以保持项目的快速推进,但如果过于激进,程序员可能会做出愚蠢的决策,比如牺牲充分测试时间以迎合进度要求。通过使用“里程碑进度计划”,领导者不仅可以更好地与其他团队协调,还可以使项目更加激动人心,并促进创造性的工作,使团队以惊人的速度产出高质量的代码。

微软在开发 Excel 时以进度为最高优先级,每个人都在疯狂地赶进度。他们被迫忽略 BUG,直到所有功能都实现后再集中处理 BUG。 开发人员承受了很大的进度压力,为了进度不得不放弃产品质量。在当时并没有发现明显的问题,直到几年后,微软才尝到过度重视进度的可怕后果。

  • 伤害士气:每时每刻都在收到进度落后的信息和压力,进度实在是太被过分强调了,以至于我们做了多少了不起的事情,都没有半点成就感。我们被那种落后的威胁淹没了,再怎么努力,也看不到工作有任何进展。这不是工作本身的问题,实在是那种绝望的无力感所致。我们用尽全力,我们仍然不断地落后,而且从来没办法把进度补回来。事实上,进度表定的太不实际了。
  • 牺牲质量:进度表太不实际,不太可能完成,组员为了赶进度就开始牺牲质量。时间实在太少,程序就只好不测了,只要编译通过,第一次执行没有错误,就算完成了,然后继续赶下一个功能。

没有人相信日程表可以把所有的事情都算到、算准,但是就有人(尤其是高层管理者)要把“预估的完成日期”当成“一定要完成的日期”。

日程表必须有点激进,让程序设计师有一种紧迫感,迫使他们把注意力集中在最重要的事情上。但如果日程是如登天般不可能完成的任务,那就只会打击组员的士气。

在项目刚开始的时候有一些基础工作不能忽略:设定明确的目标和优先级,预先思考设计上和开发上的问题并设法预防,建立测试计划,设定质量指标,这些工作在日后可以节省很多时间。

将大的计划划分为具有阶段性产出的小项目,每次完成一个阶段,都会鼓舞组内成员。开发 Excel 时,进度表规划了 2 年的功能,成功也是在 2 年后检验。对于完成日期在两年之后的项目,你会有时间紧迫的感觉吗?老实说,没有,直到期限将至的几个月前, 你才开始觉得火烧眉毛。

注:在作者写这本书的时候(1994年),软件开发流程“瀑布模式”,会事先规划好所有一切。从 2000 年开始,人们就意识到在这种方法不合理,因此提出了迭代、增量、敏捷模式,推崇先实现最有价值的功能,每次实现一个功能并立即将它们集成到系统。

人们常常忘记一点:日程表上的完成期限是推估出来的,这个期限未必最符合成本效益,事实上也未必合理, 因为工作项目都是估计出来的,不能代表实质的工作项目。因此日程表上的完成期限并不是真正的完成日期。大部分的上级主管都不会乐意听到这些,但这却是千真万确的事实。使用阶段性的小项目可以让事实更接近理想,但也不是完美的做法。

身为主管,你一定要时常提醒组员:产品的质量远比遵守期限重要。请牢记本章所提供的经验教训:

最会误导项目发展、伤害产品质量的事情就是过分重视进度,这不仅打击人员士气,还会迫使组员做愚蠢的决策。

要点

如果项目进度表不切实际,并导致团队成员牺牲质量以便赶上无理的截止日期,则该进度表可能对项目产生破坏性影响。如果你创建了一个难以实现的进度表,只是为了从团队成员身上获得尽可能多的加班时间,那么这将打击团队的士气。一旦团队成员感到自己处于绝境,他们永远无法进入最佳状态。等到项目结束(可能会快些),他们就会另谋高就。

将项目分割成数个小项目,有各自的阶段性目标,这种做法可以让团队成员更加投入,并营造出“赢”的气氛,让团队成员感受到项目进展的鼓舞。理想的小项目期限大约是两个月,给组员适当的急迫感,促使他们积极地工作,特别是当小项目有个明显又令人振奋的主题时。试着把小项目设计的令人兴奋又期待,使小组在完成后有种自豪的成就感。随着一个又一个的小项目完成,小组会有越来越强的信念,相信自己的工作是非常重要的。

注:现代的项目管理推荐更短的进度安排,团队只安排最初1~2 周的工作。因为无法预测到几周之后的状况,因此只能安排这么多。这没关系,可以使用波浪式的规划方式,以迭代方式产生日程安排。项目经理无需人们提供太多没有事实依据、凭空想象的细节。






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1937417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费视频批量横转竖

简介 视频处理器 v1.3 是一款由是貔貅呀开发的视频编辑和处理工具,提供高效便捷的视频批量横转竖,主要功能: 导入与删除文件:轻松导入多个视频文件,删除不必要的文件。暂停与继续处理:随时暂停和继续处理。…

大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBaseRedis (正在更新) 章节内容 上一…

python中的数据类型-适合新手-比较完善(写了好久……)

作者的话 首先,我先申明,以下思路仅为个人理解,如有不同,望指导,谢谢。 数据类型它是什么,有什么用,怎么用就是它的全部内容,知识框架串联起来之后就是这三部分内容,没有…

【网络安全科普】勒索病毒 防护指南

勒索病毒简介 勒索病毒是一种恶意软件,也称为勒索软件(Ransomware),其主要目的是在感染计算机后加密用户文件,并要求用户支付赎金以获取解密密钥。这种类型的恶意软件通常通过电子邮件附件、恶意链接、下载的软件或漏洞…

数论基础知识

整除 辗转相除法 同余 模计算机 一次同余方程 费马小定理|欧拉定理|威尔逊定理 孙子定理(中国剩余定理) 快速指数算法(快速模乘法)(反复平方乘) 模重复平方法 二次剩余 Legendre符号欧拉判别法 原根 gc…

golang 解压带密码的zip包

目录 Zip文件详解ZIP 文件格式主要特性常用算法Zip格式结构图总览Zip文件结构详解数据区本地文件头文件数据文件描述 中央目录记录区(核心目录记录区 )中央目录记录尾部区 压缩包解压过程方式1 通过解析中央目录区来解压方式2 通过读取本地文件头来解压两…

JVM常用工具中jmap实现手动进行堆转储(heap dump文件)并使用MAT(Memory Analyzer Tool)进行堆分析-内存消耗分析

场景 JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用: JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用_jvm分析工具-CSDN博客 上面讲了jmap的简单使用。 下面记录其常用功能,实现堆…

C#+layui+echarts实现动态生成折线图

概要 C#layuiecharts实现动态生成折线图 整体架构流程 后端是c#语言编写的业务流程,前端是layui和echarts 技术细节 1.先看echarts折线图需要什么样子的数据,在想后端怎么处理 2.后端代码 List<ValveTempData> list new List<ValveTempData>(); string …

Spring Cloud中怎么使用Resilience4j RateLimiter对接口进行限流

在微服务架构中&#xff0c;限流是保护系统稳定性的重要手段之一。限流可以防止某个服务因流量过大而过载&#xff0c;影响整个系统的稳定性和性能。Resilience4j 提供了多种限流策略&#xff0c;其中 RateLimiter 是一种常用的限流机制。本文将详细介绍如何在 Spring Cloud 项…

组内第一次会议

会议内容 1、科研平台使用 增删改查对文件 cp -r /root/mmdetection/dataset/ /root/user/wbzExperiment/mmdetection/ rm -r /root/user/yolov5-master tar -czvf test03.tar.gz test03/ unzip abc.zip 上传文件、解压文件&#xff1a;要在自己的目录中&#xff0c;进入…

普中51单片机:LED点阵屏组成结构及实现方法详解(九)

文章目录 引言什么是LED点阵屏&#xff1f;工作原理74HC595移位寄存器基本引脚作用级联工作原理 电路图代码演示——16*16LED点阵屏轮播点亮每行LED代码演示——显示数字0代码演示——16*16游动字幕显示 引言 LED点阵屏作为一种广泛应用于现代显示技术的设备&#xff0c;因其能…

Linux_线程的使用

目录 1、线程与进程的关系 2、线程的优缺点 3、创建线程 4、查看启动的线程 5、验证线程是共享地址空间的 6、pthread_create的重要形参 6.1 线程id 6.2 线程实参 7、线程等待 8、线程退出 9、线程取消 10、线程tcb 10.1 线程栈 11、创建多线程 12、__th…

学生信息管理系统设计

学生信息管理系统的设计是一个综合性的项目&#xff0c;涉及到数据的存储、检索、更新和删除等基本操作&#xff0c;同时也需要考虑系统的易用性、安全性和扩展性。以下是一些关键步骤和要素&#xff0c;用于指导设计这样一个系统&#xff1a; 1. 需求分析 目标用户&#xff…

wls2下的centos使用桥接模式连接宿主机网络独立静态ip

前提&#xff1a;wsl2已安装&#xff0c;可正常更新 1.在控制面板中&#xff0c;打开开启或关闭windows功能&#xff0c;将里面的 Hyper-V功能打开&#xff0c;此处涉及重启 2. 按一下win键&#xff0c;输入hy&#xff0c;上面可以看到Hyper-V Manager,点进去 3.选择右边的 Vi…

Redis系列命令更新--Redis有序集合命令

Redis有序集合&#xff08;sorted set&#xff09; &#xff08;1&#xff09;说明&#xff1a; A、Redis有序集合和集合一样也是string类型元素的集合&#xff0c;且不允许重复的成员&#xff1b;不同的是每个元素都会关联一个double类型的分数&#xff1b;redis正式通过分数…

Java语言程序设计——篇五(1)

数组 概述数组定义实例展示实战演练 二维数组定义数组元素的使用数组初始化器实战演练&#xff1a;矩阵计算 &#x1f4ab;不规则二维数组实战演练&#xff1a;杨辉三角形 概述 ⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的&#xff0c;它们在内存中按照这个先后顺…

【ProtoBuf】通讯录实现(网络版)

Protobuf 还常用于通讯协议、服务端数据交换场景。那么在这个示例中&#xff0c;我们将实现一个网络版本的通讯录&#xff0c;模拟实现客户端与服务端的交互&#xff0c;通过 Protobuf 来实现各端之间的协议序列化。 需求如下&#xff1a; 客户端可以选择对通讯录进行以下操…

电脑文件恢复哪个好?分享四个建议记住常备的方法!

当我们发现电脑误删文件的时候&#xff0c;一定会感到焦虑和困惑&#xff0c;但是一味地焦虑和困惑是没有任何帮助的。我们需要保持冷静&#xff0c;然后通过以下几个方法找回。 电脑文件恢复的方法有很多&#xff0c;选对适合自己的数据恢复软件很重要&#xff0c;本文罗列了几…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%&#xff0c;其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放&#xff0c;并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

Linux——五种IO模型

目录 一、I/O的理解 二、五种IO模型 1.阻塞式IO 2.非阻塞式IO 3.信号驱动IO 4.多路复用IO 5.异步IO 一、I/O的理解 I/O的本质就是输入输出&#xff0c;C语言的stdio&#xff0c;C的iostream&#xff0c;添加了这两个库&#xff0c;我们才能够进行printf、scanf、cin、c…