แนวคิด Continuous Integration และ Continuous Delivery/Deployment นั้น
เป็นสิ่งที่สำคัญมาก ๆ สำหรับการพัฒนา software
มันไม่ใช่เรื่องของ process เพียงอย่างเดียว
มันไม่ใช่เรื่องของ tool เพียงอย่างเดียว
มันไม่ใช่เรื่องของ culture เพียงอย่างเดียว
มันไม่ใช่เรื่องของทีมพัฒนาเพียงอย่างเดียว
แต่มันคือเรื่องของการเปลี่ยนจาก requirement
มาเป็นสิ่งที่อยู่ในคนใช้หรือสร้างคุณค่าให้กับลูกค้าและบริษัทนั้น ๆ อย่างต่อเนื่องและมีคุณภาพ

แต่ใช่ว่าจะสร้างระบบต่าง ๆ เหล่านี้ขึ้นมาได้ง่าย ๆ

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

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

การเริ่มต้น น่าจะเป็นเรื่องของให้ความรู้ความเข้าใจเรื่อง CI/CD ก่อน

มันคือการปรับเปลี่ยนแนวคิดและวัฒนธรรมขององค์กรกันเลย
ยกตัวอย่างเช่น

  • การจัด session ต่าง ๆ เพื่ออธิบายและแนะนำ พร้อมยกตัวอย่างระบบ เพื่อให้เห็นประโยชน์และคุณค่า
  • มีการพูดคุยจากกลุ่มคนหรือบริษัทต่าง ๆ เพื่อหยิบยก real-world case ให้เห็น
  • มีการจัด workshop หรือ working group สำหรับให้แต่ละกลุ่มมาพูดคุยกัน แบ่งปันความรู้ และ ช่วยเหลือซึ่งกันและกัน

จากนั้นก็เริ่มทำการปรับปรุงด้วยการใช้คำถามที่น่าสนใจ
ยกตัวอย่างเช่น

Development server สามารถสร้างใหม่ได้รวดเร็วเพียงใด ?

ถ้าช้าก็ทำให้การพัฒนาช้าไปด้วย ใช่ไหม ?
ถ้ามันช้า ลองสรุปหน่อยสิว่า ขั้นตอนการทำงานมีอะไรบ้าง ?
ต้องทำ manual process อะไรบ้าง ?
ต้องทำการ configuration อะไรบ้าง ?
เร็วที่สุดต้องใช้เวลากี่ชั่วโมง กี่วัน กี่สัปดาห์ ?

ทดสอบระบบทั้งหมดได้เร็วเพียงใด ?

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

แต่ละ feature ทำการ deploy และ release เร็วเพียงใด ?

ทั้ง feature ใหม่ ๆ
ทั้งการแก้ไข bug
เวลาในการ deploy และ release ช้าลงเรื่อย ๆ จำนวน feature ที่มากขึ้นหรือไม่ ?
มี feature อะไรที่ไม่ใช้งาน แต่ต้อง maintain บ้าง ?

ลองตอบคำถามเหล่านี้กันดู

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

ขอให้สนุกกับการ coding ครับ