One interesting aspect is that if a file is /foo/bar.c, if you look into the directory /foo/bar.c@@ you get a list of all revisions to bar.c, and you can look at /foo/bar.c@@/<date> to retrieve any previous version.
Aside from the choice of both dynamic version selection and static version selection, there are "snapshot views" which let you use a more sandbox-like approach, in a client/server fashion (which gains you more reliability but uses more diskspace). For builds, there is the use of shared immutable objects (via the virtual file system), and build avoidance with shared derived objects across workspaces and a "make" tool that knows about more than just timestamps, but also knows about versions, build-scripts, and entire configuration-records and their auto-generation (as well as having full awareness of every file in your workspace that is ever created or accessed during the course of the build, even if the Makefile never mentions it). -- BradAppleton
From ClearCase