My current approach is breaking the systems on logical application boundaries all under one repository.
For example, imagine a service that also has a test suite and a database
/project1/application1/
trunk/
Src
Test
Database
tags/
branches/
application2/
trunk/
Src
Test
tags/
branches/
This Allows us to have multiple applications assoicated with a project, but handle release control for each "logical" application boundary. Consider where/what your release control need are and set those as the location of the branch/tag/trunk structure.
I don t like the single trunk/branches/tags folder at the root of the entire repository, because I don t want to have the entire trunk checked out, nor do I want to mess with partial branch checkouts as a result. (You may disagree and your mileage may vary etc etc)