软件开发过程管理被比作放养猫。换句话说,你不能真的做到这件事,但你可以尽你较大的努力去做。再换句话说,软件项目就像试图在 NBA 防守勒布朗·詹姆斯(LeBron James)一样。你根本就阻止不了他,较多只能希望牵制到他。
软件项目的开发管理是一门不精确的科学,这不是什么秘密。以下是我这些年来学到的 11 条真理,它们帮助我理解了,要管理软件开发项目这个奇怪的世界,我们的能力是多么的有限。
1. 估算总是错误的
无论是你花一个小时还是一年的时间来做估算,估算结果都是错误的。事情本来就是这样的。结果不一定错得大相径庭,可能只错了那么一点点,但肯定还是错的。
如果你看到一份错误报告,并认为“修复它需要一个小时”,那么几乎可以肯定的是,它不会正好需要一个小时。它可能需要 45 分钟,也可能需要 3 个小时,但正好花上一小时的可能性很小,甚至可能仅仅相差一两分钟。现在,你可能会说,“大约一个小时”。这实际上是一个更好的估算,因为具体的、精确的估算是错误的。
眼下,对于一个可能只需要一个小时的短小项目来说,这不是什么大问题。但是…
2. 项目越大,你的估算就越不准确
项目越大,估算就越不精确,尤其是在项目一开始就做的估算。就像上例那个一小时的估算,如果你将一个项目估算为一年,那么它可能需要 9 个月或者 36 个月。在某些情况下,它甚至可能需要五年时间。没有办法知道这个项目是什么时候开始的。
项目越大,“未知的未知”就越多。通常项目越大,就会有越多的人参与。也就是说,随着项目规模的增加,会有更多的变量和更多的事情发生,而这些你根本就无法预料。所有这些事情都会增加项目的时间,而这些时间你一开始就不会做到计划里,原因很明显,你并不知道它们会发生。
3.注意力和专注力是我们较宝贵也是较**的东西
在构建软件时,完成一个项目所需的较有价值的一件东西,就是团队中的开发人员以不受干扰的方式集中精力的能力。
分心的事情越少,团队的效率就越高。就是这么简单。软件开发经理的主要职责之一就是减少团队分心的次数和持续时间。
当软件开发不受干扰时,他们有很高的工作效率。当他们被打断时(无论是由于开会还是被人问问题或者其他的什么事情),他们会快速丧失工作效率。我们都知道“心流”,都知道进入并维持在“心流”状态有多困难。流动的时间就像黄金一样宝贵,应该予以保护。