อ่านเจอบทความเรื่อง YANIA – You Ain’t Needing It Anymore
ซึ่งน่าสนใจดี เลยเอามาแปลแบบสนุกสนานสักหน่อย

เนื่องจากปกติเคยได้ยินแต่คำว่า YAGNI-You Aren’t Gonna Need It
ซึ่งเป็น principle อย่างหนึ่งของ Extreme Programming (XP)
หมายถึง เราจะสร้างเฉพาะในสิ่งที่เราต้องการหรือจำเป็นเท่านั้น ไม่มีคำว่าทำเผื่อในอนาคต
ซึ่งแนวคิด YAGNI ช่วยทำให้ทีมรักษาความเร็วของทีมเอาไว้ได้
เนื่องจากทีมให้ความสนใจในสิ่งที่ต้องส่งมอบ software ที่มีคุณค่า
ต่อลูกค้าอยู่อย่างสม่ำเสมอเท่านั้น

ส่วน YANIA ถูกนำมาใช้ใน Lean Startup Principle
ดังนั้น มาดูหน่อยว่ามันคืออะไร และ เป็นอย่างไร

จากบทความดังกล่าวอธิบาย YANIA  ไว้ว่า

เริ่มต้นคุณจะมีแนวคิดในการทำธุรกิจที่แจ่มๆ
ซึ่งคุณมักจะสร้างระบบแรกออกมา นั่นคือสิ่งที่เรียกว่า MVP (Minimal Viable Product)
เพื่อทำการทดสอบ และ validate แนวคิดของคุณว่ามันใช่หรือไม่
โดยจะเรียกสิ่งนี่ว่า A1
มันอาจจะยังไม่โดนใจ หรือ มีสิ่งที่ต้องปรับปรุงต่อไป

ทำให้คุณต้องเริ่มคิดใหม่อีกครั้ง ว่าแนวคิดมันควรปรับปรุงอะไรบ้าง
ซึ่งแนวคิดใหม่ที่จะทำ หรือ เพิ่มเข้ามา จะเรียกว่า A2
โดยคุณ กับ เพื่อนๆ อาจจะใช้เวลาไม่กี่วันในการสร้าง MVP A2 ขึ้นมา
และทำการ deploy ระบบไปที่ Cloud platform
ในขณะที่ code ของ A2 อาจจะเหมือนหรือคล้ายกับ A1 ไม่มากก็น้อย
แต่ไม่เป็นไร อาจจะมีการ rework บ้างก็ไม่เป็นไร

A2 ในปล่อยออกไปนั้น อาจจะไม่ประสบความสำเร็จอีก
มันทำให้คุณกับเพื่อนๆ ต้องกลับมาคิดกันใหม่แบบขนานใหญ่เลย
ว่าจะทำอย่างไรดี   ?
ผลก็คือ คุณจะได้ B1 ออกมา
ซึ่งมันจะแตกต่างจาก A1 และ A2 โดยสิ้นเชิง แต่ยังได้รับแรงบันดาลใจจาก A1, A2 อยู่
ดังนั้นทำการพัฒนา MVP อีกรอบ เพื่อเรียนรู้ และ ปรับปรุงไปเรื่อยๆ

และจะพบว่า คุณมักจะทำแบบนี้ไปเรื่อยๆ
จนกว่าคุณจะประสบความสำเร็จตามที่คาดหวัง (ใครยอมแพ้ก็ไม่ว่ากัน)
ซึ่งพบว่า code ที่คุณสร้างขึ้นมานั้น ไม่ได้มีเพียง A1, A2, B1 เท่านั้น
แต่เป็นแบบนี้  A1+A2+A3+B1+B2+C1+C2+C3+C4+D1+D2+D3+D4+D5+D6
เนื่องจากคุณได้ทำการเรียนรู้ วัดผล และเปลี่ยนแปลงไปตลอดเวลา

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

code และ ระบบงาน ดูดีไปหมดนะ แต่เพื่อสนับสนุนเพียงแนวคิดเดียว เช่น D6
แล้ว A1 ถึง D5 ล่ะ  ?
code ที่เราสร้างจะมีไปทำไม ?
น่าคิดนะ ว่าไหม ?

เราจะพบว่า เมื่อเวลาผ่านไปเรื่อยๆ

ความเร็วของทีมมักจะตกลงไปเรื่อยๆ
ในบทความบอกว่า ทีมจะไม่ Agile ต่อไปแล้ว นั่นคือช้าลงไปเรื่อยๆ

ตัวอย่างเช่น

เวลาในการ build และ deploy ระบบงาน
จากที่ A1 อาจจะใช้เวลาเพียง 32 วินาที
แต่เมื่อพัฒนาไปถึง A6 อาจจะใช้เวลา 18 นาที 47 วินาที
ซึ่งพบว่าระบบไม่ได้เพียงแค่ทำการ build code ของ A6 เท่านั้น
ยังทำของ A1 ถึง D5 อีกด้วย  มันน่าเศร้าใจไหม
เพราะว่า เราสนใจเพียง D6 อย่างเดียว …

เมื่อคุณเจอปัญหาว่าการ build และ deploy ในระบบ Continuous Delivery มันช้า
ทางแก้ไขที่ง่ายที่สุดคือ

  • การปิดการทดสอบแบบอัตโนมัติไปซะ ช้าดีนัก
  • หรือ หยุด เขียนการทดสอบมันไปเลย ช้าดีนัก เพราะว่า ทดสอบแบบ manual ดีกว่า เร็วกว่า

มาถึงตรงนี้ คิดว่า คุณและทีมควรที่จะ หยุด (STOP) ก่อนนะ

หยุดเพื่อมาพิจารณาแนวคิดของ You Ain’t Needing It Anymore. YANIA! หน่อยไหม ?

ควรที่จะเลิก หรือ ลบ code ของ A1 ถึง D4 ไปซะ เหลือเพียง D5, D6 ไว้ก็น่าจะพอ !
หรือบางทีอาจจะต้องเก็บ D4 ไว้ด้วย เพราะว่า D5 ใช้งานมันอยู่
ซึ่งในความเป็นจริง บาง feature ใน D2 ได้รับความนิยมสูงมาก
แต่ตัว D2 ทั้งหมดมันแย่ เลยไม่มีใครใช้งาน
หรือบางอย่างใน C2 คนใช้งานชอบมากๆ

ควรที่จะหยุด และ ไปดูใน access log ของระบบสักหน่อย
อาจจะทำให้เรารู้อีกว่า อาจจะมี code บางส่วนจาก B1 ถูกใช้ใน D4 ก็เป็นไปได้

หยุดดูตังเองก่อน ว่าเป็นอย่างไร มักจะพบว่า …

หลังจากที่คุณหยุดมาทบทวน แล้ว ต่อไปที่ต้องดูคือ code คุณมันมั่วซั่วขนาดไหน ?

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

คุณต้องการเครื่องมือบางอย่าง ที่จะมาช่วยคุณ

ค้นหาว่า code ส่วนไหนไม่เคยถูกใช้งานจากผู้ใช้
ค้นหาว่า code ส่วนไหนไม่เคยถูกใช้งานจาก code ในระบบ
ภายในจำนวนวันที่ต้องการ
โดยเรียก code ส่วนนี้ว่า Truely Dead Code
เพื่อทำให้คุณรู้ว่า code ส่วนไหนที่สร้างมา เพื่อสนับสนุนธุรกิจของคุณจริงๆ …

วันนี้ คุณตกอยู่ในสถานะการณ์แบบนี้ไหมล่ะ …

ถ้าใช่ ลอง หยุด แล้วระบบตัวเองก่อนไหม ว่ามี Truely Dead Code ตรงไหนบ้าง
เพื่อจะได้นำส่วนนั้นออกไป