จากการแบ่งปันเรื่องของ 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 ที่พัฒนา
และพร้อมที่จะส่งมอบอยู่ตลอดเวลา
ยกตัวอย่างเช่น

  1. build
  2. Static code analysis
  3. Unit test
  4. Integration test
  5. Acceptance test
  6. Deployment
  7. Security test
  8. Performance test

แต่ทั้งหมดนี้จะเกิดขึ้นไม่ได้เลย
ถ้าแต่ละคนที่เกี่ยวข้องไม่เห็นคุณค่าหรือความจำเป็น
ดังนั้นคนจึงมีความสำคัญอย่างมาก

ลองนำไปใช้ในการปรับปรุงดูครับ