it-swarm.cn

让非程序员了解开发过程

当为一家主要不是编程公司的公司开始一个项目时,人们的期望之一是最后会有一个成品,其中没有任何错误,并且可以立即完成所需的一切。但是,这种情况很少发生。

有什么方法可以管理期望并向非程序员说明软件开发与其他类型的产品开发有何不同?

66
user8

如今,几乎每个拥有计算机的人都遇到过“错误”的概念,因此您可以从这里开始。 “应用程序失败的最烦人的方式是什么?将其乘以十,如果我们不投入足够的资源进行测试和维护,您将获得用户的体验。”

并且不要低估与非程序员建立良好工作关系的价值。如果您可以确定自己的判断是可以信任的,那么当您发出警报时,即使您不做Y pronto,X也会失败,即使他们不完全理解您的理由,他们也会认真对待您。

34
BlairHippo

我发现成功的一种方法是:

我们都知道,一台计算机只能准确地执行其操作。

编程是我们告诉计算机现在我们要做什么的方式之后

这意味着您的行为方式now是由于编写了计算机上正在运行的任何代码的每个人的共同意图。当考虑到操作系统,驱动程序,编程环境,库等的复杂性时,很容易看出,在大多数系统中,必须有超过2万人参与其中,并且可能超过10万人。

每个人编写的代码反映了他们自己的理解,动机,意图和能力。鉴于系统的完美运行需要由这20k人编写的代码的all进行交互而不会出现错误-代码的all必须就代码的含义和解释达成一致。必需的行为,令人惊讶的事实不是我们有错误,而是我们很少。

28
Bevan

海事组织(IMO),我发现敏捷过程(例如Scrum,Crystal等)提供的透明度在向普通利益相关者展示开发方式方面大有帮助。

12
Brandon

用隐喻来解释是一个泄漏的抽象,但是以下一些想法经常对我有用:

请注意,这些解释都不能作为草率工作的借口。

可以将计算机程序视为机器,其中每个变量都是运动的一部分。这甚至使琐碎的程序也变成了由数百个运动部件组成的机器。

当失败时,我会回到一个事实,即虽然可以从数学上证明程序没有错误,但是这会花费大量时间,因此不值得付出努力。

最后,我问英特尔和微软是否无法避免错误,他们对我们的期望如何?

3
KevDog

我已经回答了类似的问题 更详细 ,但是要点是,“编程就像建造工厂或装配线一样。”

2
Huperniketes

您可以将其与他们可以看到的东西进行比较,如果可能,请每天使用。

例如,汽车。汽车起步时的精简度和可靠性不如我们今天。虽然汽车制造已有100多年的历史,但软件的使用寿命可能只有其一半左右。可提供具有重大定制功能的汽车,其中一些已包含在价格中(例如颜色选择),其他一些(例如发动机尺寸,变速箱类型,车轮/轮胎,装饰水平)是重要的成本驱动因素。

汽车和软件有许多功能,质量和成本驱动因素。然后,您可以讨论软件技术,专业知识的可用性,甚至可能是在何处构建的,都将有很大的不同。适当的开发周期(例如,每年进行小幅更改的模型,大约每三年进行一次车身/引擎/平台更改)是由客户需求和复杂的设计过程共同驱动的。有些产品看起来小巧而笨拙(例如本田雅阁),但直到获得最高评价之前,每年都会得到改进。

汽车具有召回(通常比软件升级贵得多)并且通过对零件清单进行更改(例如修正错误)来进行逐步改进,并且经常需要长期支持(例如向后/向前兼容)。汽车的大部分成本是在您开车回家之后产生的。在您更新和升级客户时,大部分软件成本来自初始产品发布之后。

在某些情况下,您可以引用包括软件或其他软件产品的知名产品。例如,电话在首次销售后就有发布周期,更新和添加功能的方法,以增加收入。电话很好地说明了向前/向后兼容性。太多了,人们不会抛弃旧的去买新的。太少了,客户迫切希望拥有一部在合同到期之前就不会讨厌的电话。

Windows,Microsoft Office,Web浏览器和网页等产品都是可以在讨论中使用的软件。它们已按年度或三年周期进行更新,但可能会更频繁地进行自动更新。它们具有漏洞和安全漏洞,这些漏洞和安全漏洞会在不同程度上影响客户,但尽管我们已尽力而为,但它们仍是其中的一部分。客户可以免费获得修补程序,但通常会以捆绑形式(有时是作为单个模块或通过许可证密钥)来支付增强功能。

微软,苹果,谷歌和亚马逊等行业领导者都为用户提供了相对便宜的客户。但是他们有巨大的费用使那些产品成为可能。他们的经验表明,软件价格昂贵,但有价值且有利可图。他们常常在质量,拥有所需的所有功能以及在适当时机进入市场之间做出折衷。并非他们生产的每种产品都是成功的,有时他们通过重命名,改善营销和销售,或减少损失并利用他们在后来的产品中获得的知识,使狗成为赢家。

0
DeveloperDon

如果您对诸如核反应堆控制,深空通信或医疗植入设备(等)等高可靠性软件开发有所了解,则可以解释一下该项目管理和质量保证级别的成本和交付时间结构可能会比一般企业为其软件项目所能承受的价格高出许多。

0
hotpaw2

也许尝试以一对一的方式或以小组的形式逐步浏览它们,这些是您必须开发的软件用例。在描述用例时,请确定可能发生不同情况的情况下的要点(意料之外但并非不合理的情况)。开始列举它们,要求一些澄清,并说明需要做出或确定的所有决定和方向,以及这样做时的权衡。一直走下去,直到它们被绊住而无法给您答案。让他们了解,您现在与他们一起正在做的事情,就是您整天要做的事情,可能是您自己做的,可能是方向不明确的,无论是决定课程还是编写代码,都要花费数百或数千个任何人都可能会或可能不会布置的用例。而且,在某些情况下您没有想到自己,就无法保证程序会做什么。也许它做“正确”的事情,也许要注意。这就是一个错误。这就是为什么编写软件需要时间。您所花费的时间越少,您考虑和适应的案例就越少,在未知情况下该程序更有可能无法执行“正确”的事情。

0
huntmaster

成本和时间。

时间

设定期望在Y的时间内交付X。它仅此而已。然后告诉他们下一个版本在什么时间会有什么。最初,他们可能会惊讶地相信构建X会花费Y的时间-在这里您可以解释花费的时间和构建软件的复杂性。如果他们不感到惊讶,那么您要么会花费更少的时间,要么他们会比您对构建软件的了解更好。

成本

这是史蒂夫·麦康奈尔(Steve McConnel)的《代码竞争》(Code Compete)书中的内容(引用内存,因此,如果我不能以相同的效果传达它,请原谅)-客户很容易要求新功能。作为产品经理,您不应说出客户的要求。您应该估算构建该新功能所需的工作量和成本。他们会慢慢理解,新功能确实不值得花时间/金钱,或者甚至根本不需要。我不建议您使用此武器吓them他们,但请诚实地使用它,这可能有助于将重点推向目标。

0
Sundeep