Untuk menjelaskan ini dengan benar, kita perlu pelajaran sejarah singkat. Pada masa awal rekayasa perangkat lunak, analogi yang sering digunakan adalah membangun rumah. Seorang arsitek dan insinyur struktur mendiskusikan rencana dengan pelanggan dan membuat desain. Pembangun kemudian mengikuti desain itu untuk membangun rumah yang sebenarnya. Menulis kode dipandang setara dengan membangun rumah yang sebenarnya. Dengan demikian, ada kebutuhan yang dirasakan untuk desain di muka sebelum membangun itu bisa terjadi. Berbagai alat desain grafis dibuat, dengan UML menjadi salah satunya.
Ide awalnya dengan UML, adalah bahwa seseorang akan sepenuhnya mendesain sistem dengan UML, kemudian menyerahkannya ke coders untuk menerjemahkan desain itu ke dalam kode. Pada kenyataannya, ini tidak berhasil, dan menyebabkan programmer bertahun-tahun dipandang sebagai "pelaksana", bukan "desainer", proyek terlambat, desain harus terus berubah setelah mereka seharusnya selesai dll.
Alasannya sederhana. Pengkodean adalah desain . Dengan analogi rumah, kode adalah gambar arsitek. Compiler adalah pembangun yang mengambil desain itu dan membangun program darinya. Realisasi ini kemudian mengarah pada teknik lincah, TDD dll dilahirkan: alat untuk membantu meningkatkan kualitas desain kode itu.
Sama seperti seorang arsitek dapat menghasilkan sketsa awal untuk membantunya dan timnya memvisualisasikan desain keseluruhan, sehingga pengembang dapat menggunakan UML, atau alat lain, untuk membantu memvisualisasikan desain yang dibutuhkan. Sama seperti sketsa-sketsa itu tidak diikuti secara membabi buta, jadi UML tidak boleh diikuti secara membabi buta. Desain kode harus berkembang dari iterasi gesit dan menggunakan TDD. Demikian juga, seperti halnya arsitek mungkin membangun model rumah untuk membantunya dan timnya memvisualisasikan gambar, sehingga UML dapat digunakan untuk membantu memvisualisasikan struktur kode.
Seperti kata Paman Bob, Anda tidak dapat memvalidasi UML, Anda hanya dapat memvalidasi kode. Oleh karena itu kode adalah dokumentasi desain utama dan UML, jika digunakan, adalah dokumentasi sekunder saja.