and maintainer of:
To sort of follow up on my journal entry on released based development.
We distribute our applications as large bundles of modules, collected under a common name space per application. This mean that they can easily be distributed as CPAN distributions, since the structure is somewhat similar and all we need to introduce is a build system (which I have done).
But we have another problem and that is that some of these applications start out using some particular back-end, which may at some point become interesting to another application. So when this usually happens I rip out the module, rename it and build a separate distribution, so the using module can now specify a dependency towards the new distribution and the two using modules can be installed on separate application servers, together with their dependencies.
Not everybody involved have done so or use my build system, so sometimes I am caught in a situation where I have to install a huge application in order to utilize something small like a single module.
I am all for that we should not introduce complexity like distributions and dependency hell until it is required, but what have proven to be necessary is perhaps some guidelines on when to separate out, seen it seems like it is always me who takes the step of doing so.
Another thing is our technical lead who want the name spaces to follow the Online presence. Which makes perfect sense, but it holds some cons like:
I can see that we do not want to have a gazillion distributions (or do we), but I tend to think that smaller lego bricks give the best results, the higher the granularity of control the better control.
I used to play a lot with legos when I was a kid, now I have kids of my ownm but we are still only playing with duplos - duplos are great, you can get a lot done in no time, but the results are often bulky and does not have the nifty features you can introduce in your models when doing the regular lego bricks and they do require a bit more imagination to translate to the real world they are replicating.
Yes, software development is complex and we constantly aim to manage and minimize complexity, but should we introduce the complexity in understanding a large bundle of stuff or should we have the complexity in the dependency tree. I prefer the latter since we have tools to address this.
So how do you want your complexity?