ว่าด้วยเรื่องของ Cognitive Bias ในการพัฒนา software
ช่วงนี้หยุดพักยาวจนถึงปีใหม่ ได้มีโอกาสดู VDO เกี่ยวกับ “Cognitive Bias” ซึ่งกล่าวถึงรูปแบบของความคิด มุมมอง หรือการตัดสินใจที่ผิดไปจากการคิดอย่างเป็นเหตุเป็นผล โดยมักจะเกิดขึ้นโดยอัตโนมัติอย่างไม่รู้ตัว มันอาจฟังดูเหมือนเป็นแนวคิดเชิงจิตวิทยาที่ไกลตัวแหละ แต่ในความจริงแล้ว Cognitive Bias มันส่งผลกระทบโดยตรงต่อการตัดสินใจในงานที่เต็มไปด้วยความไม่แน่นอนอย่างการพัฒนา software
Cognitive Bias มันมีอะไรบ้าง
จากที่เกริ่นไปข้างบน การพัฒนา software โดยเฉพาะกับงานด้าน architecture เต็มไปด้วยความซับซ้อนและเกิดการเปลี่ยนแปลงอยู่ตลอดเวลา ไม่ว่าจะเป็นปัญหาทาง technical ความต้องการของลูกค้า หรือความไม่แน่นอนในการทำงานกับระบบที่ซับซ้อน Cognitive Bias จึงสามารถแทรกตัวเข้ามาได้โดยไม่รู้ตัว และทำให้เราตัดสินใจผิดพลาด
ในเชิงจิตวิทยาแล้ว มันมี Cognitive Bias มากมายเต็มไปหมด (สามารถอ่านเพิ่มได้จาก https://yourbias.is/) แต่จะขอยกตัวอย่างอันที่เราเจอบ่อยละกัน
- Confirmation Bias: เมื่อเรามีความเชื่ออย่างใดอย่างนึง เรามักจะมองหาข้อมูลที่ยืนยันความคิดนั้น และมองข้ามข้อมูลที่ขัดแย้งไป เช่น ตัวอย่างง่าย ๆ คือเมื่อทีมต้องเลือกระหว่างสอง architecture pattern ไปจนการเลือกใช้ framework ที่เราคุ้นเคยโดยไม่พิจารณาทางเลือกอื่นอย่างรอบด้าน หรือพิจารณาถึงความต้องการที่แท้จริง
- Availability Bias: เมื่อเรามีความเชื่ออย่างใดอย่างนึง เรามักจะหาข้อมูลโดยอาศัยตัวอย่างที่ “นึกออก” (available) ได้ง่ายที่สุด ซึ่งก็มักจะเป็นเหตุการณ์ที่เกิดขึ้นในอดีต ไม่ก็ได้ยินมาจากคนใกล้ตัวที่เราสนิทใจอีกที เช่น ก่อนหน้านี้เคยเจอปัญหาเรื่องราวสุดโต่งในอดีตจนจำได้ขึ้นใจว่า ระบบเคยล่มเนื่องจาก encoding ใน service นึง เวลาเจอ “อาการ” ที่คล้ายกันในงานอื่น ๆ หลังจากนั้นก็จะคิดว่าปัญหาเกี่ยวข้องกับ encoding แน่ ๆ เพราะเราเคยเจอปัญหาคล้ายกันในอดีต ทั้งที่หลักฐานอาจไม่ได้บ่งชี้ไปในทิศทางนั้น
- Zero Risk Bias: ตัดสินใจทุ่มเทเวลาและทรัพยากรมากมายเพื่อลดความเสี่ยงเล็ก ๆ น้อย ๆ ให้เป็นศูนย์ โดยลืมพิจารณาภาพรวมที่สำคัญกว่า เช่น การทุ่มเทให้กับการปรับปรุงพัฒนาเพื่ออุดช่องโหว่เล็ก ๆ แต่ละจุดในระบบจนลืมดูแลว่าพอแต่ะส่วนมาทำงานร่วมกันแล้วมันมีผลเป็นอย่างไรบ้าง
แล้วเราจะอยู่ร่วมกับ Cognitive Bias ได้อย่างไรบ้าง
ก่อนจะเข้าเรื่อง สาเหตุที่เราใช้คำว่า “อยู่ร่วมกับ” แทนที่จะเป็น “จำกัด” หรือ “ป้องกัน” เพราะว่า Cognitive Bias เป็นสิ่งที่อยู่ในตัวเราทุกคน ไม่สามารถหลีกเลี่ยงได้ เป็นหนึ่งในสิ่งที่ทำให้มนุษย์เราไม่สมบูรณ์แบบนั่นเอง
- ตั้งคำถามกับตัวเองและทีม: ก่อนที่จะปักใจเชื่อเรื่องใด ๆ ลองตั้งคำถามว่า “ข้อมูลนี้มาจากไหน” หรือ “มีหลักฐานอะไรที่สนับสนุนมัน” จากนั้นแบ่งปันหลักฐานและชวนทีมพูดคุยและแลกเปลี่ยนความคิดเห็นจากมุมมองที่ต่างกัน
- ใช้เครื่องมือช่วยประเมิน: เพื่อช่วยให้เราตัดสินใจโดยอ้างอิงข้อมูลมากกว่าความรู้สึก เช่น Threat Modeling ในงานด้าน security เพื่อเข้าใจภาพรวมว่าช่องโหว่ของ architecture มันอาจจะเกิดจากหลากหลายส่วนในระบบ หรือ Architecture Decision Records เพื่อบันทึกเหตุผลและบริบทของการตัดสินใจเอาไว้
- ทำตัวให้คุ้นชินกับความไม่สมบูรณ์และเรียนรู้จากมัน: เมื่อไม่มีใครรู้ว่าการตัดสินใจด้าน architecture ที่คิดไว้นั้นมันจะ work ไหมจนกว่า user จะได้ใช้งานจริง ๆ แปลว่าการพัฒนา sotware ก็คือการทดลอง เพื่อเรียนรู้ว่ามัน work หรือไม่ จากนั้นนำ feedback และข้อมูลที่ได้จริงมาต่อยอดปรับปรุงงานของเราให้ดีขึ้นไป เมื่อการตัดสินใจมันไม่ work อย่าเพิ่งด่วนสรุปว่าเป็นการตัดสินใจที่ผิด ลองย้อนกลับไปดูว่าเราตัดสินใจภายใต้ข้อจำกัดอะไรในตอนนั้น
- ชะลอการตัดสินใจออกไป: ในสถานการณ์ที่เร่งรีบหรือกดดัน สมองเรามักสร้าง Bias มากขึ้น การชะลอการตัดสินใจเล็กน้อยช่วยให้เรามีเวลาคิดวิเคราะห์มากขึ้น นอกจากนั้นก็เป็นการเปิดโอกาสให้เรารู้อะไรมากขึ้นจากสถานการณ์ที่เปลี่ยนไปเพื่อตัดสินใจได้ดีขึ้นด้วย
สรุป
แม้ว่า Cognitive Bias จะเป็นสิ่งหลีกเลี่ยงไม่ได้ แต่เราสามารถลดผลกระทบของมันได้ด้วยการตั้งคำถาม ใช้เครื่องมือช่วย และยอมรับความไม่สมบูรณ์ของการตัดสินใจ มันไม่ใช่เรื่องของการกำจัด Bias ให้หมดไป แต่คือการรู้จักมันและจัดการกับมันอย่างชาญฉลาดต่างหาก
การทำความเข้าใจกับ Cognitive Bias จะช่วยให้เราตัดสินใจได้ดีขึ้น ออกแบบ architecture ได้ดีขึ้น และปรับตัวกับความเปลี่ยนแปลงได้ดีขึ้น
เคยเจอ Bias ในงานตัวเองหรือในทีมไหม