The DAX instance structure and code release methodology is more important that ever with the introduction of DAX 2012. More important it is the key, as it has been in reality in older version, if you want a stable environment.
With the introduction of DAX 2012 the need to enforce the process has become critical to ensure you have a stable production environment and a reliable code release process, and the ability to move your production data to other environments for testing and evaluation.
The traditional setup prior to DAX 2012 was to have a development environment, typically one, from which code would be released to a test environment, then onto a production environment.
With DAX 2012 there was a new code release process, using ModelStore to move the entire code set from one instance to another. Using the ModelStore is an important part of the process, as it ensures the ID’s allocated to each object are the same, which is critical when you want to be able to move the production database to other instances.
There is also another consideration, the compile of the system. Prior to DAX 2012 the typical compile time was an hour, two at the most, and a database synchronization of 10-15 minutes. With DAX2012 there is a two compile step process, the X++ compile and the CIL compile. Using the in system compiler, which gives the most reliable system compile, we are often seeing a compile time for the X++ code being between 4-6 hours, and the CIL compile time of 20-60 minutes. Also the database synchronization is often taking 20-40 minutes.
The change in compile and synchronization times means the down time of the system used to release the code from is now from a few hours to 5-8 hours. The compile is still an important step that must be completed to ensure you have a clean code release.
From experience I have found it important to add an additional instance into the mix, which I call the Development Master instance. This is the instance that all development code is pushed to, be it from a single development system, multiple development system, or if you are using a Team Foundation Server for source control you need this environment anyway. The ‘development master’ environment does not need a full data configuration as not testing or user will access the system, only a few developer to complete the code release.
Code can be released to the ‘development master’ instance which can now be compiled and prepared for release, during the working day and ahead of time of a release to other instances. Once the code is cleanly compiled, the modelstore can be built, and used to release to the ‘Test’ instance. Once tested and signed off, the same modelstore file can be used to release to the next instance in the release process, for this case we will use Production (Live).
The documentation of the instance structure and code release methodology should be a critical part of the project plan, and should be followed religiously to ensure you have a stable environment.