Normally you would start from a main TFS project called Trunk and immediately branch this into Dev. All development is done on Dev: developers check-in/check-out content.
After a certain period, groups of finished functionalities are merged into Trunk from Dev. This is done by the quality gate keepers i.e. architects, team leads, release managers after checking everything is ok.
When everything is ready to go into production a version branch, for example 1.0, is split off from Trunk and production hot fixes can be done on branches of these version branches, for example 1.0HF1 for 1.0. This to guarantee at any time, we can build and recreate any production version.
Nightly builds are run on Dev to create the latest build and on Trunk to create a latest stable build output. Normally only latest stables can be deployed in environments other than development i.e. test, quality and production.