จากการแบ่งปันเรื่องของ Microservices คำถามหนึ่งที่มักได้รับคือ
เราจำเป็นต้องปรับปรุงหรือเปลี่ยนแปลงอะไรบ้าง ?
เพื่อให้สามารถนำแนวคิดของ Microservices มาใช้งานได้อย่างดี
ผมจึงทำการแนะนำในเรื่องของ คน, skill และ process ที่ควรต้องมี
โดยเน้นในเรื่องของ feedback ที่รวดเร็วและมีคุณภาพไว้ดังนี้
การพัฒนาระบบ software ที่มีคุณภาพนั้น
ไม่ใช่เรื่องที่ง่าย
เนื่องจากต้องการแนวปฏิบัติต่าง ๆ และประสบการณ์มากพอควร
แต่บ่อยครั้งเราอาจจะมองว่า
มีงานที่เพิ่มเข้ามาอาจจะทำให้งานล่าช้าและไม่ทัน deadline แน่นอน
ดังนั้นเราจึงมักจะไม่ทำหรือละทิ้งไป !!
การแก้ไข ดูแลรักษายากขึ้นเรื่อย
หรือบางครั้งอาจจะพูดว่ามีหนี้เชิงเทคนิคสูงขึ้น
นั่นทำให้
ทีมต้องใช้เวลาในการพัฒนาสูงขึ้น
Software ที่พัฒนาออกมามีข้อผิดพลาดสูงขึ้น
เมื่อเกิดเหตุการณ์นี้บ่อย ๆ แล้ว
ผลที่ตามมาคือ เกิดความกลัวเมื่อต้องแก้ไข
การปรับปรุงให้มันดีขึ้น จึงไม่มีใครอยากจะทำ
เพราะว่าไม่รู้ว่า แก้ไขหรือปรับปรุงไปแล้ว จะไปกระทบการทำงานหรือไม่ !!!
ดังนั้นใครที่บอกว่า
เดี๋ยวจะกลับมาแก้ไขให้ดีขึ้น
บอกได้เลยว่า คือการโกหกล้วน ๆ
นี่คือปัญหามักจะเจอมาก ๆ ในการพัฒนา software หรือไม่ ?
ว่าด้วยเรื่องของคุณภาพของ software ล้วน ๆ
การแก้ไขปัญหาพื้นฐาน แบ่งเป็นกลุ่ม ๆ ดังนี้
- กำหนด Development process, Technology และ เครื่องมือ ซึ่งคนทำงานหรือเกี่ยวข้องจะต้องกำหนดขึ้นมา
- รูปแบบพื้นฐานของเอกสารที่เป็นประโยชน์ ทั้ง API document, อธิบายการใช้งาน เช่น Wiki หรือพวก Makedown เป็นต้น
- กำหนดรูปแบบของ coding standard และต้องนำไปใช้งานด้วยเสมอ
- กำหนดเครื่องมือพวก Static code analysis สำหรับตรวจสอบ code smell ได้อย่างทันที เช่น SonarQube เป็นต้น
- ชุดการทดสอบแบบอัตโนมัติ ตั้งแต่ unit, integration, component, contract ไปจนถึง end-to-end test
- สร้าง environment สำหรับการพัฒนาที่เหมาะสม ให้เหมือนหรือคล้ายกับ production มากที่สุด เพื่อลดความผิดพลาด
- สร้าง process ของการส่งมอบ software หรือ Delivery pipeline
ส่วนที่สำคัญมาก ๆ คือ Delivery pipeline
เป็นการรวมเอาการทำงานต่าง ๆ
มาร้อยเรียงเป็นขั้นตอนการทำงานแบบอัตโนมัติ
ปรับเปลี่ยนมาจากขั้นตอนที่เป็นแบบ manual นั่นเอง
เริ่มตั้งแต่มีการเปลี่ยนแปลง
ทั้ง code, configuration, environment
ต้องทำงานตามขั้นตอนหรือ stage ที่ตกลงร่วมกัน
เพื่อปรับปรุงคุณภาพของ software ที่พัฒนา
และพร้อมที่จะส่งมอบอยู่ตลอดเวลา
ยกตัวอย่างเช่น
- build
- Static code analysis
- Unit test
- Integration test
- Acceptance test
- Deployment
- Security test
- Performance test
แต่ทั้งหมดนี้จะเกิดขึ้นไม่ได้เลย
ถ้าแต่ละคนที่เกี่ยวข้องไม่เห็นคุณค่าหรือความจำเป็น
ดังนั้นคนจึงมีความสำคัญอย่างมาก
ลองนำไปใช้ในการปรับปรุงดูครับ