I do find UML to be extremely useful in planning the design of a system although I rarely use anything more then class diagrams. Since it is universal 'language', any other programmer should be able to look at the diagram and also understand the design.
Personally I find Visio to be too heavy handed and I use
UMLet instead which is much quicker to prototype designs.