最近和同事讨论产品经理的职责时,谈到了产品的定义。如果你不能准确定义一个“产品”,你可以考虑它的必要条件。没有用户的产品当然是没有意义的。产品有了用户,就必然有用户与产品的交互——UI。让我有些意外的是,我得到的反馈是产品必须有一个网页。显然,这里存在认知偏差。那么,软件开发中的认知偏差有哪些呢?如何面对和解决?认知偏差是一种影响生产和研究人员的固有行为,可能使软件产品的开发处于错误的过程中。因此,有必要进行一些深入的研究和了解。产研团队哪些行为受到了认知偏差的影响?讨论和学习的前提仍然是概念厘清,需要从认知偏差的定义入手。1.什么是认知偏差?以下是百度百科给出的解释:认知偏差是指人们在感知自己、他人或外界环境时,由于自身或情境的原因,其感知结果往往发生扭曲的现象。-https://img.ydisp.cn/news/20220822/yfymw2vp1cj.htmlTversky和Kahneman目前,经过几十年的研究,经济学、心理学、社会学和管理学研究中确定的认知偏差大约有200种。经济学家认为,大脑通常使用简单的程序来处理复杂的情况,因此出现偏差在所难免。另一方面,社会心理学家认为,认知偏差与为了保持积极的自我形象、保持自尊或保持良好的自我意识而产生的以自我为中心的思维倾向有关。然而,进化心理学家M.G.Haselton和D.Nettle认为,有些解释并不令人满意,给出了肤浅的答案。他们提出差错管理理论,认为平时的决策不是要不要犯错误的问题,而是要犯什么样的错误的问题。因此,如何解释认知偏差是一个非常棘手的问题。三种常见的认知偏差是:(1)确认偏差:人们只愿意看到他们想看到的(2)鸭子效应:低层次的人认为自己是最好的。(3)认知失调:人们倾向于寻找并坚持支持他们理性解释的认知。就团队合作而言,认知偏差一般是指人们根据某些表现现象对他人做出判断,导致判断失误或判断本身与被判断对象的真实情况不相符。认知偏差会导致扭曲的认知、不精确的判断、不合逻辑的解释,或统称为“非理性”的各种结果。2.软件开发中的认知偏差软件开发中的认知偏差可能是最优推理的系统性偏差,它会影响我们如何发现、评估和记忆信息。下面为了简洁起见,直接使用“认知偏差”来指代软件开发中的认知偏差。软件开发人员无法避免这种行为,并且可能出于多种原因表现出认知偏差。例如,易于使用的默认值的认知偏差可能会促使生产和研究人员根据他们容易记住的知识来选择解决方案。上诉可能帮助不大。其他认知偏差可能来自过去的经验,例如坚持自己的问题解决方式,缺乏宽容度和解决方案的多样性。并非所有的认知偏差都必然导致负面结果,有时参与者采取的行动比预期的要少,这也可以产生积极的影响,例如,所谓“愚蠢的人幸运是愚蠢的”。然而,在不受控制的环境中,认知偏见也会产生重大的负面影响。在软件开发中,逆向操作一般可以看作是负面后果。具体来说,逆向操作包括那些以后需要撤消、重做或丢弃的任务和流程。尽管已经确定认知偏差对软件开发的各个方面(例如错误密度、软件需求规范、设计原创性、功能设计等)有不利影响,但这些认知偏差如何影响生产仍然是未知的。研究人员的行为和决策。也许,通过概括认知偏差的类型,然后试图弄清楚如何减少这种非最佳行为。3.认知偏差的分类根据SoutiChattopadhyay等人的研究,梳理出10种认知偏差。3.1先入为主先入为主的认知偏差表现为产研人员倾向于根据手头的先入为主的任务来选择行动,这会导致产研人员采取行动对解空间的探索程度打折扣,导致不完整。3.2每亩三分的认知偏差表现在产研生过于关注自己已经创建或已经拥有的软件任务,从而降低了客观评价其他方案的可能性。对自身部分交付的偏爱,让产研人员无法充分探索解决方案空间,这也是完整性的不足,甚至无法完成产品完整的端到端体验。3.3顽固地将解决问题的努力锚定在初始假设上,而不根据附加信息或相互矛盾的证据充分修改锚点,会导致对任务场景的感知减少,核心业务期望注意力也不会发生变化。3.4易用性默认当研究人员仅根据默认状态选择容易获得的选项,或者倾向于选择当前条件而不考虑可扩展性或适应性时,就会出现这种认知偏差。这导致整个任务的上下文丢失,局部最优且可能不是全局最优的解决方案。3.5PollyannaPollyanna体现了一系列认知偏见,这些偏见导致对所选解决方案的效率或正确性做出错误假设。当人们过度相信自己的能力,或高估有利结果的可能性时,就会发生这种情况。3.6过于简单化这种认知偏差表现为相信每个问题都有一个单一、简单的原因,并采取看似更快或更简单的解决方案。这减少了生产和研究人员在推理和理解信息方面的投入。3.7潜意识行为它表现为将评估和感知转移到外部资源(如IDE或在线资源),而不考虑此类信息的实际价值。3.8无知和大胆无知和大胆是指假设一切都是正常的、有效的和合理的,即使面对相互矛盾的证据。正因为如此,生产和科研人员可能不会注意周围的环境,甚至潜在的团队合作的可能性。3.9表面选择表现为过分强调基于表面标准的一系列行为和信息。因此,业界和研究人员在没有充分推理和思考的情况下就决定了解决方案。3.10记忆偏差记忆偏差可能是一种存在于各个领域的认知偏差,体现在研究者倾向于使用遇到的主要信息或最新信息,或者对最容易获得的信息结果做出反应在记忆中。总的来说,这10种认知偏差会导致四个主要结果:探索不足、感知减少、背景缺失和注意力错位。减少探索通常会导致参与者创建次优解决方案。感知力下降会导致人们下意识地按照默认理解行事,这可能导致错误的推理。上下文的缺失会导致人们试图解决一个问题而偏离了核心诉求,瞎了眼又见了泰山。错误的关注会影响到产研人员认为相关的信息,导致解读出现偏差,甚至会把时间花在处理与核心诉求无关的问题上。比如在强调产品经理的职责范围时,核心诉求是如何提升产品经理的能力和胜任力,但可能会被解读为组织调整。4、如何面对认知偏差认知偏差在软件开发中经常出现,比如用技术债换取短期的交付成果,三个月后发现项目失败了!回想起来,有人重写了一些东西,因为这样更容易,但把一切都搞砸了。记忆偏差、过于简单化、成见可能是人们经常感受到的认知偏差,而没有被深刻感受到的认知偏差出现的频率也不是很低。尽管当前的软件开发流程和工具并不是为了避免认知偏差而设计的,但开发人员可能仍在使用它们来避免认知偏差。消除认知偏见可能不现实,但有办法减少它们,或减少认知偏见的负面后果。4.1系统的方法为了避免成为认知偏见或其他错误的受害者,研究人员应该系统地探索问题空间并探索可用的解决方案和工具。这种对不同任务参数的系统审查有助于避免先入为主的想法、记忆偏差和自满情绪等偏见,因为开发人员将更好地意识到潜在的陷阱,也可以提前考虑替代解决方案。除了替代解决方案之外,系统探索还可以帮助人们牢记“大局”并专注于大局。换句话说,它迫使研究人员更明确地欣赏和承认更大的目标,希望最大限度地减少他们被非核心追求分心的可能性。对于开发人员而言,这可以通过促进现有相关代码的使用来防止所有权(CB2)等偏见,这有助于保持更大的代码库向后兼容。4.2文档阅读在开始一项任务之前查阅文档还可以避免某些认知偏差,例如先入之见、记忆偏差和一亩三分地,因为开发人员可以意识到解决一个问题的多种方法以及每种解决方案的陷阱。例如,一个开发团队的文档空间是一个文档化的库和包使用指南,它通常指出如何使用某些代码并避免陷阱。对如何处理错误及其严重性的标准化描述也可以帮助开发人员更快地发现错误,从而克服无知和盲目乐观等认知偏差。4.3多维视角欣赏不同的视角,连同相关的反馈,可以帮助避免某些认知偏差,例如先入之见、自满和肤浅的选择。接触不同的方法可以帮助行业研究人员打破认知“引导循环”,迫使他们重新考虑、评估和证明任何后续行动的合理性。例如,结对编程可能有助于避免肤浅选择的认知偏差。4.4过程优化好的软件工程方法,如频繁的迭代和测试、敏捷的软件开发等,可以在一定程度上帮助避免很多类别的偏差。对于开发者来说,一亩三分地、易用的默认值等认知偏差可以通过编码标准和使用标准库来避免。这也有助于开发人员找到适合重用的代码。4.5有意义的回顾与分享从现有的开发模式中抽出时间进行回顾与分享,可以帮助产研人员实现有益的实践(如清晰的代码),避免一些认知偏差,如先入为主的观念和记忆偏差。最后,有效的问题解决策略还可以帮助减少一些认知偏差,例如自满、过度简单化和潜意识行为。例如,收敛思维可以确定一个问题的具体解决方案,帮助产研人员快速找到一个具体的解决方案,而发散思维则探索一个问题的多种解决方案,帮助产研人员从一组可供选择的解决方案中进行选择确定最佳解决方案。这可以防止生产和研究人员专注于单一解决方案,从而减少根深蒂固的认知偏差。5.总结认知偏差往往会干扰软件开发,在任务执行和时间投入方面削弱产研人员解决问题的能力。应该让行业研究人员意识到,认知偏差对软件开发构成重大威胁,并且可能比他们意识到的更普遍,但缺乏工具来防止或帮助行业研究人员减少认知偏差。本文梳理了软件开发中出现的10种认知偏差,指出了每种认知偏差可能的表现形式和负面后果,并提出了5种减少甚至避免这些认知偏差的方法。希望对大家帮助有所帮助。
