Branching always begins with fear that merging will break things or leave unnoticed bugs for long.
However, it is the most essential element for a reasonably sized product or project. Here are the few distinct categories where branches are a must -
they are :
1. Branch post release
This is done to maintain post release patches. these patches are essential to support current versions in the market till next major releases are still not ready.
2. Branch per Task or component
Here a few independent groups are given the branch that they keep check-in while rest of the team (or other branches) doesn't have to accept any work till entire new functionality or project is completely finished and merged to trunk.
3. Branching for special customer support
Here a few branches are created to support only for a specific (set) of customers.
Branching and merging begins with some fear always, but in my experience, as people begin to put disciplined code, it becomes indispensable for any large development.
See URLS below for more details.