软件开发中的快速铅笔谬误

2020-06-30 22:24:47

与纸笔业务相比,软件在不同的层面上运行。避免软件与传统业务原则保持一致的陷阱是软件开发人员的职责。

在本文中,我们将描述如何在一个常见的软件开发项目中快速实现铅笔谬误。之后,我们将解释如何避免这种谬误。

为了更好地理解全新的软件是如何在不经意间变成一支快速铅笔的,我们需要了解软件交付的过程。这一切都是从客户开始的,在定义需求的过程中可能会感到迷茫-如果你愿意的话是愿望-指定未来的产品应该做什么和不应该做什么。

客户是在经营一家企业,这种方式可能已经保持了一百年之久。他们使用的是非常原始的工具,与我们在软件开发中使用的工具大不相同。他们习惯于使用铅笔。

他们要求软件开发人员做的事情,就是拿出一个好的、方方正正的软件来改进他们的业务运营方式。事实上,开发人员开发出了一款软件,意在取代传统的纸笔业务。这就是魔术以其最不想要的形式发生的时刻,因为客户,无论他们多么努力,都永远看不出铅笔和软件之间的区别。

他们通常会把这个程序看作是一支非常快的铅笔。他们将一如既往地将该计划视为传统业务的快速替代品。这就是问题所在。现代软件开发实践基于接受客户的需求并将其实现到软件和铅笔之间的任何区别消失的程度,是糟糕的软件设计的根本原因。

如果你今天试图监督软件开发,你会看到各种各样的程序与他们正在处理的纸笔业务完全相同,只有一个微小的区别,那就是软件在一定程度上是自动化的。这就是为什么客户会一直将软件视为他们非常快的铅笔的原因。

你想开发那个吗?不,你没有!但是你会怎么做呢?您将如何回应客户的要求?要回答这些问题,我们需要回到一切开始的地方:回到赤裸裸的企业。

前方有剧透。在开发软件时,我们不会把客户当作真理的源泉。并不是你的客户会告诉你的每一件事都是正确的。我们现在将从不同的角度来看软件开发。

为了理解应该如何开发软件,我们将再次从客户开始,他们脑子里有这么多想法,完全迷失了方向。他们有生意,这是事实。但这与软件开发无关,因为没有人想做生意。人们想要度假,而不是做生意。相反,他们拥有的其他东西是我们感兴趣的,这还有待发现。

在软件开发中,旅程开始于理解拥有业务的客户还有其他重要的事情。这可能是您在编程生涯中从未遇到过的元素。他们,顾客,有问题。他们有一些东西在伤害他们,或者伤害他们自己的客户。

他们的整个业务都建立在解决这个问题的方法上。这就是商业的全部意义,也是为什么上面说没有人想做生意的原因。客户希望为自己的客户解决问题,并通过在这方面取得成功来赚钱。

那么,软件在这张图片中的位置是什么呢?软件是问题解决方案的代表。您可以将问题从客户身上移开,并将软件放在两者之间。这使得软件成为用户和问题之间的抽象层。

此时,我们将切换到Term User,而不再是Customer。基本上,用户是使用软件的人,客户是为软件开发买单的人。这个定义可能不能涵盖所有角度,但它足以理解下面的解释。

当这样说的时候,用户会使用软件,软件会抽象化下面伤害他们的尖锐的东西。游戏的规则是将问题从用户的视图中移除,并用问题的抽象表示来代替它,这样软件就可以充当问题实例的自动解决方案。

最后,还有避免快速铅笔谬误的问题。如果您明白软件本身对用户不感兴趣,那么最好避免使用它。然而,令人感兴趣的是用户向软件发送命令的方式。这就是用户控制问题抽象的方式。那么,您将需要考虑如何最好地实现命令。

软件最终会产生一个很小的项目,这是您的用户唯一关心的事情。这就是产品,应用软件的产品。

实际上,用户只关心向软件发出命令并收集结果。即使是那些命令也不太重要,因为应用软件的结果仍然是唯一对用户有用的东西。软件并不重要。问题并不重要。产出是唯一重要的东西。

软件开发人员将有效地转向思考如何让某人应用程序来产生输出。这样,用户界面下面的所有问题都变成了开发人员自己的问题,而不是客户的问题。客户将看不到表面之下的任何元素,它们将永远保持软件开发人员的业务领域。

从更广泛的角度来看,开发工作软件意味着以这样的方式开发内部部分,即外部部分,即用户界面,可以操作并让用户产生所需的输出。

所有业务流程仍然是软件执行的职责。软件不会期望用户在流程中导航并手动有效地运行它们。取而代之的是,软件将期望用户填写所需的信息,以便进程可以自己执行。

如果您成功地做到了这一点,那么您的软件将不会是一支非常快的铅笔。它将扭转局面,做正确的事情(无论是什么)来为用户解决问题。

在本文中,我们已经阐明了软件开发中最突出的问题之一-了解客户的需求,而不是接受客户的要求的问题。

当我们摸索表面的时候,我们发现客户的观点存在很大的不确定性,这是因为误解了软件的作用,以及机器的工作原理(如果你愿意的话)。

客户需要软件领域的指导。开发人员需要采访客户以了解业务正在解决的问题,而不仅仅是业务本身的当前工作原理。

一旦建立了对问题的理解,软件开发人员的职责就是产生问题的抽象模型,并在此基础上实现过程。结果应该是以完全自动化的方式执行业务流程的软件产品,这样用户就不必手动执行它们。

本文摘自工作软件系列,第0集。如果你想了解更多,请在线观看整集和其他剧集。