“这个网站很简单,你需要做的就是完成X, Y, z。你应该擅长技术,所以我确信你不需要花费太多时间来构建它。”
我经常收到这封邮件。写这些邮件的人几乎总是不熟练,或者正在研究他们的第一个产品。起初,当我听到这样的人,我总是很生气。他们在和谁讨论软件开发所需的时间?但后来我意识到,即使我不得不花很多时间在自己的项目上,我也没有办法。如果我自己做不到,为什么我要对那些人生气呢?
真正让我沮丧的不是他们所犯的错误。问题是他们认为他们可以做出正确的估计。作为一个开发人员,我们经常发现一个外行可以很容易地评估软件开发中一个问题的复杂性。
这不是我们愤怒的借口。但这又提出了另一个有趣的问题:为什么我们天生的预测复杂性的能力在编程问题上失败了?
为了回答这个问题,让我们来看看我们的大脑是如何估计事物的。有些事情对于一些没有经验的人来说是很容易预测的,但有些事情则不然。
当一个非技术人员试图评估软件开发时间时,有两个基本的视觉指标帮助他们:体积作为复杂度的指示器和速度指示器的复杂度。但是他们没有意识到软件和他们想象的不同。软件在本质上不是材料。没有体积,没有速度。它的微小部件偶尔会在电脑屏幕上闪现。正因为如此,当面对web应用程序(或任何类型的软件)的开发时,我们的基本直觉就会失败。
第一点,速度,显然是不可能的外行人评估软件。自然,他们倾向于使用数量指标来评估。要么是描述文档的页面数量,要么是软件的数量或数量。
有时它工作!当面对一个静态网站时,没有特定的设计要求,人们很容易通过这种方式来估计开发时间。但是,总的来说,对于软件开发来说,容量并不反映实际性能的复杂性。
不幸的是,评估软件复杂性的唯一有效方法是基于经验。而不是总是。作为一名程序员,我知道,基于我之前开发的相似特性,我可以估算出这些特性的开发时间。然后,我把总时间加起来,这给了我完成整个项目的大致时间。然而,事实上,每个项目在开发过程中遇到了两个或三个瓶颈。这些瓶颈会消耗大量程序员的时间,在遇到它们之前,您不会期望它们。他们拖延了整个项目,拖延了几个星期甚至几个月。
这些都是没有经验的人,他们在评估复杂性时并不理解。他们不知道如何处理其他事情,也不知道为什么他们不从事软件开发。所以下次当你听到有人说,“我想你可以在几天内开发它”,无论谁说,不要沮丧。深呼吸,告诉他该做什么。
