UML doesn't describe the meanings of classes, objects, states, or sequences. It only provides a bunch of placeholders for words that are supposed to describe these meanings. This means that people will make their own assumptions about what a diagram means based on nothing but the 2-D proximity of your layout. And that's not enough dimensionality to express any significant meaning at all. What's worse, UML provides no metrics to tell you when a particular diagram or a part of a diagram is well constructed or poorly constructed. And it doesn't help you visualize any such metrics that you might use yourself. There are no UML tools, for example, that will tell you when you have violated the LawOfDemeter, or the OpenClosedPrinciple, or even the simple AcyclicDependenciesPrinciple. These failings are some of the reasons that UmlDoesntWork. ''In other words UML is a modeling language without a model. Should have been called UnifiedCollectionOfSymbols. It is just about reusing commonly agreed symbols, and as long as those symbols mean different things in different contexts, the common agreement may be misleading. '' May be misleading, but often isn't in practice. I don't use it as a formal modelling language. I do use it as a shared notation for explaining stuff. It's GoodEnough for me. ---- Regarding the statement that there are no UML tools that will tell you when you have violated various metrics: this doesn't mean that there will never be any such tools. Take a look at the Package Structure Analysis Tool (PASTA http://javacentral.compuware.com/pasta/) from Compuware for example. It's a, currently free beer, beta version of a tool that generates PackageDependencyDiagrams and applies a variety of metrics including two different variations on the AcyclicDependenciesPrinciple. It's pretty good although it's not strictly speaking a UML tool. --