Original Post
My C# project is highly modular. The idea being that I can swap out the AI module for a different one at run time, for instance. Likewise physics, etc. My thinking is that the different modules are going to have different development paces, so the AI module might not change for months, while the physics module undergoes rapid development. When it comes time to create a periodic release for the whole program, I may not want to use the latest physics, since it might be buggy, and instead I'd use the last stable physics release from a few weeks ago. But maybe I've fixed an AI bug in the mean time, and I want to include that bug fix. This lead me to the idea of handling versioning for the sub modules independently from each other. I could include version 1.2 of physics and 0.9 of AI, or whatever. I bundle the modules I want for a master release, and call the master release by its own version number (maybe 1.56 in this example). I can do experimental work on physics without branching the entire project, which will hopefully make merging easier. And if need necessary I can hotswap different versions of modules in to isolate bugs. There are probably some other advantages to this method as well. The hard part is managing version control (I'm using SVN). Suppose I have maybe a dozen modules, and they each have trunk, tags, and branches folders. There are several problems I can think of with this method. For instance, how would I manage tagging master releases? Maybe master release tags are just scripts that sync the different modules to the right versions? And if someone else makes changes to several modules and I want to sync to trunk on all of them, same issue. Maybe I just create some scripts to handle syncing on all the modules? It feels like this could spiral out of hand really quickly, but there are enough advantages for me not to dismiss it out of hand. Is this a good idea, or not?