The Bottom Line
In summary, I believe that UML is a huge step forward in software engineering simply because at last we have a notation that genuinely covers the majority of the design activities required in building software-based systems and that is not tied to any particular development methodology. Unfortunately, UML is not perfectin particular, the notation would benefit from greater richness in its graphical elements. I'm also aware that UML is much more than simply a notation, and its meta model, in particular, is of interest to toolsmiths. However, it is primarily as a notation that UML exists and is used by practicing software engineers, and it is as a notation that, I believe, it will ultimately stand or fall.
Despite the slightly negative tone of this article, I would like to stress that I firmly believe in what UML is trying to achieve, and I would like to see every software practitioner using UML to communicate ideas and moving away from the multitude of proprietary notations that we have accumulated over the years. There is undoubtedly more work to be done to define an all-encompassing software systems design notation, but I'm confident that the current shortcomings will be addressed and that we will learn to live with those that are left.