Vague specifications are a major problem. In the past, the specifications for a monolithic system only affected the single system, and if it didn't work exactly as specified, nobody really cared. A failure to follow specifications can introduce errors that propagate around the world. You can't take a snapshot of a distributed system for backup or reboot it if part of it fails. The entire system must keep going in spite of failures, errors, or data corruption of some of its parts.
Most systems are now real-time systems.
Timing concerns matter a great deal to customers and partners. On top of everything else, performance of complex systems is often nonlinear and cannot be predicted by simple extrapolation. Making these capabilities available to software developers is Rational's business. It is based on objects. UML was designed with extensibility in mind, so it can adapt to new issues as they arise.