I read an interesting post about Branching in Source Control Systems in the Coding Horror blog.
It has a few good points:
* if you don't use branching in your code revision control system then you're not using this revision system's capabilities in full
* there are many branching themes: per release, per task, per feature, per technology, per component, etc.
Having experienced the benefits of branching per release and per task/feature I can testify that it does increase productivity and reduces risks.
The post also tells about bad branch uses. Unfortunately, I have experienced some of them too...