UML is useless for maintenance & enhancement
UML is great for describing the structure or behavior of an OO system in diagrams, but it fails in one crucial area: it can't describe succinctly the delta between one version of a system and the enhanced version of that system. A great majority of software engineering projects involve modifying an existing system, either to fix bugs or enhance features. It would be great for modeling tools to represent not only the class hierarchy, but the changes necessary to implement an upgrade from an existing system to the modified version of that system. So far UML cannot do that, even in UML 2.0.