For parallel development we use the Harvest-Projects.
We establish a project (as a branch of the whole repositories) based on a snapshot from our "mainstream" (that is t he Harvest-project going productive).
From time to time we update this branch cross project merge from the next productive release.
This way we develop several projects at a time in parallel. When the project is maure enough for real life, we do a cross project merge back in the "mainstream" just in time for the next release.
We avoid in the mainstream concurrent checkouts and try to avoid branched versions as well to reduce the the amount of dependencies between the packages.
Works fine, but generates a lot of Harvest-propjects ;)
-Hans-Arno