SoftwareReleaseComic2
เมื่อปรับเปลี่ยนขั้นตอนการพัฒนา Software มาเป็นแบบ iteration-based เช่น Scrum
นั้นมักจะบอกว่า เราต้อง Release Software ที่พัฒนาบ่อยๆ นะ
เนื่องจากเราต้องการ feedback จากผู้ใช้งาน เพื่อนำมาปรับปรุงการพัฒนาอยู่อย่างเสมอ

แนวคิดนี้มันดีนะ … แต่

บางคนอาจจะบอกว่า

ระบบของเราไม่สามารถ Release ได้บ่อยๆ หรอกนะ
เพราะว่า จะกระทบต่อผู้ใช้งาน
ผู้ใช้งานก็ไม่ต้องการระบบที่มีการเปลี่ยนแปลงอยู่บ่อยๆ

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

  • ไม่สามารถติดตั้ง Software ที่สร้างไปยัง Hardware ได้ เนื่องจากต้องรอให้ Hardware ผลิตเสร็จก่อน
  • หรือว่า เรายังไม่มีงบ ซื้อ Hardware ใหม่นะ รอไปก่อน เป็นต้น
  • หรือว่า ระบบเราทำแบบนั้นไม่ได้หรอก เพราะว่าต้องรอระบบอื่นๆ อีกมากมาย
  • หรือมีเหตุผลอีกร้อยแปดพันเก้า

ประเด็นมันไม่ใช่ตรงนั้น !!

ประเด็นก็คือ เราต้องการ Release software แบบเล็กๆ บ่อยๆ
เพื่อให้เรารู้ว่า สิ่งที่เราสร้างขึ้นมานั้นมันใช่จริงๆ

เราไม่ต้องการ การมานั่งคอยแก้ไขหลังจากที่ Release software ไปแล้ว
เพราะว่ามันบอกว่า Software ที่เราสร้างนั้นมันยังไม่ Done จริงๆ นะ
แน่นอนว่า สิ่งที่แก้ไขมันมีจำนวนมากมายแน่นอน
ยิ่งถ้าเขียนการทดสอบในระดับต่างๆ ไว้ไม่ดี ก็ยิ่งเพิ่มความลำบากเข้าไปใหญ่

บ่อยครั้งที่เรามักจะมีกิจกรรม ดังภาพ สำหรับการ Release software มันไม่สนุกเลยนะ !!
DSCI-PR-2012-11-08-Garden

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

แล้วทำอย่างไรล่ะ ?

ทำการ Release software แบบให้คนภายในใช้ไงล่ะ หรือ Internal Release
ทำให้ลูกค้าเราเห็น และ ลองใช้งาน เฉพาะคนภายในก่อน
แต่ระบบการทำงานต่างๆ เอาให้เหมือนหรือใกล้เคียง production server ให้มากที่สุด
หรือถ้าเหมือนได้เลยจะดีมากๆ

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

ดังนั้นการ Release มันจะเกิดขึ้นอยู่บ่อยๆ เช่นทุกๆ 2 สัปดาห์
เมื่อทาง Business ต้องการที่จะ Release ออกไปข้างนอก (External Release) เพื่อให้ผู้ใช้งานใช้
ก็สามารถทำได้ทันที ไม่ต้องทำอะไรมากมาย
เพราะว่า Software พร้อมอยู่เสมอ
ส่งผลให้การ Release software ให้คนภายนอกใช้แบบ Big Bang มันดูดีขึ้น
ไม่ใช่เป็นการ Release แบบ Big Bugs and Many Bugs
ซึ่งมันจะส่งผลต่อผู้ใช้งานโดยตรง คุณว่าไหม !!

สุดท้ายแล้ว

ขอให้แยกระหว่าง External Release กับ Internal Release ออกจากกันโดยที่

  • External Release นั้นขึ้นอยู่กับการตัดสินใจของฝั่ง business
  • Internal Release นั้น ทีมพัฒนาสามารถทำได้อยู่ตลอดเวลา

และการที่จะ Release ได้บ่อยๆ นั้น
ต้องการการวางแผนที่ดี
ต้องการการแบ่ง feature ย่อยๆ ที่ดี
ต้องการ technical practice ที่ดี

ปล.
ผมเชื่อว่าผู้ใช้งานนั้นไม่ได้กลัวเรื่องการ Release software บ่อยๆ หรือมีการเปลี่ยนแปลงบ่อยๆ
แต่คนที่หวาดกลัวก็คือ ผู้สร้าง หรือ เจ้าของ Software นั่นเอง