จากหนังสือ Monolith to Microservices นั้น
มีเรื่องเล็ก ๆ อธิบายเรื่อง Reuse ? หรือแปลว่า การใช้ซำ้

เราใช้ซ้ำเมื่อใด และเมื่อใดเราถึงใช้ซ้ำ
และเราสร้างส่วนที่ใช้ซ้ำตอนไหน ?

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

การ reuse นั้น เกิดจากความเชื่อ ความหวังที่ว่า

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

ลองกลับมาที่เป้าหมายกันก่อน

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

มาดูตัวอย่างของการ reuse กันบ้าง

ในกรณีที่เรามี Customer service เพื่อจัดการเกี่ยวกับ customer
ซึ่งต้องการสร้าง report ในรูปแบบของ PDF
แน่นอนว่าในระบบงานของเราก็มี  Report service ให้ใช้งานอยู่แล้ว
เพียงแค่เราต้องไปติดต่อทีมที่ดูและ Report team 
เพื่อให้สร้าง report ตามที่เราต้องการเท่านั้นเอง

ปัญหาที่มักตามมาคืออะไร ?

Customer service นั้นจะต้องยก logic ของการออก report ไปให้ Report service
ดังนั้น ถ้าจะทำอะไร ก็ต้องติดต่อและพูดคุยกับทีม Report service เสมอ
ที่น่าสนใจคือ
ใคร ๆ ก็ใช้ Report service
ดังนั้นตารางงานของทีมนี้ก็ยุ่ง
ไม่ค่อยเป็นไปตาม timeline ของ Customer service
มันคือปัญหาของ coordination กันไหมนะ ?
มันทำให้เราพัฒนาและส่งมอบงานได้เร็วจริงตามเป้าหมายหรือไม่นะ ?
ลดค่าใช้จ่ายจริง ๆ ไหมนะ 
ทั้งเวลาติดต่อ 
ทั้งเวลาที่รอ 
ทั้งเวลาที่ integrate กัน 
ทั้งการแก้ไข ที่กระทบไหมนะ
มันคือค่าใช้จ่ายที่สูงทั้งหมดไหมนะ

แทนที่จะเอาเวลาไปใช้กับการพัฒนาและเปลี่ยนแปลง
แต่ต้องมาเสียเวลาในการพูดคุยและวางแผนระหว่างทีม
มันตรงตามเป้าหมายหรือไม่นะ ?
ตรงนี้น่าคิดมาก ๆ

ดังนั้นถ้าเรากำลังสนใจเรื่องของการพัฒนาและส่งมอบที่รวดเร็วขึ้น

น่าจะเอางานส่วนของ PDF report มาทำเองใน Customer service เลยดีไหม
แต่ถ้าสนใจเรื่องของ reuse ก็เอาไปไว้ใน Report service เช่นเดิม !!

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

อ้างอิงจาก SOA Manifesto ก็น่าสนใจ