Collaborative environments are becoming pervasive in the industry. One area of collaboration that is critical to an enterprise is that which is associated with new software development. During software development a variety of different developers can be working on the same or dependent modules at the same time and from entirely different processing environments from one another. A variety of different project life-cycle and version control systems attempt to coordinate project activities in scenarios such as this.
The problem with these approaches is that they are either holistic or monolithic implementations. In other words, if a dependency exists in a piece of software code being worked on by one team member then if that same code is not available, other downstream members are forestalled from working on their pieces of software code even when they do not use the piece of code that is not available. So, existing solutions require relationships between code modules; the relationships are carried for the whole project in a centralized fashion (holistic or monolithic).
Modeling individual pieces of code in a version-controlled or collaborative environment is also straightforward and not an issue when the traditional holistic approach is used. However, most developers work on projects that have a complex web or relationships with one another. So, when the conventional mechanisms are used there is a lot of wasted effort, down time, etc. Furthermore, communication snafus during project management occur when dependencies are missing and this can cause failures to erupt or can cause long unnecessary project delays to ensue.
Most pieces of software use some sort of underlying data model to store its information. The information is usually stored in one of three ways: a database, independent files, and/or highly coupled files that are linked together. As discussed above, enterprises often have a great need to share the model information so that the enterprise departments and resources can collaborate on projects and leverage the individual pieces of software available within the enterprise to perform tasks in a streamlined and automated manner. To make this work the database or files are often stored and accessible to users via a central machine or server of an enterprise's network. Another way to make this work is to permit copies of the database or the files to be made on an individual basis. But, this creates substantial maintenance and support issues within the enterprises as multiple different copies of the database and the files proliferate around the enterprise environment.
Another issue is that typically the enterprise wants some mechanism to version a model at certain points in time so that a specific version of a model can be return to when needed. For enterprise's having a complex web of relationships between software modules (dependent linkages between modules) there exists no practical off-the-shelf product that can supply this solution. As a result, enterprises often develop their own internal and ad hoc approaches or forgo any attempt to have a viable versioning solution.
Thus, what is needed are improved techniques for managing complex software dependencies in file-based team environments.