最近,在和同事們討論產(chǎn)品經(jīng)理職責(zé)的時(shí)候,聊到了關(guān)于產(chǎn)品的定義,如果不能準(zhǔn)確定義“產(chǎn)品”的時(shí)候,可以考慮其必要條件,即可沒有用戶的產(chǎn)品肯定是沒有意義的。產(chǎn)品有了用戶, 必然存在用戶與產(chǎn)品的交互——UI。令我有些意外的是,得到的反饋是產(chǎn)品都要有web 頁面。顯然,這里存在著認(rèn)知偏差。那么,軟件開發(fā)中的認(rèn)知偏差有哪些?又如何面對(duì)和解決呢?
認(rèn)知偏差是影響產(chǎn)研人員的固有行為,可以會(huì)把軟件產(chǎn)品的開發(fā)置于不正確的過程中,因此,有必要進(jìn)行一些深入的學(xué)習(xí)和理解。認(rèn)知偏差影響了產(chǎn)研團(tuán)隊(duì)的哪些行為呢?討論和學(xué)習(xí)的前提仍然是概念澄清,需要從認(rèn)知偏差的定義開始。
1. 什么是認(rèn)知偏差?
以下是百度百科中給出的解釋:
認(rèn)知偏差是人們在知覺自身、他人或外部環(huán)境時(shí),常因自身或情境的原因使得知覺結(jié)果出現(xiàn)失真的現(xiàn)象。
—— https://baike.baidu.com/item/%E8%AE%A4%E7%9F%A5%E5%81%8F%E5%B7%AE
認(rèn)知偏差最早于1974年由研究人員 Tversky 和 Kahneman 提出,經(jīng)過數(shù)十年的研究,在經(jīng)濟(jì)學(xué),心理學(xué),社會(huì)學(xué)和管理學(xué)研究中確定的認(rèn)知偏差大概有200多種。經(jīng)濟(jì)學(xué)家認(rèn)為,大腦通常采用簡單程序應(yīng)對(duì)復(fù)雜環(huán)境,因此出現(xiàn)偏差在所難免。而社會(huì)心理學(xué)家則認(rèn)為,認(rèn)知偏差跟自我中心的思維傾向有關(guān),是為了維持積極的自我形象,保持自尊或者維持良好的自我感覺。不過,進(jìn)化心理學(xué)家哈瑟爾頓(M. G. Haselton)和列托(D. Nettle)認(rèn)為有的解釋難以令人滿意,給出的都是表面答案。他們提出了錯(cuò)誤管理理論,認(rèn)為通常的決策不是犯不犯錯(cuò)誤的問題,而是犯哪種錯(cuò)誤的問題。因此,如何解釋認(rèn)知偏差是一個(gè)非常棘手的難題。
三種常見的認(rèn)知偏差是:
(1)確認(rèn)偏差:人只愿意看到自己想看到的
(2)達(dá)克效應(yīng):水平低下的人認(rèn)為自己是最好的。
(3)認(rèn)知失調(diào):人趨向于尋找、堅(jiān)持支持自己合理化解釋的認(rèn)知。
就團(tuán)隊(duì)協(xié)作而言,認(rèn)知偏差一般是指人們根據(jù)一定表現(xiàn)的現(xiàn)象而對(duì)他人作出判斷,從而出現(xiàn)判斷失誤或判斷本身與判斷對(duì)象的真實(shí)情況不相符合。認(rèn)知偏差可導(dǎo)致感知失真、判斷不精準(zhǔn)、解釋不合邏輯、或各種統(tǒng)稱「不理性」的結(jié)果。
2.軟件開發(fā)中的認(rèn)知偏差
軟件開發(fā)中,認(rèn)知偏差可能是對(duì)最佳推理的系統(tǒng)性偏差,它影響我們?nèi)绾伟l(fā)現(xiàn)、評(píng)價(jià)和記憶信息。以下,為了簡練,直接用“認(rèn)知偏差”指代軟件開發(fā)中的認(rèn)知偏差。
軟件開發(fā)的產(chǎn)研同學(xué)對(duì)這種行為無法免疫,并且可能由于多個(gè)原因而表現(xiàn)出為認(rèn)知偏差。例如,易用默認(rèn)的認(rèn)知偏差可能促使產(chǎn)研人員根據(jù)自己容易記住的知識(shí)來選擇解決方案,簡單的說, 就是先干容易做的,作自己容易產(chǎn)出的交付,但是對(duì)業(yè)務(wù)的核心訴求可能幫助不大。另一些認(rèn)知偏差可能來自過往的經(jīng)驗(yàn),例如,堅(jiān)持個(gè)人解決問題的風(fēng)格,缺少了包容以及解決方案的多樣性。
并非所有的認(rèn)知偏差都必然導(dǎo)致負(fù)面結(jié)果,有時(shí)候參與者采取的行動(dòng)少于預(yù)期,也可以帶來積極的影響,例如,所謂的“傻人有傻?!薄H欢?,在一個(gè)不受控制的環(huán)境中,認(rèn)知偏差也可能造成重大的負(fù)面后果。在軟件開發(fā)中,一般可把反向的操作作為負(fù)面后果,具體發(fā)反向操作包括那些以后需要撤銷、重做或丟棄的任務(wù)和流程。
盡管可以確定認(rèn)知偏差對(duì)軟件開發(fā)的一些方面存在有害的影響,例如bug密度、軟件需求的說明、設(shè)計(jì)原創(chuàng)性、功能設(shè)計(jì)等,但是,仍然無法中知道這些認(rèn)知偏差怎么樣地影響了產(chǎn)研人員的行為和決策?;蛟S,可以通過歸納認(rèn)知偏差的種類,然后嘗試如何減少這種非最優(yōu)行為。
3. 認(rèn)知偏差的分類
根據(jù) Souti Chattopadhyay等人的研究,對(duì)其中的10類認(rèn)知偏差進(jìn)行梳理。
3.1 先入為主
先入為主的認(rèn)知偏差表現(xiàn)為產(chǎn)研人員傾向于基于先入為主的手頭任務(wù)來選擇行動(dòng),會(huì)導(dǎo)致產(chǎn)研人員對(duì)采取行動(dòng)所需的解決方案空間探索程度打折扣,造成完備性的缺失。
3.2一畝三分
這一認(rèn)知偏差表現(xiàn)為產(chǎn)研同學(xué)過分重視他們自己創(chuàng)建或已經(jīng)擁有的軟件任務(wù),從而降低了客觀評(píng)估其他選項(xiàng)的可能性。對(duì)自己局部交付的偏好使產(chǎn)研人員無法完全探索解決方案的空間,同樣是完備性的缺失,甚至無法完成產(chǎn)品的完整端到端體驗(yàn)。
3.3 固步自封
將解決問題的努力錨定在最初的假設(shè)上,而沒有根據(jù)增加的信息或相互矛盾的證據(jù)對(duì)錨進(jìn)行充分的修改,這會(huì)導(dǎo)致對(duì)任務(wù)場景的感知減少,對(duì)業(yè)務(wù)核心訴求的變化缺失了關(guān)注。
3.4 易用默認(rèn)
當(dāng)產(chǎn)研人員僅僅基于他們的默認(rèn)狀態(tài)選擇容易獲得的選項(xiàng)時(shí),或者傾向于選擇當(dāng)前條件而不考慮擴(kuò)展性或適應(yīng)性的時(shí)候,就會(huì)出現(xiàn)這種認(rèn)知偏差。這會(huì)導(dǎo)致整個(gè)任務(wù)的場景丟失,局部最優(yōu)的和很可能不是全局最優(yōu)的解。
3.5 盲目樂觀
盲目樂觀體現(xiàn)出一系列的認(rèn)知偏差,會(huì)導(dǎo)致錯(cuò)誤的假設(shè),以及所選解決方案的效率或者正確性。當(dāng)人們過度相信自己的能力,或者高估了有利結(jié)果的可能性時(shí),就會(huì)出現(xiàn)這種情況。
3.6 過度簡化
這一認(rèn)知偏差體現(xiàn)為認(rèn)為每個(gè)問題都存在一個(gè)的簡單原因的,以及采取看似更快或更簡單的解決途徑。這減少了產(chǎn)研人員在推理思考和理解信息方面的投入。
3.7 潛意識(shí)行為
它表現(xiàn)為將評(píng)價(jià)和感知轉(zhuǎn)移給外部資源(如 IDE 或在線資源) ,而不考慮這些信息的實(shí)際價(jià)值。
3.8 無知無畏
無知無畏指的是假設(shè)一切都是正常的、有效的、合理的,即便是在面對(duì)矛盾證據(jù)的時(shí)候。正因如此,產(chǎn)研人員可能會(huì)不注意周圍環(huán)境,乃至潛在的團(tuán)隊(duì)合作可能性。
3.9 表面選擇
這體現(xiàn)為一系列基于表面標(biāo)準(zhǔn)的行為和信息被過度地重視。因此,產(chǎn)研人員沒有經(jīng)過充分推理和思考就決定了一個(gè)解決方案。
3.10 記憶偏差
記憶偏差可能是各領(lǐng)域都存在的一種認(rèn)知偏差,體現(xiàn)為研發(fā)人員更喜歡使用所遇到的主要信息或最近的信息,或?qū)τ洃浿凶钊菀撰@得的信息結(jié)果作出反應(yīng)。
總的來說, 這10種認(rèn)知偏差主要導(dǎo)致了四種后果:探索不足,減少感知,語境缺失以及錯(cuò)誤的關(guān)注。減少探索往往導(dǎo)致參與者創(chuàng)造次優(yōu)解決方案。感知的減少會(huì)使人們下意識(shí)地按照默認(rèn)的理解行事,會(huì)導(dǎo)致錯(cuò)誤的推理。語境缺失,會(huì)造成人們試圖解決一個(gè)問題并偏離核心訴求,一葉障目,不見泰山。錯(cuò)誤的關(guān)注會(huì)影響到產(chǎn)研人員認(rèn)為相關(guān)的信息,從而在解讀上發(fā)生偏差,甚至使他們花時(shí)間處理與核心訴求無關(guān)的問題。例如,當(dāng)強(qiáng)調(diào)產(chǎn)品經(jīng)理職責(zé)范圍的時(shí)候,核心的訴求是如何提高產(chǎn)品經(jīng)理的能力和勝任力,但可能會(huì)被解讀成組織機(jī)構(gòu)的調(diào)整。
4. 如何面對(duì)認(rèn)知偏差
認(rèn)知偏差在軟件開發(fā)中經(jīng)常出現(xiàn),例如,以技術(shù)債務(wù)來換取中短期交付的成果,三個(gè)月后,發(fā)現(xiàn)項(xiàng)目失敗了!回顧過去的時(shí)候,發(fā)現(xiàn)有人改寫了一些東西,因?yàn)槟菢幼龈菀?,結(jié)果把一切都搞砸了。
記憶偏差、過度簡化和先入為主可能是在人們經(jīng)常感受到的認(rèn)知偏差,而感受不深的認(rèn)知偏差發(fā)生的頻率也并不很低。盡管目前的軟件開發(fā)流程和工具并不是為了避免認(rèn)知偏差而設(shè)計(jì)的,但開發(fā)人員可能仍在使用它們來避免認(rèn)知偏差。消除認(rèn)知偏差可能是不現(xiàn)實(shí)的,但還是有一些方法可以減少認(rèn)知偏差,或者減少認(rèn)知偏差造成的負(fù)面后果。
4.1 系統(tǒng)方法
為避免成為認(rèn)知偏差或其他錯(cuò)誤的受害者,產(chǎn)研人員應(yīng)該系統(tǒng)地探討問題空間,并探索可用的解決辦法和工具。這種不同任務(wù)參數(shù)的系統(tǒng)綜述有助于避免偏見,例如先入為主、記憶偏差和固步自封 ,因?yàn)殚_發(fā)人員會(huì)更好地意識(shí)到潛在的坑,也可以提前考慮替代解決方案。
除了可供選擇的解決方案之外,系統(tǒng)探索還可以幫助人們牢記“大局”,以大局為重。換句話說,它迫使產(chǎn)研人員更明確地欣賞和承認(rèn)更大的目標(biāo),希望最大限度地減少他們在非核心訴求上分心的可能性。對(duì)開發(fā)人員而言,這可以通過促進(jìn)使用現(xiàn)有的相關(guān)代碼來防止所有權(quán)(CB2)等偏見,這有助于保持較大的代碼庫向后兼容。
4.2 文檔閱讀
在開始一項(xiàng)任務(wù)之前查閱文檔也可以避免某些認(rèn)知偏差,比如先入為主、記憶偏差和一畝三分 ,因?yàn)殚_發(fā)人員可以意識(shí)到解決問題的多種方法以及每個(gè)解決方案的缺陷。例如,開發(fā)團(tuán)隊(duì)的文檔空間是記錄庫和包使用的指導(dǎo)方針,這些文件一般會(huì)指出如何使用某些代碼以及避免陷阱。
關(guān)于如何處理錯(cuò)誤及其嚴(yán)重程度的標(biāo)準(zhǔn)化描述文檔也可以幫助開發(fā)人員更快地找到錯(cuò)誤,從而克服諸如無知無畏和盲目樂觀等認(rèn)知偏差。
4.3 多維的視角
欣賞不同的視角,加上相關(guān)的反饋,可以幫助避免某些認(rèn)知偏差,如先入為主 ,固步自封 和表面選擇。接觸不同的方法可以幫助產(chǎn)研人員打破認(rèn)知“引導(dǎo)循環(huán)”,迫使他們重新考慮、評(píng)估并證明任何后續(xù)行動(dòng)的合理性。例如,結(jié)對(duì)編程可能幫助避免表面選擇的認(rèn)知偏差。
4.4 流程優(yōu)化
良好的軟件工程方法,如頻繁迭代和測試,敏捷軟件開發(fā)等,可以在一定程度上幫助避免很多類別的偏見。對(duì)于開發(fā)人員而言,可以通過編碼標(biāo)準(zhǔn)和使用標(biāo)準(zhǔn)庫來避免一畝三分和易用默認(rèn)等認(rèn)知偏差。這也有助于開發(fā)人員找到合適的代碼來實(shí)現(xiàn)重用。
4.5 有意義的回顧與分享
從現(xiàn)有的開發(fā)模式中抽出時(shí)間進(jìn)行回顧與分享,可以幫助產(chǎn)研人員意識(shí)到有益的實(shí)踐方法(比如清晰的代碼) ,這可以避免一些認(rèn)知偏差,比如先入為主和記憶偏差。
最后,有效的問題解決策略也可以幫助減少一些諸如固步自封 ,過度簡化和潛意識(shí)行為等認(rèn)知偏差。例如,收斂性思維可以確定一個(gè)問題的具體解決方案,幫助產(chǎn)研人員迅速地找到特定的解決方案,而發(fā)散性思維則探索問題的多種解決方案,幫助產(chǎn)研人員從一組備選方案中確定最佳解決方案。這樣可以防止產(chǎn)研人員將注意力集中在單一解決方案上,從而減少了固步自封的認(rèn)知偏差。
5.小結(jié)
認(rèn)知偏差經(jīng)常干擾軟件的開發(fā),損害產(chǎn)研人員在任務(wù)執(zhí)行和投入時(shí)間方面的問題解決能力。應(yīng)該讓產(chǎn)研人員意識(shí)到,認(rèn)知偏差對(duì)軟件開發(fā)構(gòu)成了重大威脅,而且可能比他們意識(shí)到的更加普遍,但有缺乏防止或幫助產(chǎn)研人員減少認(rèn)知偏差的工具。本文整理出10種在軟件開發(fā)中出現(xiàn)過的認(rèn)知偏差,指出了每種認(rèn)知偏差的可能表現(xiàn)形式和負(fù)面后果,并提出了5種方法來減少甚至避免這些認(rèn)知偏差,希望對(duì)大家有所幫助。
作者介紹
曹洪偉,51CTO社區(qū)編輯,現(xiàn)任DuerOS首席布道師。具有20多年研發(fā)經(jīng)驗(yàn),致力于軟硬件系統(tǒng)的架構(gòu)設(shè)計(jì),性能優(yōu)化、平臺(tái)穩(wěn)定性建設(shè)等工作,實(shí)現(xiàn)系統(tǒng)智能化與規(guī)范化、流程自助化、以及可視化。