เพื่ออธิบายสิ่งนี้อย่างถูกต้องเราจำเป็นต้องมีบทเรียนประวัติย่อ ในวันแรก ๆ ของวิศวกรรมซอฟต์แวร์การเปรียบเทียบที่ใช้บ่อยคือการสร้างบ้าน สถาปนิกและวิศวกรโครงสร้างหารือแผนการกับลูกค้าและออกแบบ จากนั้นผู้สร้างก็ทำตามการออกแบบเพื่อสร้างบ้านที่แท้จริง รหัสการเขียนถูกมองว่าเทียบเท่ากับการสร้างบ้านจริง ดังนั้นจึงจำเป็นต้องมีการรับรู้ถึงการออกแบบด้านหน้าก่อนที่จะมีการสร้าง เครื่องมือการออกแบบกราฟิกต่างๆถูกสร้างขึ้นด้วย UML เป็นหนึ่งในนั้น
แนวคิดดั้งเดิมที่ใช้ UML คือการออกแบบระบบด้วย UML อย่างสมบูรณ์จากนั้นส่งมอบให้กับ coders เพื่อแปลการออกแบบเป็นโค้ด ในความเป็นจริงสิ่งนี้ใช้ไม่ได้และทำให้หลายปีที่โปรแกรมเมอร์ถูกมองว่าเป็น "ผู้ใช้งาน" แทนที่จะเป็น "ผู้ออกแบบ" โครงการที่มาสายการออกแบบที่ต้องเปลี่ยนตลอดเวลาหลังจากที่พวกเขาคาดว่าจะเสร็จสมบูรณ์เป็นต้น
เหตุผลง่าย ๆ การเข้ารหัสคือการออกแบบ ด้วยการเปรียบเทียบบ้านรหัสเป็นภาพวาดของสถาปนิก คอมไพเลอร์เป็นผู้สร้างที่ใช้การออกแบบเหล่านั้นและสร้างโปรแกรมจากพวกเขา การรับรู้นี้นำไปสู่เทคนิคเปรียว TDD ฯลฯ ที่เกิด: เครื่องมือที่จะช่วยปรับปรุงคุณภาพของการออกแบบรหัสนั้น
เช่นเดียวกับสถาปนิกอาจสร้างภาพร่างเบื้องต้นเพื่อช่วยให้เธอและทีมของเธอเห็นภาพการออกแบบโดยรวมดังนั้นนักพัฒนาอาจใช้ UML หรือเครื่องมืออื่น ๆ เพื่อช่วยให้เห็นภาพการออกแบบที่ต้องการ เช่นเดียวกับภาพร่างเหล่านั้นที่ไม่ได้ติดตามอย่างสุ่มสี่สุ่มห้าดังนั้น UML จึงไม่ควรถูกสุ่มสี่สุ่มห้า การออกแบบรหัสควรพัฒนาจากการทำซ้ำแบบว่องไวและการใช้ TDD LIkewise ในฐานะสถาปนิกอาจสร้างแบบจำลองของบ้านเพื่อช่วยให้เธอและทีมงานของเธอเห็นภาพวาดดังนั้น UML สามารถใช้เพื่อช่วยให้เห็นภาพโครงสร้างของโค้ด
ตามที่ลุงบ็อบกล่าวว่าคุณไม่สามารถตรวจสอบ UML ได้คุณสามารถตรวจสอบรหัสได้เท่านั้น ดังนั้นรหัสจึงเป็นเอกสารการออกแบบที่สำคัญและถ้ามีการใช้ UML จะเป็นเอกสารประกอบรองเท่านั้น