ช่วงหลัง ๆ มานี้มีปัญหาเรื่องการสื่อสาร แล้วก็การทำความเข้าใจภาพ Software Architecture ขององค์กรต่าง ๆ ดูเป็นเรื่องที่ค่อนข้างท้าทายพอสมควร ด้วยความซับซ้อนต่าง ๆ นานา ของ Software แน่นอนว่าภาพเดียวจะอธิบายทุกอย่างของระบบ ๆ หนึ่งไม่ได้

two people drawing on whiteboard
Photo by Kaleidico on Unsplash

เทคนิคหนึ่งที่หยิบนำมาใช้ก็คือ 4+1 View Model ที่ตอนนี้เค้าปรับเป็น N+1 แล้วก็ตาม ผมก็ยังคิดว่าเหมือนยังไม่ครบสมบูรณ์เท่าไหร่ จนกระทั่งมาเจอ C4 Model (ซึ่งจริง ๆ ได้ยินชื่อมานานแล้ว แต่เพิ่งจะมีโอกาสได้เอามาลองใช้จริง) แล้วก็คิดว่านี่แหละ คือ Missing Piece ที่สามารถเข้ามาเติมเต็มได้ ☺️

C4 Model เกิดมาเพื่อแก้ปัญหาเรื่องการวาดภาพ Software Architecture เลย เค้าบอกว่าปกติเวลาที่เราวาดภาพ หรือ Diagram พวกนี้มันจะค่อนข้างกำกวม แล้วก็ผสมปนเปไปกับสัญลักษณ์ต่าง ๆ หรือ Abstraction ต่าง ๆ ร่วมไปถึงภาพพวกนี้ไม่ค่อยมีใครเขียนอธิบายไว้เท่าไหร่ว่าอะไรคืออะไร ทำหน้าที่อะไรบ้าง เป็นต้น

Credit: The C4 model for visualising software architecture

C4 Model เลยหยิบเอาแนวคิดของการดูแผนที่มาใช้ในการสื่อสารภาพ Software Architecture ประมาณนี้

Credit: The C4 model for visualising software architecture

ซึ่งการดูแผนที่เราสามารถที่จะ Zoom In/Out ไปในพื้นที่ ๆ เราสนใจได้ และแนวคิดนี้ก็จริง ๆ แล้วเป็นวิธีที่พวกเราชาว Software Architects/Developers ออกแบบ Software ของเราอยู่แล้วด้วย ซึ่งในหนังสือ 97 Things Every Software Architect Should Know บท Get the 1000ft view ก็สอดคล้องกับเรื่องนี้ด้วยเช่นเดียวกัน

The C4 model is an "abstraction-first" approach to diagramming software architecture, based upon abstractions that reflect how software architects and developers think about and build software.

Abstractions ของ C4 Model จะแบ่งเป็นระดับ ๆ ตามรูปด้านล่าง

Credit: The C4 model for visualising software architecture

C4 Model ประกอบไปด้วย Diagram หลักอยู่ 4 Diagrams

  1. System Context ที่เป็น C ตัวแรก เป็นระดับ Abstraction ที่สูงที่สุดที่จะบอกว่าระบบของเราประกอบไปด้วยระบบอะไรบ้าง เอาไว้สื่อสารในภาพรวม
  2. Container เป็น C ตัวที่ 2 ที่จะมาบอกว่าในระบบนั้น ๆ ประกอบไปด้วย Application หรือ Data Store อะไรบ้าง
  3. Component เป็น C ตัวที่ 3 ที่บอกว่าใน Container นั้น ๆ ประกอบไปด้วย Component อะไร เช่น ถ้า Container ของเราคือ Web API ดังนั้นใน Web API ก็อาจจะประกอบไปด้วย Component อย่างเช่น Controller หรือ Service ต่าง ๆ
  4. Code เป็น C ตัวสุดท้าย ตรงนี้จะเป็นระดับแบบ Class Diagram หรือ Sequence Diagram อะไรพวกนี้ไปเลย ลงลึกที่สุดที่แบบว่าเห็นภาพแล้วน่าจะเพียงพอที่จะหยิบเอาไปเขียนโค้ดต่อได้เลยอะไรประมาณนั้น

ใน C4 Model มีอีกอย่างหนึ่งที่ผมชอบสุด ๆ คือ เค้าไม่เน้นเรื่องสัญลักษณ์หรือ Notation เท่าไหร่ ที่เน้น ๆ คือ “การเขียน” บรรยายว่าแต่ละส่วนทำอะไร แต่ละ Relationship คุยกันอย่างไร ซึ่งตรงนี้จะทำให้เราเข้าใจตรงกันได้อย่างมีประสิทธิภาพมาก ๆ ไม่กำกวม

จริง ๆ C4 Model ยังแฝงเรื่อง Storytelling ไว้ด้วยเช่นกันนะ คือเวลาเราจะสื่อสารภาพ Software Architecture ให้กับคนในองค์กร เราจำเป็นที่จะต้องมีภาพเอาไว้สำหรับสื่อสารกับคนที่มี Background Knowledge ที่แตกต่างกันตามหลักการของ Storytelling ซึ่งการแบ่ง Abstractions เป็นระดับ ๆ ของ C4 Model ตอบโจทย์ตรงนี้มาก