Through the years Microsoft Dynamics NAV has evolved to a comprehensive solution with many different objects. Each object only has one version. From this perspective it is obvious Microsoft Dynamics NAV would have been provided with an advanced version control system. The tools we have are a bit different: we have Object properties, like Modified, Date and Time and Version List. In addition you can place comments in the Documentation trigger of the Object and tag your code changes. Since version 2009 R2 we have the lock / unlock features (which I never used). For sure: the Object properties are useful but the question is: are these tools good enough to handle the job properly?
In general as a developer one has the following questions in mind?
- How do we ensure that we keep history of all changes?
- How do we know that we are overwriting changes?
- How can we give the developer an isolated development environment in which he can make changes without disturbing other developers?
- What if a piece of code is not yet finished at the end of the day but we want to put some other parts live?
- How do we know which features are included in a certain release, etc. It might be good to think about the goal we try to achieve here.
For me The Goal is: making state-of-the art solutions which is shipped on the promised delivery date without bugs and add value to the customers process. With this goal in mind it is important to think about the long-term instead of focusing on the time aspect only.
It would be a good idea to include upgrade projects in the certification process for Microsoft Dynamics professionals: you should have done some migrations of customized databases to the latest NAV release before may call your self Dynamics NAV professional. In many upgrade projects you’ll find all sorts of changes which were made in the past but no one remembers why it was implemented. Because there is no history it often ends up in just deleting the change or puzzling out based on the code what the initial idea was. If these aspects are taken into account on beforehand the upgrade process will be much easier. There is much to say about this topic. I think the guys of Partner Ready Software have good ideas about this. Since this blog is all about agile and Microsoft Dynamics NAV I would like to focus more on the process side and version control in special.
What are the most important capabilities of Version Control?
- Reversibility: the ability to back up to a previous state if you discover that some modification you did was a mistake or a bad idea.
- Concurrency: the ability to have many people modifying the same collection of files knowing that conflicting modifications can be detected and resolved.
- History: the ability to attach historical data to your data, such as explanatory comments about the intention behind each change to it. Even for a programmer working solo, change histories are an important aid to memory; for a multi-person project, they are a vitally important form of communication among developers.
Are these capabilities applicable for Microsoft Dynamics NAV or are they only valid for other programming languages? In the following posts I’d like to zoom in on each capability.