ช่วงนี้กลับมาอ่านหนังสือ Extreme Programming(XP) อีกรอบ
พบว่าการอ่านรอบนี้สนุกและเข้าใจอะไรหลายๆ อย่างมากขึ้นบ้าง
พบว่ามีหลายสิ่งหลายอย่างที่เรามองข้ามไปเยอะมาก
ดังนั้น จึงเอามาสรุปเพื่อดูสิว่า เราเข้าใจมันมากขึ้นบ้างหรือไม่
โดยในหัวข้อแรกที่เปิดมาเลยก็คือ 4 core value ของ XP เลยแล้วกัน
ถ้าแปล core value น่าจะแปลว่า คุณค่าหลัก มั้ง !!! แต่เรียก core value ดีกว่า


ประกอบไปด้วย 4 ข้อ (มันก็ต้อง 4 ข้อสิ)

  • Communication
  • Simplicity
  • Feedback
  • Courage

มาดูกันว่าคุณค่าที่จะได้รับจาก XP programming นั้นเป็นอย่างไรบ้าง

1. Communication
ปัญหาของ project ส่วนใหญ่มากจากคนทำงานไม่พูดคุยกันในสิ่งที่จำเป็น หรือ การพูดคุยที่แย่
ตัวอย่างเช่น programmer ไม่ได้บอกใครเลย เมื่อมีการเปลี่ยนแปลงในเรื่องของการออกแบบระบบ
บางครั้งถามลูกค้าด้วยคำถามที่ไม่ถูกต้อง ทำให้สิ่งที่ทำถูกทิ้งไป
บางครั้ง manager ก็ถาม programmer ด้วยคำถามที่ไม่ถูก ทำให้การรายงานสถานะของ project ผิดไป

ใน XP นั้นช่วยทำให้การพูดคุย สื่อสาร ให้อยู่ที่ทิศทางที่ถูกต้อง ไม่สะเปะสะปะ
โดยมีแนวปฏิบัติต่างให้ ซึ่งต้องพึ่งการพูดคุยอย่างมาก จึงจะได้ผลที่ดี
ตัวอย่างเช่น
unit testing
pair programming
task estimation หรือการประเมินงาน
จากแนวปฏิบัติดังกล่าวช่วยให้ลูกค้า programmer และ manager ต้องพูดคุยในสิ่งที่ถูกที่ควร

2. Simplicity
ความเรียบง่าย นั้นมันไม่ง่ายเลย
มันเป็นสิ่งที่ยากมากที่คุณทำงาน โดยไม่ต้องไปคิดถึงอนาคตมากนัก
เนื่องจากในหัวของทุกๆ คน มีความกลัวอยู่มาก
แต่เมื่อคุณคิดมาก แล้ว cost จากการเปลี่ยนแปลงก็สูงมากตามเช่นกัน

ดังนั้นถ้าคุณพยายามคิดและทำแบบเรียบง่าย มันจะทำให้คุณแก้ไขง่าย
และใช้ cost ในการแก้ไขตามการเปลี่ยนแปลงน้อยลงไป

คุณจะเริ่มต้นสร้างระบบที่มีความซับซ้อนตั้งแต่เริ่มต้นพัฒนา
โดยหลายๆ อย่างมันก็ไม่เคยถูกใช้เลย
หรือจะเริ่มต้นจากความเรียบง่าย

ความเรียบง่ายและการพูดคุยกันนั้น มีความสัมพันธ์ต่อกัน ดังนี้
ถ้าพูดคุยกันมากหรือดีพอ ก็จะทำให้เห็นถึงความต้องการของลูกค้าที่ชัดเจน
รู้ว่างานจะเสร็จเท่าไร อย่างไร รวมทั้งสร้างความเชื่อมั่นต่อกัน
และถ้าระบบมีความเรียบง่ายแล้ว เวลามนการพูดคุยก็จะน้อยลงไป
ส่งผลให้การพูดคุยมีประสิทธิภาพสูงขึ้น

3. Feedback
คือสิ่งที่บอกสถานะปัจจุบันของระบบว่าเป็นอย่างไร
คือสิ่งที่ช่วยดูและรักษาสิ่งที่เราสนใจ

ใน XP นั้นได้เตรียม feedback ในทุกๆ ช่วงเวลา คือ
ในทุกๆนาที ให้เขียน unit testing ของการทำงานต่างๆ ในระบบ
โดยจะได้ feedback มาในทุกๆ นาทีกันเลย ว่าระบบยังทำงานได้อย่างถูกต้องตามที่คาดหวัง

ในแต่ละวันลูกค้าอาจจะส่ง feature มาให้ทีมเพื่อดู
ทางทีมก็จะทำการประเมินและพูดคุย เพื่อบอกว่า feature ที่ส่งมานั้นมีรายละเอียดและคุณภาพที่ดีหรือไม่
ซึ่งเป็น feedback ที่ดีสำหรับลูกค้าเช่นกัน

ในแต่ละสัปดาห์มีการเขียน functional testing เพื่อทดสอบ feature ต่างๆ ในระบบ
ดังนั้นก็จะรู้อยู่เสมอว่า ระบบยังทำงานถูกต้อง

รวมทั้งการ deploy นั้นต้องทำการ deploy บน production server เสียแต่เนิ่นๆ
เพราะว่าจะทำให้เราเจอปัญหาต่างๆ ได้อย่างรวดเร็ว นี่คือ feedback รูปแบบหนึ่ง
ไม่เช่นนั้นจะเจอเหตการณ์ Hell Deployment

Feedback ที่มีคุณภาพ ยิ่งมีมากเท่าไร ก็ยิ่งทำให้การพูดคุยมีคุณภาพมากขึ้นเท่านั้น
และการพูดคุยจะง่ายยิ่งขึ้น
ส่วนการสร้าง feedback ที่ดี ก็มาจากการคิดและทำที่เรียบง่าย เช่น
ถ้าระบบมันเรียบง่ายก็จะทำการเขียนการทดสอบง่าย
ทำให้เราสนใจการทำงานของระบบมากขึ้น

4. Courage 
ความกล้า ?
คุณกล้าแก้ไขระบบของคุณในช่วงใกล้ deadline ไหม ?
โดยคุณมาพบว่า ถ้าไม่แก้ไขนะ ระบบพังแน่ๆ !!

ปัญหานี้มันสะท้อนว่า
ระบบคุณมี feedback ที่แย่
ระบบคุณมีความซับซ้อน
การพูดคุยในทีมแย่

ดังนั้นเมื่อเราพบว่า มีสิ่งใดที่แย่ ก็ต้องกล้าที่จะพูดและทำ
รวมถึงกล้าเข้าไปแก้ไขปัญหานั้นให้หมดไปซะ

กล้าที่จะโยนหรือลบ code ทิ้งไป
แล้วพบว่ามันไม่ดี
ถึงแม้คุณจะใช้เวลาทั้งวันสร้างมันขึ้นมา

หรือถ้าพบว่า ระบบที่กำลังทำนั้นมันมีความซับซ้อนที่สูงขึ้นมากๆ
ควรกล้าที่จะพูดให้คนอื่นๆ ได้ทีมได้รู้
เพื่อให้เห็นปัญหาและทางแก้ไขร่วมกัน

ดังนั้นจะพบว่า core value ทั้ง 3 ข้อ จะส่งผลให้เกิดความกล้าต่างๆ ได้อย่างดี

โดยสรุปแล้วคุณค่าทั้ง 4 ข้อของ XP นั้นสัมพันธ์กันอย่างมาก
ถ้าขาดอย่างใดอย่างหนึ่งไป ต้องเสียบางสิ่งบางอย่างไปเช่นกัน