Screen Shot 2558-01-27 at 11.05.31 AM
ใน Agile Manifesto นั้นมีข้อหนึ่งกล่าวไว้ว่า

Working Software over comprehensive document

ยังไม่พอนะ ใน Principle ก็ยังมีอีก 2 ข้อคือ

  • 3. Delivery working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale (ส่งมอบ Working software บ่อยๆ)
  • 7. Working software is the primary measure of progress ( Working software คือ ตัวชี้วัดหลักของ progress ของการพัฒนา)

เป็นแนวคิดและแนวปฏิบัติที่ดีมากๆ และ ทุกๆ คนย่อมเห็นด้วย และ ปฏิบัติตามอย่างแน่นอน

แต่ปัญหามันอยู่ตรงที่
เมื่อเราส่งมอบ Working software แล้ว
เรากลับพบว่า Working software นั้นมันมีคุณภาพที่ต่ำมากๆ
ทำให้สิ่งที่เราคิดว่ามันดี กลับกลายเป็น Legacy code ที่เราๆ ท่านๆ เกลียดยิ่งนัก
ทำไมถึงเป็นแบบนี้ล่ะ ? น่าคิดนะ

ในปัจจุบันนั้น

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

แต่เมื่อมาดูคุณภาพของ Working software นั้น
กลับพบว่ามีคุณภาพที่แย่ หรือ ห่างไกลจากคำว่า คุณภาพที่ดีเหลือเกิน
นั่นคือ คุณกำลังสร้าง Legacy code ขึ้นมา
และอยู่กับมันทุกๆ วัน
และก็เรียกมันว่า Working software !!

ไม่เชื่อลองกลับไปดู Working software ของคุณสิว่า

  • ยากไหม ในการเพิ่ม feature ใหม่ๆ เข้าไป ?
  • ใช้เวลานานไหม ในการเพิ่ม feature ใหม่ๆ เข้าไป ?
  • คุณกลัวไหม ที่ต้องเข้าไแก้ไข code ?
  • code ของระบบที่คุณสร้าง มันผูกมักกันมากไหม ?
  • code ที่คุณสร้าง มีชุดของการทดสอบที่ดีไหม ?
  • code ที่คุณสร้าง มีชุดการทดสอบที่ทำงานแบบอัตโนมัติไหม ?
  • คุณยังต้องทำการทดสอบแบบ manual ด้วยเวลานานๆ หรือไม่ ?
  • เมื่อคุณทำการ deploy ระบบงานไปยังเครื่อง UAT (User Acceptance Test) แล้วคุณยังต้องทดสอบเองใช่ไหม ?

แล้วสิ่งที่คุณทำอยู่นั้น คุณเรียกมันว่า Working Software ใช่ไหม ?

แล้วคำว่า Working Software มันคืออะไรกันแน่ ?
จากคำถามด้านบน น่าจะพอทำให้เห็นนิดหน่อยว่า
สิ่งที่เราทำกันอยู่มันควรเรียกว่า Working Software หรือไม่ ?
หรือมันเพียงพอหรือยังที่จะเรียกว่า Working Software ?

คุณคงไม่สามารถยอมรับการส่งมอบ software
ที่ต้องใช้เวลาในการสร้างนานๆ
ที่ต้องใช้เวลาในการทดสอบแบบ manual นานๆ
ที่ต้องทำการแก้ไข bug นานๆใช่ไหม ?

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

แล้วแบบนี้คุณจะเรียกสิ่งที่คุณสร้างว่า Working Software อยู่อีกหรือ !!

ดังนั้นขอแนะนำว่า

จากหนังสือ The Pragmatic Programmer กล่าวไว้ว่า

Rather than construction,
programming is more like gardening

คำอธิบาย
Code ที่เราสร้างมันคือสิ่งที่มีชีวิตเหมือนกันพันธุ์ไม้ในสวน ไม่ใช่เครื่องจักร เครื่องยนต์
ดังนั้น code มันต้องการการดูแลรักษาอยู่อย่างสม่ำเสมอ

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

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

ดังนั้น Working Software มันต้องมีคุณภาพที่สูงอยู่เสมอครับ
ไม่ใช่เพียงแค่ส่งมอบเร็ว และ บ่อยๆ เท่านั้น

Tags: