UCM represents a different set of best practices that you can choose to apply on top of base ClearCase.
UCM is great at defining a coherent set of files (the UCM "component") that will be: branched in the same branch labelled ("baseline") as a all (all the files receive an immutable label) referenced by other streams (list of baselines)
Parallel development can benefit from UCM because of the streams you can set-up in advance, in order to define your merge workflow. You don't impose anything, but if you finish a development effort on a sub-stream, the natural merge to do is a "deliver" to the parent stream. (As opposed to base ClearCase, where there is no "hierarchical organization" for branches: once you finish a task in a branch, you can merge your work to any other branch: there is nothing to remind you what could be a natural candidate branch for your merge).
The other advantage is the definition of a configuration, i.e. the exact list of baselines (labels) you need to get in order to "work" (compile, or develop a new feature, or deploy, or refactor, or...). Depending on the number of components you have to deal with, you will then adopt:
A system approach: every component is modifiable a component approach: one component modifiable, the others non-modifiables: you only develop in one set of files, and use the others at a fix label for your compilations.