For a better practical understanding of what Matthias said
I would also suggest an exercise on a dummy project with some subprojects and members.
1.)
Create Development path on a "well defined" project revision.
Definitly a "well defined" project revision is one that is neither head or trunk tip.
The trunk tip (1.1) is just an empty project while the head might not reflect the current
state of the project. If you want to be sure the head reflects the curent state, you must
first checkpoint the project and use the new head.
2.)
Create a variant sandbox with the devlopment path you created.
The root of yout variant sandbox will then look like:
project.pj(MY_DEVPATH)
3.)
Look at the project history and notice the project branch (eg. 1.2.1.1) that was created.
You can also open the build project (1.2.1.1) from the project history an notice what happened to subprojects.
4.)
Optionally ckeckpoint the project providing a label like MY_DEVPATH_CP0
This will make it easier navigating in complex project history trees later.
BTW: The resulting revision (eg. 1.2.1.2) will be the same resp. have the same member revisions like 1.2.1.1.
In fact if you only look at the member revisions you will have 1.2 == 1.2.1.1 == 1.2.1.2
5.)
Make sure that in the preferences for your Check In command the property "Create Branch if Variant"
is not set to NO (at least asking should be configured).
If you now checkout (or lock) a certain member the member revision will not yet branch.
(this is for version 10.4 but I remember a different behaviour in legacy versions).
The branch will occur the first time when you check in a member from your variant project
and answer the "Create Branch if Variant" with YES.
You may even choose not to branch but then you will see a "New revision available"
difference in your mainline project. (I personally rather dislike such a policy)
6.)
Do other operations on members (dropping, renaming, freezing, update member revision, ..)
and notice the effects or non effects on the mainline project.
HTH Jürgen