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