Il problema che ho usato con UML è la sua complessità. Anche con lo standard di 800 pagine (che è chiaramente un segno di un grave problema), trovo interpretazioni di utilizzo estremamente diverse da uno sviluppatore all'altro. Tanto che può richiedere molto tempo per comprendere con precisione quale codice o processo risultante sta modellando. Spesso un diagramma molto più semplice con commenti è migliore di quello che altri hanno indicato.
Ci sono anche alcune cose fondamentali che non mi piacciono come l'associazione nel diagramma delle classi. Spesso non è chiaro cosa l'associazione rappresenti nel codice perché le persone li ometteranno dall'elenco degli attributi. Questo perché il link dovrebbe implicare questo. Tuttavia, inserisco sempre gli attributi specificati dall'associazione per evitare potenziali confusioni.
L'altro problema è che spesso le stesse persone con cui è possibile condividere UML, i clienti e i manager non capiranno o apprezzeranno comunque le sue caratteristiche più esoteriche. Lavorare in particolare nel settore dello sviluppo di applicazioni mobili è stato il vero caso.
Tuttavia, come altri hanno detto in forma semplice, trovo davvero utili i diagrammi di classe, specialmente gli strumenti CASE che possono generare la struttura di base da un diagramma di classe. Questo mi ha permesso di risparmiare molte ore e alcuni potenziali spacciatori.