Usar UML es como mirar sus pies mientras camina. Es hacer algo consciente y explícito que normalmente puedes hacer de forma inconsciente. Los principiantes deben pensar detenidamente sobre lo que están haciendo, pero un programador profesional ya sabe lo que están haciendo. La mayoría de las veces, escribir el código en sí es más rápido y efectivo que escribir sobre el código, porque su intuición de programación está ajustada a la tarea.
Sin embargo, no se trata solo de lo que estás haciendo. ¿Qué pasa con el nuevo empleado que llega dentro de seis meses y necesita ponerse al día con el código? ¿Qué tal dentro de cinco años, cuando todos los que trabajan actualmente en el proyecto se hayan ido?
Es increíblemente útil tener documentación básica actualizada disponible para cualquier persona que se una al proyecto más adelante. No defiendo diagramas UML completos con nombres de métodos y parámetros (MUY difíciles de mantener), pero sí creo que un diagrama básico de los componentes del sistema con sus relaciones y comportamiento básico es invaluable. A menos que el diseño del sistema cambie drásticamente, esta información no debería cambiar mucho incluso cuando se modifique la implementación.
Descubrí que la clave de la documentación es la moderación. Nadie va a leer 50 páginas de diagramas UML completos con documentación de diseño sin quedarse dormido en unas pocas páginas. Por otro lado, a la mayoría de las personas les encantaría obtener de 5 a 10 páginas de diagramas de clases simples con algunas descripciones básicas de cómo el sistema está armado.
El otro caso en el que he encontrado que UML es útil es cuando un desarrollador senior es responsable de diseñar un componente, pero luego entrega el diseño a un desarrollador junior para que lo implemente.