Screen Shot 2558-06-05 at 11.30.04 AM
เพิ่งอ่านบทความเรื่อง Yagni จาก bliki ของคุณ Martin Fowler จบ
ได้อธิบายแนวปฏิบัตินี้อย่างละเอียด
ทำให้เห็นว่า มีความสำคัญอย่างไรในการพัฒนา software
ดังนั้น มาสรุปกันดีกว่า

Yagni คืออะไร

ย่อมาจาก You Are Not Gonna Need It
เป็นแนวปฏิบัติจาก Extreme Programming
เพื่อบอกว่า นักพัฒนาจะไม่เพิ่มอะไรเข้าไปจนกว่ามันจำเป็น หรือ ใช้งานจริงๆ
ดังนั้น สร้างแต่สิ่งที่จำเป็นจริงๆ นะ

แต่ส่วนใหญ่มักจะ เผื่อ ไว้เสมอ !!
ทำไมนะ ?

เป้าหมายหลักของแนวปฏิบัตินี้คือ

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

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

จากบทความข้างต้น อธิบายไว้ว่า

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

โดยผลที่ตามมาสำหรับของการเผื่อ มีอะไรบ้างล่ะ ?

Cost of delay
คือ feature ที่สร้างกว่าจะมีคุณค่า หรือ ทำรายได้มันช้า
น่าจะเอาเวลาไปสร้าง feature ที่มีค่ากว่า ดีกว่าไหม ?

Cost of carry
คือ code ที่เกิดจาก feature ที่เผื่อไว้ มันก่อให้เกิดความซับซ้อน
แถมยากต่อการแก้ไขอีกด้วย
แน่นอนว่า มันก่อให้เกิดค่าใช้จ่ายสำหรับการเพิ่ม feature อื่นๆ อีกด้วย !!

ยังไม่พอนะมันยังมีค่าใช้จ่ายอื่นๆ ตามมาอีก คือ
Cost of repair อีก ส่วนใหญ่มันจะมาจากวิธีการสร้างที่ผิด
ทำให้เกิด technical debt มากมายตามมา ตัวอย่างเช่น
การสร้าง ป่าดงอีฟ(If) ขึ้นมาในระบบ

คุณเคยตรวจดู technical debt ของระบบบ้างหรือไม่ ?
ตัวอย่างเช่น การใช้ Sonar qube มาส่ง code ในระบบ
ขอยืมรูปมาจาก Lorenzo Prempratya Premvijit

11402587_10155593258870005_6019793942708160740_o

และยิ่งถ้าสร้าง feature ผิดๆ หรือ ไม่มีใครต้องการออกไปนะ
ยิ่งจะมีค่าใช้จ่ายในการสร้างอีก คือ Cost of building
มันเสียเวลา และ ค่าใช้จ่ายโดยไม่จำเป็น

โดยสรุปดังรูป

1sketch

ดังนั้น ลองนำแนวปฏิบัติ Yagni ไปใช้งานกันดูครับ

มันสามารถนำไปประยุกต์ใช้ได้ทั้งระบบใหญ่และเล็ก
ซึ่งทุกๆ การตัดสินใจตามแนวปฏิบัติ
มันจะช่วยลดความซับซ้อนของ code ที่คุณจะสร้างขึ้นมา
มันจะช่วยลดเวลาในการพัฒนาลงมา
นั่นหมายถึงคุณสามารถส่งมอบได้รวดเร็วขึ้นนั่นเอง …