While I have used UML diagrams to put in technical documents, I find that they often must be managed carefully to be a useful aid in development.
The reason?
For any system, there may be many entities interacting. However, only a few of those entities are really important, and many interactions are rather trivial. However, if you attempt to diagram everything, you get a poster big enough to wallpaper your bathroom.
So what I do is sketch out some diagrams at a higher level of abstraction, using design patterns. For example, if it is a workflow, I may model it as a series of stations, a manager, a router, etc. Just enough detail so we can talk about it.
This lets the people writing code break it up as they see fit. Developers shouldn't be constrained too much by object diagrams and so forth.
Most often, I see UML diagrams being written after the system is built, as documentation. This is useful, but it certainly doesn't help get the code written.