Creo que los diagramas UML solo pueden ser útiles si expresan algo en un nivel de abstracción más alto que su código .
Escribir UML solo por escribir UML se convierte en una burocracia innecesaria y hace que el proyecto y el código sean menos adaptables a los cambios sin ningún beneficio.
Por ejemplo, un diagrama de clase UML que muestra todas las clases en un paquete, con todos sus atributos y métodos, algo que se puede generar fácilmente de forma automática, no proporciona ningún valor: está en el mismo nivel de abstracción que su código . Además, el código seguramente será una mejor fuente de esa información porque siempre estará actualizado, y probablemente será documentado y organizado de una manera que sea más fácil saber qué métodos / atributos / cosas son más importantes.
Por otro lado, si tiene conceptos de un nivel de abstracción superior al que puede expresarse en el código, puede ser una buena idea documentarlos en un diagrama.
Por ejemplo, un diagrama que muestra los módulos abstractos de nivel superior en un sistema complejo, con sus dependencias y tal vez una pequeña descripción de sus responsabilidades y a qué paquete / espacio de nombres se asignan en el código fuente puede ser realmente útil para un nuevo miembro del equipo eso debe introducirse en el proyecto, o también puede usarse para determinar dónde se debe lanzar una nueva clase / funcionalidad.
Otro ejemplo de un diagrama útil podría ser un diagrama de secuencia que muestre los pasos de alto nivel a seguir en un protocolo de comunicación. Quizás cada paso de esos tenga sus pequeñas peculiaridades y complejidades, pero probablemente sea suficiente para describirlos en el código mismo. El diagrama de nivel superior puede ayudar a un programador a comprender el "panorama general" de las cosas fácilmente sin tener que preocuparse por las complejidades de cada interacción.
De todos modos, esos son solo algunos ejemplos; Hay muchos casos en los que un diagrama simple puede ser de gran ayuda. Solo recuerda que deberías hacerlo solo cuando no puedas expresar algo en el código mismo. Si se encuentra utilizando diagramas UML para explicar el código fuente en sí, haga que el código soruce sea más autodocumentado.
Finalmente, algunas de las reglas generales que se aplican al código también pueden aplicarse a los diagramas: evite repetirlo, manténgalo simple, no tema cambiar las cosas (solo porque algo está documentado en un diagrama UML no significa que no pueda cambiar) y siempre piense en quién leerá / mantendrá esos diagramas en el futuro (probablemente su futuro) cuando los escriba :)