软件开发管理的11条真理

标签: 软件开发 管理 真理 | 发表时间:2021-03-07 16:06 | 作者:Nick Hodges
出处:https://www.infoq.cn

软件开发过程管理被比作放养猫。换句话说,你不能真的做到这件事,但你可以尽你最大的努力去做。再换句话说,软件项目就像试图在NBA防守勒布朗·詹姆斯(LeBron James)一样。你根本就阻止不了他,最多只能希望牵制到他。

 

软件项目的开发管理是一门不精确的科学,这不是什么秘密。以下是我这些年来学到的11条真理,它们帮助我理解了,要管理软件开发项目这个奇怪的世界,我们的能力是多么的有限。

1. 估算总是错误的

无论是你花一个小时还是一年的时间来做估算,估算结果都是错误的。事情本来就是这样的。结果不一定错得大相径庭,可能只错了那么一点点,但肯定还是错的。

如果你看到一份错误报告,并认为“修复它需要一个小时”,那么几乎可以肯定的是,它不会正好需要一个小时。它可能需要45分钟,也可能需要3个小时,但正好花上一小时的可能性很小,甚至可能仅仅相差一两分钟。现在,你可能会说,“大约一个小时”。这实际上是一个更好的估算,因为具体的、精确的估算是错误的。

眼下,对于一个可能只需要一个小时的短小项目来说,这不是什么大问题。但是…

2. 项目越大,你的估算就越不准确

项目越大,估算就越不精确,尤其是在项目一开始就做的估算。就像上例那个一小时的估算,如果你将一个项目估算为一年,那么它可能需要9个月或者36个月。在某些情况下,它甚至可能需要五年时间。没有办法知道这个项目是什么时候开始的。

项目越大,“未知的未知”就越多。通常项目越大,就会有越多的人参与。也就是说,随着项目规模的增加,会有更多的变量和更多的事情发生,而这些你根本就无法预料。所有这些事情都会增加项目的时间,而这些时间你一开始就不会做到计划里,原因很明显,你并不知道它们会发生。

3.注意力和专注力是我们最宝贵也是最稀缺的东西

在构建软件时,完成一个项目所需的最有价值的一件东西,就是团队中的开发人员以不受干扰的方式集中精力的能力。

分心的事情越少,团队的效率就越高。就是这么简单。软件开发经理的主要职责之一就是减少团队分心的次数和持续时间。

当软件开发人员不受干扰时,他们有很高的工作效率。当他们被打断时(无论是由于开会还是被人问问题或者其他的什么事情),他们会快速丧失工作效率。我们都知道“心流”,都知道进入并维持在“心流”状态有多困难。流动的时间就像黄金一样宝贵,应该予以保护。

4. 霍夫斯塔德定律是真理

霍夫施塔特定律是这么说的:

“即使你考虑到了霍夫施塔特定律,项目的实际完成时间也总是比预期的要长。”——维基百科( https://en.wikipedia.org/wiki/Hofstadter%27s_law")

这与估算有关,但值得注意的是这句格言的妙处。你可以虚报你的估算,因为你认为这样可以为你赢得完成任务的时间。你可以添加额外的因素,将“未知的未知因素”做到计划里,并增加你的估算,从而考虑到实际将比你认为的时间更长,但是最终,实际上完成一个项目仍然会比你认为的实际上更长的时间要更长。

5. 你不能加快软件开发,你只能限制其减慢的程度

这条真理对于一些管理者来说真的很难理解。软件需要多久就需要多久。没有办法让它更快。你可以要求团队投入更多的时间。你可以挥起鞭子、拿起大棒。你可以乞求、哄骗、恳求开发人员。你可以说,“但是,这应该只需要三个月啊!”但最后从长远来看,你无法提高软件开发团队的速度。

如果你开始意识到霍夫斯塔德定律的正确性并认为“我能让这些人工作得更快”那么你就错了。你所能做的就是减少他们的干扰,让他们自主工作,从而防止他们降低工作速度。这个区别很微妙,但却很重要。

6. 你只能在非常短的时间内出现赤字

同样地,你可以要求团队投入更多的时间,熬夜、周末加班,以及种种“鞭笞”的手段,你可能会从中获得一些(非常)短期的收益。

但如果你试图让它成为一种常态,如果你试图让团队的引擎始终在RPM的红线上运行,它就会被烧坏。很快,你就会看到收益递减。人,就像赛车上的引擎一样,不能长时间承受过多压力,否则就会出现故障。

7. 大脑时间比屁股时间更重要

没有什么比要求工作时长更能降低生产力了(例如,你的开发人员要连续几个小时坐在椅子上)。你可以度量工作时长,感觉得到了一个能够真正显示出人们工作效率的指标。但是这样做就错了。要求工作时长只会使团队士气低落,因为他们实际上是想把时间花在思考上。

大脑时间才是最重要的。你这样想:假设你是一位经理,对于你来说最重要的是看到团队坐在电脑前“工作”。你在办公室里走来走去,看着那些开发人员坐在椅子上敲击着键盘。真是一番繁荣景象。

但之后你偶然发现一些开发人员只是坐在那里盯着屏幕。就是这样傻坐着,他们只是坐在那里傻看。搞什么鬼!大概半个小时,他们什么都没做!

但是,他们确实是在工作。他们正在思考。他们在用大脑思考解决一个非常困难的问题。也许他们甚至会站起来,在办公室里转上一圈。最后,他们坐下来,写下11行代码,并将用户故事标记为完成。

他们符合你的“屁股时间”标准吗?不符合。他们是否为一个非常困难的问题想出了一个巧妙的解决方案?是的。

屁股时间证明不了什么。大脑时间意味着一切。

8. 硬件比开发人员的时间更便宜,而且要便宜得多

开发人员其实很贵的。要吸引顶尖人才,你就得支付有竞争力的薪水。他们每一个小时的时间都不便宜。尽管如此,许多公司并没有意识到开发人员这一个小时的时间具有极高的价值,舍不得为团队提供硬件。

还是算了吧,电脑很贵的!额外的内存会让硬件预算超标的!

好吧,可能是会超出预算,但那是因为你的预算有问题!

现在我们来算一笔账:假设你每年付给每名开发人员10万美元,或者每小时大约50美元。假设他们每天花一个小时等待编译器完成工作。然后,假设你可以为开发人员的机器添加一些内存和更快的处理器,将等待编译的时间减少到每天45分钟。那么一名开发人员每天就能节省15分钟。以一年200天计算,也就是总计50个小时。按每小时50美元计算,每名开发人员每年可节省2500美元。如果速度更快的机器的增量成本是500美元,结果如何呢?

我们来算一下。如果你有20个开发人员,那么用更快的机器反而会为你节省4万美元的投资。口算应该就能算得出来。

这只是为了减少编译时间的等待。另外,做其他事情的速度也都会更快。

如果你的预算不允许更快的机器,那么就需要调整你的预算。

9. 你不能度量软件开发人员的生产力

就这一主题我曾写过 一篇文章"。

可以这么说,试图以一种客观的方式衡量开发人员的生产力是徒劳的,根本就不应该这样做。有一些方法可以从主观上度量生产力,但这些方法需要经验和良好的判断。这些能力都很难得到,一旦拥有它们,就能为你带来非常宝贵的价值。

10. 如果你没有读过《人件》,那么你就不是一个真正的软件开发经理

在我看来,只有一本书能教你如何管理软件开发人员:那就是由 Tom DeMarco和Timothy Lister一起编写的《人件" "(一定要选择第三版……)。

这本书非常优秀,见解深刻,一针见血,条理清晰,毫无保留。这本书里面充满了管理软件项目和软件开发人员的智慧。它是永恒的经典之作。

快快找来读一读吧!

11. 质量是一种认知,而不是缺陷数量

这一点真的让人很难接受。

基本前提是:你的缺陷管理工具中的缺陷已经趋近于零,而人们却仍然可以认为你的软件有缺陷。你的缺陷管理工具中可能有大量的缺陷,而人们却可以认为你的软件像磐石一样坚固。缺陷管理工具中的缺陷数量与软件质量之间没有关系。

在此,我并不是说你不应该尝试减少你的缺陷数量,而是恰恰相反。但是最终,你的软件只有在你的客户认为它质量够高的时候才可以说它是高质量的,而你的缺陷数量不一定能说明这一点。很奇怪,是吧?

当我们谈到这个话题时,“高”的缺陷数量意味着什么?如果你的代码库有100,000行代码,“高”的定义是什么?那么500万行代码呢?谁说的?

结论

即使在最好的情况下,让一个软件项目在短跑道上安全着陆也是一个具有挑战性和困难的命题。在这个过程中,再加上一些模棱两可,再加上一些随时可能出错的定时炸弹,成功才是奇迹。

诀窍在于接受和理解这些模棱两可,并与之和谐相处,而不是与之对抗。接受这11条真理将有助于解决这一问题。

原文链接:

11 Things I’ve Learned About Software Development Management"

 

译者简介:

冬雨,小小技术宅一枚,从事研发过程改进及质量改进方面的工作,关注编程、软件工程、敏捷、DevOps、云计算等领域,非常乐意将国外新鲜的IT资讯和深度技术文章翻译分享给大家,已翻译出版《深入敏捷测试》、《持续交付实战》。

相关 [软件开发 管理 真理] 推荐:

软件开发管理的11条真理

- - InfoQ推荐
软件开发过程管理被比作放养猫. 换句话说,你不能真的做到这件事,但你可以尽你最大的努力去做. 再换句话说,软件项目就像试图在NBA防守勒布朗·詹姆斯(LeBron James)一样. 你根本就阻止不了他,最多只能希望牵制到他. 软件项目的开发管理是一门不精确的科学,这不是什么秘密. 以下是我这些年来学到的11条真理,它们帮助我理解了,要管理软件开发项目这个奇怪的世界,我们的能力是多么的有限.

Linus Torvalds在软件开发管理上的教训

- Johnny - 译言-电脑/网络/数码科技
Linus Torvalds在软件开发管理上的教训. 如果有谁知道管理软件开发项目的欢乐和悲伤,那么他一定是Linus Torvalds,作为世界上最流行的开源软件——Linux操作系统的创建者,Torvalds已经管理着成千上万的开发着来提高这个开源操作系统超过20个年头了,他和我将坐下来谈谈那些在管理大型分布式编程团队的有效技巧,当然也包含那些不起作用的所谓技巧.

Linus Torvalds的软件开发管理经验

- hr6r - Solidot
没有人比Linus Torvald更了解软件开发项目管理中的酸甜苦辣了. 作为Linux的作者,Torvalds在过去二十年指导了数以千计的开发者共同改进开源操作系统内核. Linus Torvalds在采访中分享了他在软件管理方面的宝贵经验. 他说,首先你要假设一个人独立完成项目该从何处着手,然后请求他人提供意见,询问自己该怎么做的建议,而不是问他们如何去做.

谈软件开发项目管理之需求变更(转)

- - CSDN博客研发管理推荐文章
在软件开发过程中需求的变更会给开发带来不确定性,但只要把需求变更作为重点、难点小心加以控制,软件开发的进度、成本和质量也就有了"安全"的基础. 变化并不是人们最害怕的,最怕的是跟不上变化的步伐. 需求变更是因为需求发生变化. 根据软件工程思想,需求说明书一般要经过论证,如果在需求说明书经过论证以后,需要在原有需求基础上追加和补充新的需求或对原有需求进行修改和削减,均属于需求变更.

是谁动了程序员的尊严续-也谈谈软件开发团队的管理

- ooxx - 博客园-首页原创精华区
 其实质是对一些遭受挫折的程序员的勉励,对热爱技术的肯定,以及小部分对以前疯狂追求技术状态的缅怀. 居然在回复里有小部分人拿管理手段和管理艺术说事,弦哥想说的是本质上无所谓有什么管理,核心或中层人员往往目标明确,很大程度上是自我管理,底层人员其实只需要扔几个管理工具即可,不起决定性作用. 打个比方:你第一个次和MM开房,装13的人会告诉你那是艺术,需要很多技巧和花招,弦哥只会笑而不语,临走前告诉你:“跟随你的心...”.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

软件开发的“三重门”

- - 酷壳 - CoolShell.cn
自从上次写了“ 程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了. 而春节前有人问我,是做底层技术,还是做业务. 这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章.

软件开发的人文关怀

- - 博客园_知识库
  几年前,我从温伯格的《技术领导之路》中学到一点:技术人员往往更喜欢和机器打交道,因为他们“认为”自己更适合和机器打交道;但是,优秀的技术人员必须(也必然)具备好的沟通能力. 所以,温伯格鼓励各位技术人员多加练习和其他人打交道的能力. 温伯格的这个观点我是非常赞成的,好的技术人员一定需要“勇敢”面对他人,不能被“自实现的预言”局限在机器的世界里.

软件吞噬软件开发

- - PingWest中文网
软件蚕食世界,自互联网特别是移动互联网连接线上线下服务后,已成为不可逆的趋势. 每一项实用的服务可以由小团队来完成. 以WhatsApp为例,这款被高调收购的IM应用,拥有4.5亿月活跃用户,70%的日活跃率,至今还保持每天新增用户1000万的速度. 但这些服务居然由32名工程师支撑下来了,所以有了业界八卦“每位员工价值20亿”的说法.

软件开发中的两种态度

- - 外刊IT评论网
一种态度认为,应该对程序员在软件开发中的行为进行约束( DirectingAttitude). 持这种态度的人认为大部分的程序员水平都不高(谣传说有50%的人低于平均水平),所以应该对他们所做的事情进行管教约束. 要防止他们做一些可能会给他们正在开发的系统带来危害的事情. 通常,这种态度体现在一些系统设计和工具中时,你会发现它们会试图阻止程序员去做某些事情,限制程序员的一些做法,以此避免他们陷入过于复杂的境况.