In software development (as in many other fields, like paper or thesis writing ;-)), you often need a revision control software to effectively manage all the changes made to your source code (or sections and chapters). It’s even more important if you work with other people on the same files, on different versions of the same sources, with people in different locations and with different systems.
The problem I currently try to solve (or, at least, try to bring a solution to) is the following … The system doesn’t initially use any revision control software. People are able to edit any file they want, one at a time (file locking which is very annoying). Basically, there is only one version of a file per project: the current one. If another project tries to merge the same file from another project, someone has to manually review all the lines in order to see what should remain and what should be left. In order to reach a previous version of a file, you have to manually remove lines marked with the patch reference at a specific location on some lines (it does work in some programming languages and not at all in all others). In fact, a rudimentary revision control system exists but it’s completely outside the development environment. When a file is modified, it’s name is entered in a “patch system” with the reason why it was modified (when you are lucky). If you forget to enter its name, the system can’t do anything for you (since it’s not aware of anything).
Now, on top of that independent patch system, people started to use a real (closed source) revision control software (that even appears in a Magic Quadrant from an advisory firm so it must be serious!). But instead of reviewing the way people work, they just added a layer on top … After a programmer did everything for the independent patch system, a new procedure states the same patch reference needs to be added in the revision control software as well as all the files contained (an automated procedure is actually doing that for you, fortunately). In summary, the current system is depicted in the middle of the figure below (along with a basic solution on the left and a classical implementation on the right).
My question is: how to modify the current system which work more or less in order to approach a more classical and more efficient way of working (the one on the right)? (hiring an external consultant is not an option ;-))