One project I worked on had three separate trees based on the same core code. Needless to say they evolved to be incompatible with each other and bug fixing was scaled up by a factor of three. Key functions should be placed in internal libraries or modules and extracted into build directories when needed. Time spent extracting generic functionality from project specific modules will be paid back by a factor of 10 or more later in the software life cycle. Tree Hierarchies Sharing resources such as disc space and CPU time can cause friction when deadlines and tempers are short.
Programmers are the worst people to organize their code in large projects.
They are often too wrapped up in the small scale details to take larger view. Good internal support saves a great deal of expensive development time and can also provide a project neutral overview of facilities and procedures. When maintaining large projects a clear network layout will save you a great deal of time. SHIP - Tree's containing final distributions, as delivered to customers. Tree's named distrib and source were deliberately not used as their names were already associated with the older system.