TDD Misconception (Continue…)
เขียนภาคต่อจาก TDD Misconception เดิม
ในบทความแรกผมเขียนว่าปัญหาของการทำ TDD ที่ผมเคยเจออย่างหนึ่ง คือการพยายามเขียนให้ครอบคลุมมากเกินไป หรือมีความกลัว จนทำให้ไม่สามารถ Productive ได้หลังจากเริ่มทำเทส แล้วก็เลยมองว่า Test เสียเวลา
แต่ผมว่าปัญหามันอาจจะลึกกว่านั้น
การที่ไม่สามารถ Encourage ให้สร้าง Automated test หรือเขียนเทสเนี่ยอาจจะเป็นแค่เสียงสะท้อนเล็กๆ ของปัญหาที่ใหญ่กว่านั้นก็ได้นะครับ
เช่น ถ้าทีมต่างคนต่างทำงาน ต่างคนต่างไม่ได้พร้อมจะช่วยแก้โค้ดของกันและกันอยู่แล้ว นั่นโค้ดฉัน นี่โค้ดคุณ ไม่ได้ไว้ใจกันในทีมมากพอ
พอเทสพัง ทีมที่ไม่ช่วยกันก็จะเริ่มเบลมว่า “น่าเบื่อ ต้องมาแก้งานคนอื่น เนี่ย มีเทสเยอะๆ เสียเวลา”
พอมี Bug ทีมที่ไม่ช่วยกันก็จะเริ่มเบลมว่า “ทำไมคุณไม่เขียนเทสให้ครอบคลุม เขียนให้มันเยอะๆ สิ พอมีบั๊กมันเดือดร้อนคนอื่นเค้า”
ในสภาพแบบนี้คงไม่มีใครในทีมมีแรงจูงใจให้เขียนเทส
ในสภาพแบบนี้การทำ TDD ล้มเหลวเป็นแค่เสี้ยวเล็กๆ ของปัญหาที่ใหญ่กว่านั้นมาก
ปัญหาแท้จริงคือ ทีมคุณไม่เชื่อใจกันตั้งแต่แรกแล้วไง ซึ่งนั่นนะ Critical กว่า
และเราควรจะเรียกความมั่นใจของทีมกลับมาให้ได้โดยเร็ว ก่อนที่จะนำ Process เข้ามา
การสร้างเทสไม่สำเร็จ ทำให้โปรแกรมเมอร์เขียนเทสไม่ได้ ผมว่าส่วนมากเลย (เชื่อเลยว่าเกิน 70%) เป็นเพียงแค่ยอดภูเขาน้ำแข็งเท่านั้นแหละ ใต้ภูเขาน้ำแข็งมันอาจจะมีปัญหาที่ลึกลับซับซ้อนกว่านั้นอยู่อีกเยอะ
แต่สำคัญมากคือ ถ้าทีมไม่เชื่อใจกัน ไม่ว่าจะในทีมเอง หรือบริหารไม่เชื่อใจทีม ผมว่ามันแก้ไม่ได้ด้วย Process เสมอไปอ่ะนะ (แม้แต่การเขียนเทสก็ตาม) โอเค มันอาจจะช่วยได้บ้างแหละ แต่ระยะยาวผมว่าไม่ใช่
อยากให้นึกถึงคู่รักที่กลัวแฟนเจ้าชู้เลยตั้ง Process ว่าให้ฉันเช็คไลน์ทุกๆ ชั่วโมง กลับบ้านห้ามเกิน 6 โมง ต้องให้เช็คตำแหน่งได้ทุกวันทุกเวลา
เขาคิดว่าจะแก้ปัญหาความไม่เชื่อใจได้ด้วย Process
น่าแปลกมั้ย ที่หลายครั้ง มันก็ยังนอกใจได้อยู่ดี ส่วนคนที่ไม่ได้กะจะนอกใจ ก็มักจะทนไม่ไหวเลิกกันอยู่ดี
ผมจะชี้ว่า บางครั้งการพยายามแก้ปัญหาที่ลึกกว่าด้วย Process หรือแม้แต่ด้วย มันไม่ใช่คำตอบตั้งแต่แรกแล้ว
ที่ผ่านมาผมเขียนว่า คนเราเขียนเทสเพื่อให้ลดความกลัวในการเขียนโค้ด
แต่จุดนี้ ผมจะบอกว่าถ้าความกลัวในการเขียนโค้ดของทีมงานคุณ ไม่ได้เกิดจากการกลัวบั๊ก ไม่ได้เกิดจากการไม่มีเทสครอบคลุม แต่เกิดจากตัวทีมเอง ไม่ว่าจะฝั่งบริหาร หรือภายในทีมเอง
การเขียนเทส ทำเทส มันแทบจะไม่ช่วยอะไรเลยนะครับ
และมันก็มีแนวโน้มจะล้มเหลวเยอะมาก
เพราะมัน “ไม่มีประโยชน์” และ “สิ้นเปลือง” จริงๆ นั่นแหละครับ ในกรณีนี้