สิ่งที่น่าสนใจในการพัฒนา software คือ
เราทำการเตรียม environment ต่าง ๆ เช่น
ทั้ง Dev, Test/QA, UAT, Staging, Pre-Prod และ Prod กันตอนไหน ?
ที่สำคัญคือ แต่ละ environment นั้นเหมือนหรือต่างกัน ?
ซึ่งสิ่งต่าง ๆ เหล่านี้มันสะท้อนความสัมพันธ์ระหว่าง
Development team และ Pre/Production team ว่าเป็นอย่างไร ?

ผลที่เกิดขึ้นมาคือ feedback loop ที่จะได้รับ
รวมทั้งการตอบรับจากการเปลี่ยนแปลง
จากทั้ง business และ technical อีกด้วย

ไปอ่านบทความเรื่อง Environment Creation Times in Modern Teams มา

น่าสนใจดีเลยเอามาสรุปสั้น ๆ ไว้นิดหน่อย
เริ่มด้วยรูปนี้

การทำงานของชาว Enterprise โดยอธิบายจากรูปนี้ได้ว่า
นั่นคือจาก business idea ไปสู่การ deploy ระบบบน production environment
จะต้องกำหนดแผนใหญ่ไปยังแผนย่อย ๆ ขนาดเล็ก ๆ
สิ่งที่น่าสนใจคือ เราจะทำการสร้าง environment เพียงครั้งเดียว !!
แต่สิ่งที่เกิดขึ้น หรือ ปัญหาตลอดคือ

  • ใช้เวลานานเท่าไรในการเตรียม environment ต่าง ๆ ?
  • เรา shared environment ต่าง ๆ กันอีก ?
  • environment ต่าง ๆ ดันไม่เหมือนกับ production environment อีก ?

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

  • เปิด request ขอเครื่อง 1 สัปดาห์ เราก็ได้แต่เครื่องเปล่า ๆ
  • เปิด request ขอ OS 1 สัปดาห์ เราก็จะได้ OS เปล่า ๆ
  • เปิดขอ user/password 1 สัปดาห์ เราก็จะได้ user/password มา
  • เปิดขอ firewall ไปยังระบบต่าง ๆ 1 สัปดาห์ เราก็จะได้การ access ไปยังที่เราต้องการ

เปิดขอ x ในเวลา y สัปดาห์ ??? คำถามคือ มันเร็วหรือช้า
มันเป็นการทำเพื่อใคร ?
เพื่อ business ?
เพื่อจะได้ไม่ต้องเปลี่ยนแปลงหรือปรับปรุงอะไร ?
ทีมพัฒนาก็มีปัญหากับทีมต่าง ๆ ที่เตรียม environment ให้อีก ?
ขั้นตอนการทำงานมันก็เยอะ เทอะทะไปหมด ?

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

เมื่อมองดูทีมดีนั้น

จะทำการสร้าง environment ใหม่ ๆ
สำหรับผ่านระบบ Continuous Integration ทุก ๆ ครั้งที่ code หรือ configuration มีการเปลี่ยนแปลง
โดยจะสร้างระบบที่ไม่ใหญ่มาก ๆ แต่ว่าเหมือนหรือใกล้เคียง production environemnt มาก ๆ
ทั้ง version ของ software
ทั้ง configuration ของระบบ
ทั้งระบบ network
เพื่อให้สามารถ build -> test -> deploy ได้ตลอดเวลา
จากนั้นก็จะทำการลบ environment นี้ทิ้งไป

ดังนั้นเวลาในการสร้าง หรือ provisioning environment ต่าง ๆ ช้าเกินนาทีหรือหลายนาที
มันก็ไม่น่าจะดีใช่ไหม
เพราะว่า เรารู้ปัญหาได้ช้า

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

ปล. บางคนอาจจะบอกว่า แค่ได้เครื่องมาก็บุญแล้ว
ประเด็นคือ ทาง business รู้ไหมว่า ทีมพัฒนามีปัญหาแบบนี้ ??