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

     เมื่อเราเขียนไดอะแกรมระบบของเรา สิ่งที่เราต้องการจะทำจริงๆคือเราต้องการให้ผู้มีส่วนได้ส่วนเสียได้เห็นมุมมองที่แตกต่างกันว่าระบบที่ได้จะมีหน้าตาเป็นอย่างไร และวิธีหนึ่งในการทำเช่นนี้คือการใช้ไดอะแกรมแบบ UML (Unified Modelling Language) ไดอะแกรมแบบ UML สามารถแบ่งออกเป็น 2 แบบคือ ไดอะแกรมที่ใช้แสดงโครงสร้างของโปรแกรม (structural diagram) และไดอะแกรมที่ใช้แสดงพฤติกรรมของโปรแกรม (behavioral diagram) ไดอะแกรมทั้ง 2 แบบสามารถแบ่งออกเป็นไดอะแกรมชนิดย่อยๆได้อีกเพื่อแสดงถึงส่วนหนึ่งหรือส่วนย่อยของระบบโดยรวม เพื่อให้ทำความเข้าใจและจัดการได้ง่ายขึ้น

     ไดอะแกรมที่ใช้แสดงโครงสร้างของโปรแกรมสามารถแบ่งออกเป็นชนิดย่อยได้เป็น (1) ไดอะแกรมของแพคเกจ (package diagram) : เป็นไดอะแกรมที่ใช้แสดงแพคเกจหรือโมดูลย่อยของระบบงานและความสัมพันธ์ของแต่ละแพคเกจหรือโมดูลกับระบบงาน (2)ไดอะแกรมของคลาส (class diagram) เป็นไดอะแกรมที่แสดงรายละเอียดของคลาสและความสัมพันธ์ของคลาสกับระบบงาน ไดอะแกรมของออบเจกต์ (object diagram) เป็นไดอะแกรมที่แสดงข้อมูลและสถานะในขณะใดขณะหนึ่งของออบเจกต์และความสัมพันธ์ที่มีต่อระบบงาน (3) ไดอะแกรมแสดงส่วนประกอบของระบบงาน (component diagram) เป็นไดอะแกรมที่แสดงส่วนประกอบต่างๆของระบบงานและความสัมพันธ์ที่มีต่อระบบงาน (4) ไดอะแกรมแสดงรายละเอียดของส่วนประกอบ (composite structure diagram) เป็นไดอะแกรมที่แสดงรายละเอียดภายในของคลาสหรือส่วนประกอบและการเชื่อมต่อระหว่างกัน (5) ไดอะแกรมการติดตั้ง (deployment diagram) เป็นไดอะแกรมแสดงส่วนประกอบทั้งฮาร์ดแวร์และซอฟต์แวร์ที่ต้องใช้รวมถึงขั้นตอนการติดตั้งระบบงาน

     สำหรับไดอะแกรมที่ใช้แสดงพฤติกรรมของโปรแกรมนั้นมีหลายแบบและแต่ละแบบก็สามารถแบ่งออกเป็นชนิดย่อยๆได้อีกมากมาย สำหรับไดอะแกรมที่ถูกใช้บ่อย เช่น (1) ไดอะแกรมการใช้งาน (use case diagram) เป็นไดอะแกรมที่แสดงพฤติกรรมของโปรแกรมในมุมมองของผู้ใช้งาน (2) ไดอะแกรมแสดงกิจกรรม (activity diagram) เป็นไดอะแกรมที่แสดงกิจกรรมและการทำงานของระบบ แบ่งออกเป็น #ไดอะแกรมแสดงสถานะ (state machine diagram) ซึ่งแสดงสถานะและค่าที่เปลี่ยนไปของออบเจกต์และระบบงาน #ไดอะแกรมการสื่อสาร (communication diagram) เป็นไดอะแกรมที่แสดงการเชื่อมต่อโต้ตอบระหว่างออบเจกต์และระบบงาน #ไดอะแกรมลำดับการทำงาน (sequence diagram) เป็นไดอะแกรมที่แสดงลำดับการทำงานร่วมกันของแต่ละออบเจกต์ในระบบงาน (3) ไดอะแกรมแสดงการทำงานร่วมกัน (interaction overview diagram) เป็นไดอะแกรมที่แสดงกิจกรรมและลำดับการทำงานร่วมกันของแต่ละออบเจกต์เพื่อแสดงภาพรวมของพฤติกรรมของระบบงาน (4) ไดอะแกรมแสดงเหตุการณ์ (timing diagram) เป็นไดอะแกรมที่แสดงข้อความและเหตุการณ์ที่จะเกิดในแต่ละช่วงเวลา 

     แต่ละชนิดของไดอะแกรมมีจุดแข็งและมีประโยชน์กับผู้ที่เกี่ยวข้องที่แตกต่างกันไป เพราะแต่ละไดอะแกรมจะเน้นการแสดงข้อมูลด้านหนึ่งด้านใดโดยเฉพาะ เช่น ทีมพัฒนาจะสนใจรายละเอียดของคลาสเพราะจะช่วยให้เห็นว่าต้องสร้างคลาสอะไรบ้าง ส่วนทีม DevOps จะสนใจว่าคลาสทำงานร่วมกันอย่างไร สิ่งที่สำคัญคือทุกๆไดอะแกรมจะต้องสอดคล้องกันเพราะถ้าทีมพัฒนาเพียงแค่ดูไดอะแกรมเดียวและพัฒนาไปตามไดอะแกรม แต่ไดอะแกรมนั้นไม่สอดคล้องกับไดอะแกรมอื่นก็จะมีปัญหาเมื่อนำระบบไปใช้งาน ในขณะเดียวกันการตรวจสอบความไม่สอดคล้องกันระหว่างไดอะแกรม บางครั้งก็ช่วยให้เห็นปัญหาสำคัญเกี่ยวกับการออกแบบของเราเองด้วย เช่น เราตรวจสอบไดอะแกรมลำดับการทำงานแล้วพบว่ามีการแลกเปลี่ยนข้อมูลระหว่างคลาสแต่พบว่าในทางปฏิบัตินั้นทำไม่ได้ เราอาจจะต้องกลับไปแก้ไขไดอะแกรมของคลาสหรือต้องไปออกแบบใหม่เลยก็เป็นได้