本节书摘来自华章出版社《敏捷可执行需求说明 Scrum提炼及实现技术》一 书中的第3章,第3.1节,作者:(美)Mario Cardinal,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.1 运用试错法
当遇到很多不确定的因素时,我们必须识别出作为人类所面临的局限性,并接受我们很难指望通过一次尝试就能获得成功这样的现实。有时需要多次尝试。成功的唯一途径就是失败。因此,需要及早并且经常地失败。
从不断的失败中获得成功很少被上升为一种积极的体验。然而,如果你是一个幸运的孩子,你的家人会鼓励你及早并经常失败。如果你真的够幸运,你的老师也会这样做。不幸的是,我们其他人,常常从小学开始就被要求一定要找到一个完美的结果,好像每一个问题都有确定的答案一样。“失败是很糟糕的!”这种根深蒂固的想法弥漫着,并逼迫着我们去找到那个完美的答案。
对于我们当中最优秀的人来说,这种情况导致他们中的很多人都产生了一种刀枪不入的、我们称之为“上帝情结”的感觉。维基百科将上帝情结定义为:“一个人拒绝承认发生错误或失败的可能性,即使面对复杂的或难以应付的问题、困难或者不可能完成的任务。”[1]“上帝情结”是一种坚定信念,即你知道软件应该如何工作。这种“我完全知道”的态度在需求可能会面临许多不确定性的软件开发环境中是不恰当的。相反,你应该谦卑地采用多种解决问题的技术来探讨需求说明。
2011年,经济学作家Tim Harford在TED演讲[2]中谈到了在解决复杂问题时变化和选择的重要性。他主张通过试错或假设检验程序,即用另一种方式来表达变化和选择,采用这种方式,你可以比用传统的“上帝情节”做事方式能够更快地找到一种解决方案。
当我们解决复杂问题的时候,犯错是一个非常自然的过程。正如古话所说,“金无足赤,人无完人”。但是我们中的许多人都抵制这一过程,因为它看起来没有效率并且也是不正确的。然而,当你回顾历史时,你会发现有很多通过犯错误找到解决方案,并且结局很美好的事件的例子。科学家亚历山大·弗莱明也是某一天通过这样一个意外事件发现盘尼西林的。在将一些细菌培养皿遗忘在角落里一段时间后,他偶然发现其中一些培养皿长满了真菌,从而杀死了培养皿里的细菌。在那个偶然的发现以后,他又继续研究了十年才放弃。在他放弃他的项目之后不久,另一个科学家接着拓展了他的研究并进行了完善,结果诞生了我们现在普遍用来抵抗细菌感染的抗生素,虽然这一发现是偶然因素造成的,但它被证明是人类历史上最重要的发现之一。
虽然弗莱明的发现是偶然的,但是我们应该追求更加严格的试错过程。我们需要将“偶然发现”转变成“有意地去挖掘”。比如苹果公司的iPod产品。在2001年,历经8个多月复杂的反复试错过程后,苹果公司最终创造了iPod。正如他们在低端Mac机网站上解释的那样,虽然研发团队早就掌握一些相关技术元素并以此为基础,史蒂芬·乔布斯还是通过实施短周期反馈环才促使项目最终卓有成效。
“史蒂夫·乔布斯在项目中扮演着非常重要的角色,他频繁地安排跟安东尼·法戴尔团队和PortalPlayer团队的总监开会。在这些会议中,他会告诉他们他在使用这个设备时遇到的具体问题,这些问题涉及产品界面、音质或者滚轮的尺寸。”
最终,市场上出现了这款最具创新性的便携式音乐播放器。史蒂夫·乔布斯的团队懂得为了达到预期目标,他们必须接受可能会犯的“错误”。他们为这些错误而感到庆幸,正如詹姆斯·乔伊斯所说,接受“一个人所犯的错误是他获得发现的入口。”这种观点是在这个充斥着不确定性的世界里畅行无阻的好方法。我们必须铭记:没有真正的错误,只有学习的机会。你所做的每一件事,不管有没有达到预期的目标,都将把你带向另一个地方。当没有任何指令可以遵循时,试错是一种有效的探索途径。
历史表明,一些最伟大的、最具影响力的发明家们都遵循同样的途径。正如托马斯·A·爱迪生曾经说过的那样:“我没有失败,我只是发现了一万种不成功的方式。”
前面描述的试错法解决问题的流程也可以用在其他领域,比如更具艺术性的情境。以音乐为例,在音乐的创作过程中,作曲家往往会追求从一个想法开始直到获得她满意的作品的探索过程。也许是先有音乐,只是歌词可能是这个探索流程的开始。增减乐器、改编、和加入人的歌声都是整个试错流程的一部分,由此可能产生一些让你非常享受的杰作(例如,那些经典的古典音乐作曲家)。
从当今或过去最受尊重的画家们的作品中,我们也可以看到试错流程的影子。天资卓越、才华横溢的亨利·马蒂斯是20世纪非常有影响力的艺术家。1935年,他创作大型裸体画像,即大多数时候被称为“粉红裸体”的作品。他通过在6个月里一共拍摄22张照片来记录创造过程的每一个阶段的方式,使这幅画作变得尤为独特。这是一幅复杂的作品,为了达到预期的效果,需要不断地尝试新的办法。这种不辞辛劳的做法,清晰地展示了创作的真实过程和试错过程。如今,这个作品是他最负盛名的画作之一。如果你可以连上互联网,就可以很容易地浏览到这22张照片。你可以在犹太人博物馆的网站上找到它们[4]。
软件需求探索过程跟前面几个例子有很多相似之处。在每个例子中,人们都依赖于试错过程。这种解决问题的方式可以让你找到行得通的方法,并放弃无效的尝试。谨慎的探索并不是直接从失败本身中得来的,而是在对失败进行分析理解、改进和重试过程中发现的。
试错流程跟软件需求探索情景尤为贴切。但是需要考虑一个细微的差别。在软件需求探索过程中,每一次尝试都被显著地用来识别在众多需求项里的最优变化,以及选择最具潜力的需求项。来自干系人的反馈被用来改进结果并促使更周全的探索。消除错误就变成了去掉那些干系人认为不必要或不再被需要的过程。