แนวคิด 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 ครับ