As long a the &quot;simple boxes and lines&quot; describe the functionality of your design at the level you wish to communicate, then you&#x27;re doing good. You can stop reading here.<p>The problem is that complex systems need complex design. As your design get more sophisticated, you need more sophisticated ways to communicate the design. Concepts like dependency, multiplicity, inheritance, inclusion, asynchronous message, exception, timed event are all things you can represent with boxes and lines, but unless you adorn the diagram with a huge amount of text you&#x27;re not going to capture the distinctions between those different types of relationship.<p>It&#x27;s not unlike any other language: I can use the word <i>thought</i> to describe something in my head that isn&#x27;t physically manifested, but words like <i>lie</i>, <i>memory</i>, <i>hypothesis</i>, <i>idea</i>, <i>belief</i>, <i>image</i>, <i>nostalgia</i>, <i>forecast</i>, <i>imagination</i> are all used to distinguish between types of thoughts. If I used only simple words like &quot;thought&quot; then I wouldn&#x27;t be able to express anything more sophisticated while still being concise.<p>In short, if you want to graphically describe something complex, you can either use a sophisticated visual language to do it concisely and unambiguously, or you can use a simple visual language and write tonnes of documentation to support it, with all the problems of attention, ambiguity, and rot that go along with it.