UML seems useful IMO. Personally I don't use it because I don't want to get it wrong - miscommunication is often more harmful than insufficient communication. It's probably something that should be taught in college, but I didn't do CS and nobody in the industry does it, so I never picked it up.