จากการแบ่งปันเรื่องของ Software Architecture และ Microservices นั้น
มีตัวอย่างจากการทำ workshop ออกมาเป็นดังรูป
คำถามที่น่าสนใจคือ มันดีไหม ?
แน่นอนว่าตอบไม่ได้ แต่เราต้องขอข้อมูลส่วนอื่น ๆ เพิ่มเติม
ทั้ง functional และ non-functional requirement ของระบบงาน
ตลอดจนข้อจำกัดต่าง ๆ

แต่สิ่งที่เราจะมา review กัน มองในมุมของ plan for failure และ coupling ของแต่ละ service
ซึ่งอาจจะก่อให้เกิดปัญหาตามก็ได้ ดังนี้
- ในการ deploy ไม่สามารถแยก deploy ได้ ต้องมีการเรียงลำดับการ deploy เสมอ
- การเรียกไปยัง service อื่น ๆ แบบ synchronous หรือ request/response ถ้าจัดการไม่ดี อาจจะทำให้มีปัญหาได้ เช่น บาง service ช้า หรือ มีปัญหา อาจจะทำการ service ที่เรียกใช้งานมีปัญหาไปเรื่อย ๆ หรือปัญหาไฟลามทุ่งได้ (cascasing failure) ดังนั้นอาจจะต้องมองเรื่องของ timeout/retry/circuit breaker/bulk head หรือไม่ ?
- มีการเรียก service ไปมา อาจจะทำให้เป็นวงกลมได้อีก (circular dependency) จะทำให้เกิดปัญหาในการเพิ่มหรือแก้ไขหรือไม่ ?
- เมื่อมีการเปลี่ยนแปลง service หนึ่ง ทั้ง logic และ โครงสร้างของข้อมูล อาจจะทำให้ service อื่น ๆ ที่เรียกใช้งานมีปัญหาได้
- เมื่อต้องการแก้ไขสัก 1 feature แต่ต้องไปแก้ไขหลาย ๆ service หรือ ต้องมีการทำงานร่วมกันของหลาย ๆ ทีม มันคือ overhead ของการทำงานร่วมกัน (communication and collaboration) มันคือปัญหาของการแบ่ง service หรือไม่ ?
- การจัดการเรื่องความถูกต้องของข้อมูล จะทำอย่างไร ? จัดการ transaction อย่างไร ? จัดการปัญหาเรื่อง duplication data อย่างไร ?
- มีแนวทางในการทดสอบอย่างไร ?
- จัดการเรื่อง operation อย่างไร ? ทั้งการ deploy, monitoging, observability (metric, trace, log), scaling, security อย่างไร ? เมื่อเกิดปัญหาสามารถเข้าถึงจุดเกิดเหตุได้รวดเร็ว และ MTTR ดีขึ้นไหม (Mean-Time-To-Recover)
แต่สุดท้ายกลับมาที่ความต้องการของระบบงาน
ว่ามีความต้องการอย่างไร ?
เพื่อเลือกวิธีการให้เหมาะสม
