\base \dev \classes \forms \... \test \classes \forms \... \prod \classes \forms \... \projectA \dev \classes \forms \... \test \classes \forms \... \prod \classes \forms \... \ProjectB \dev \classes \forms \... \test \classes \forms \... \prod \classes \forms \...All the common code is in the base tree. Using Dev, test and prod folders allows the code to have various stages of development going at the same time. Developers work with code in the dev tree. as code moves to test it's pinned and shared into the test tree, once it passes test it's pinned and shared into the prod tree. Each project gets its own folder. You can introduce a client level above projectX if you develop more than one major system for a client. The project folder can easily contain multiple apps if they are built off the same code.