Щоб правильно пояснити це, нам потрібен короткий урок історії. У перші дні інженерії програмного забезпечення часто використовувалася аналогія будувала будинок. Архітектор та інженер-конструктор обговорюють плани із замовником та придумують дизайн. Потім будівельники слідують цій конструкції, щоб побудувати власне будинок. Письмовий код розглядався як еквівалент будівництву фактичного будинку. Таким чином, виникла потреба у розробці передньої конструкції до того, як могла відбутися збірка. Були створені різні інструменти для графічного дизайну, одним з яких був UML.
Первісна ідея UML полягала в тому, щоб повністю розробити систему з UML, а потім передати її кодерам, щоб перевести цю конструкцію в код. Насправді це просто не працює, і це призвело до того, що роки програмістів розглядаються як "реалізатори", а не як "дизайнери", проекти запізнюються, проекти повинні постійно змінюватися після того, як вони повинні були бути завершеними і т.д.
Причина проста. Кодування - це дизайн . З аналогією будинку, код - це креслення архітектора. Компілятор - це той будівельник, який приймає ці проекти та будує з них програму. Потім ця реалізація призвела до народження спритних методів, TDD тощо: інструменти, які допоможуть покращити якість цього кодового дизайну.
Як архітектор може створювати попередні ескізи, щоб допомогти їй та її команді візуалізувати загальний дизайн, так розробник може використовувати UML чи інші інструменти, щоб візуалізувати необхідний дизайн. Так само, як ці ескізи не сліпо слідують, так і UML не слід сліпо слідувати. Дизайн коду повинен розвиватися з гнучких ітерацій та використання TDD. Так само, як архітектор може побудувати модель будинку, щоб допомогти їй та її команді візуалізувати креслення, так UML можна використовувати для візуалізації структури коду.
Як каже дядько Боб, ви не можете перевірити UML, ви можете лише перевірити код. Тому код є основною проектною документацією, а UML, якщо він використовується, є лише вторинним документуванням.