ในกระบวนการผลิตซอฟแวร์นั้น มักจะมีการขัดแย้งกันระหว่าง 2 ฝ่ายหลักๆนั่นคือ ฝ่าย Development กับ ฝ่าย Operations ที่แบ่งตามหน้าที่หลักๆในการผลิตซอฟแวร์นั่นคือ ฝ่าย Dev ต้องผลิตซอฟแวร์อย่างรวดเร็วส่งมอบให้ทันเวลา และฝ่าย Ops ต้องดูแลด้านความสเถียรของซอฟแวร์เพื่อมีความผิดพลาดน้อยที่สุด และในกระบวนการผลิตก็จะต้องเลือกระหว่าง
- การเลือกความเสถียรภาพ เพื่อให้งานที่ออกมามีจุดบกพร่องให้น้อยที่สุด เมื่อส่งมอบแล้วได้งานที่มีประสิทธิภาพมีความสเถียรและปลอดภัย เมื่อส่งมอบแล้วเจอปัญหาที่น้อย ส่งรอบเดียวจบเสียเวลามาตามแก้ปัญหาในภายหลังที่น้อยลง แต่มีปัญหาที่กระบวนการผลิตนั้น เป็นไปอย่างเชื่องช้า กว่าจะได้ส่งมอบฟีเจอร์อะไรซักหนึ่งอย่าง
- การเลือกความเร็ว เพื่อให้ส่งมอบได้เร็วๆสามารถผลิตฟีเจอร์ใหม่ๆได้มากขึ้น แต่ต้องแลกกับความสเถียร การส่งมอบรอบนี้อาจมีจุดผิดพลาดเล็กๆน้อยๆที่มองไม่เห็น แต่เมื่อเวลาผ่านไปจุดผิดพลาดทับถมมากขึ้นเรื่อยๆ จนเป็นปัญหาใหญ่อาจทำให้เสียเวลาในการแก้ปัญหามากขึ้นในภายหลัง การเปลี่ยนแปลงเพื่อเพิ่มฟีเจอร์ก็จะเป็นไปได้ยากขึ้นด้วย
DevOps จุดพบกันของทั้ง 2 team
DevOps เป็นแนวคิดการทำงานที่เปลี่ยนรูปแบบระบบการทำงานของทีมโดยมีการเปลี่ยนแปลงที่สำคัญดังนี้
เปลี่ยนเป้าหมายการทำงานจากรับผิดชอบงานของตัวเองเป็นรับผิดชอบทั้งระบบ จากเดิมที่แต่ละฝ่ายมีเป้าหมายการทำงานไม่เหมือนกันเปลี่ยนให้กลายเป็นทีมเดียวกัน ทำงานร่วมกันมากขึ้น มีการรับผิดชอบร่วมกันมากขึ้น ทำให้ทั้ง 2 ฝ่ายสื่อสารกันเข้าใจปัญหาของแต่ละฝ่าย ทุกฝ่ายเข้าใจภาพรวมของงานมากขึ้นทำให้ปัญหา และหน้าที่การแก้ปัญหาไม่ตกไปอยู่ฝ่ายใดฝ่ายหนึ่งเพียงฝ่ายเดียว เช่นฝ่าย Dev เข้าใจว่าสิ่งที่ผู้ใช้ต้องการจริงๆคืออะไร ไม่ใช่ทำตามเพียงคำสั่งที่ได้รับเข้ามา ฝ่าย Ops เข้าใจการทำงานของโปรแกรมมากขึ้นสามารถรู้ได้ทันทีว่าปัญหาของผู้ใช้เกิดขึ้นที่ตรงไหน
เปลี่ยนจากการส่งมอบแบบรอบเดียวจบต่อ 1 งาน เป็นส่งเป็นรอบย่อยๆใน 1 งาน จากเดิมที่ทั้ง 2 ทีมทำหน้าที่กันคนละส่วน งาน 1 งาน Dev ทำงานส่วนของตัวเองเสร็จจึงส่งมอบให้ Ops ไปจัดการติดตั้งแล้วทดสอบต่อทำให้กระบวนการติดตั้งและทดสอบหลักๆสามารถเกิดขึ้นระหว่างการพัฒนา 1 ครั้งเท่านั้น ตอนนี้ต้องเปลี่ยนใหม่เป็น งาน 1 งานย่อยเป็นหลายส่วน เมื่อทำเสร็จส่วนย่อยๆ 1 ส่วน ก็นำไปติดตั้งและทดสอบทันที ทำให้ได้ทดสอบหลายครั้ง ทดลองตั้งค่าหลายครั้ง และได้รับ feedback ทันทีในแต่ละส่วนๆ ทำให้ตรงกับความต้องการจริงๆ ปัญหาไม่เป็นดินพอกหางหมูในตอนท้าย
นอกจากระบบการทำงานดีแล้วเครื่องมือก็เป็นสิ่งสำคัญ
จากเดิมที่แต่ละฝ่ายทำงานแยกกัน ตอนนี้หันมาทำงานร่วมกันแล้ว แต่ก็ยังมีปัญหาที่ไม่สามารถแก้ได้ด้วยระบบการทำงานแต่สามารถใช้เครื่องมือมาช่วยให้การทำงานดีขึ้นได้ เช่น
- ปัญหาที่ว่าตอนทดสอบระหว่างพัฒนามันรัน/ติดตั้งได้แต่ตอนที่ให้คนอื่นทดสอบทำไมมันรัน/ติดตั้งไม่ได้ซะงั้น?
ปัญหานี้เกิดจากสภาพแวดล้อมของการทำงานโปรแกรมของแต่ละเครื่องนั้นอาจไม่เหมือนกัน ทำให้โปรแกรมทำงานต่างกัน เราสามารถใช้เครื่องมืออย่าง container ที่จำลองสภาพแวดล้อมที่เหมาะสมให้กับโปรแกรมมาช่วยตรงจุดนี้ สภาพแวดล้อมในระหว่างที่โปรแกรมทำงานของผู้พัฒนากับผู้ทดสอบหรือผู้ใช้เหมือนกันแน่นอน สามารถไปรันที่ไหนก็ได้ส่งมอบได้อย่างไม่มีปัญหา
- ตัวช่วยในการทำงานแบบ automation เองก็สำคัญ เพื่อลดการทำงานที่ซ้ำซ้อน เช่น การทดสอบในส่วนนี้มีการทดสอบเกิดขึ้นแล้ว การส่งส่วนงานชิ้นถัดไปก็ต้องมาทดสอบส่วนนี้อีก ถ้าเรามีตัวช่วยในการทดสอบส่วนที่ซ้ำซ้อนนี้ก็สามารถช่วยได้มาก
สรุปแล้ว DevOps ก็คือแนวทางอีกแนวทางหนึ่งของระบบการพัฒนาซอฟแวร์ ที่ลดปัญหาการทำงานแบบเดิมที่ต้องเลือกระหว่างความเสถียรภาพกับความเร็วในการส่งมอบ ด้วยการค่อยๆส่งทีละส่วนทำให้ Ops ได้ทดสอบระบบได้บ่อยขึ้น ลูกค้าได้เห็นชิ้นงานได้ถี่ขึ้น Dev ก็สามารถรับ feedback ได้มากขึ้น ทำให้การพัฒนารวดเร็วแต่ก็มีความสถียรภาพได้นั่นเอง