There are two basic strategies:
- unstable trunk – the trunk always contains the latest code, branches are made to do releases
- stable trunk – code is developed in branches and checked into the trunk only when fully tested and releases are performed from the trunk
Which you use is to certain extent a matter of personal preference.
But alongside either of these, individual developers should be using
branches for their own experimental developments.
So as usual, no definite answer!