Your statement is only somewhat correct. What complex systems need isn&#x27;t a single, complex design document but rather levels of simple, intuitive design. It&#x27;s like OOP--the basic principle of OOP is that you can manage (but not eliminate!) complexity by sharding it into small-ish objects that only need to know about those whom they interact with. Similarly, in a large system, you&#x27;d want a high-level, very abstract design detail, and as you peer in closer to the code, you want increasingly concrete design.<p>The problem of UML is that it tries to be the language of <i>all</i> these levels of design (and even different stages of design!), to the point that the highest-level design document is trying to be something so completely specified that there&#x27;s no abstraction.