It is vital to have a defined environment management strategy in place to ensure that you have all the required environments to support both your initial project as well as any ongoing business as usual activity. What is described here should be treated as an absolute minimum as you may require additional levels of complexity to support your particular ecosystem.
Environment Planning
At the start of any project, it is essential to identify what environments you are going to require to deliver the specific business requirements. The environment strategy that is implemented should include the concept of JIT (Just in Time) environments.
JIT Environment
A JIT or Just in Time environment is a method of creating additional environments as you require them. The environment is generally built in an automated fashion using the latest code from source control.
JIT allows you to be source control centric, eliminate dependences on environments and test your deployment process each time you deploy.
Minimum Required Environments
In order to support most projects, a minimum number of environments are required. The number of environments can grow depending on the complexity of the solution, for example, if there are many complex integrations, then several integration environments would be recommended.
Development Environment(s)
One or many development environments are usually required dependant upon your solution strategy. Development environments should always be just in time environments that can be initialised as and when they are needed. Unmanaged solutions are acceptable within this environment.
Quality Assurance – QA
The QA environment is needed to allow for testing of solutions both from a functionality and deployment perspective. This environment should allow any testing to be carried out before being handed over to the business teams in the user acceptance testing – UAT environment. Only Managed solutions should be deployed here.
User Acceptance Test – UAT
This is generally the first environment that a business user will have access to. This will allow them to undertake user acceptance testing of any solutions before they are pushed to the upper environments. It is recommended to have a test data set included in this environment. This, however, can be obfuscated.
UAT will also generally be integrated into other systems if the project has integrations.
Train
This environment is utilised to deliver training to users of the system. A training environment is a critical component as it allows end-users to practice within a simulated live environment without the risk of interfering with live data.
It is often live data that is used within training environments with a limited set of information obfuscated such as the email addresses to ensure that no interaction with lives customers happen.
Training should always be deployed with managed solutions.
Production
The production instance is the final stop of your solutions journey and is the live system that is to be used by the end-users for the management of customers.
Managed solutions should be the ONLY solutions deployed within this environment.
Sample Complex Environment Strategy
CDS Environment Tools
Excluding the use of Azure build tools, the Common Data Service (CDS) platform has several tools to allow the management of environments.
Creating an Instance
You can add Production and non-Production (Sandbox) instances to a Dynamics 365 for Customer Engagement apps subscription. Each new instance creates a separate organisation that can be used by different departments, locations, or for non-production purposes such as development.
Copying an Instance
You can use Copy instance in the Power Platform admin centre to copy the Customer Engagement apps and all data from any instance to a Sandbox instance. You can do either a full or minimal copy. A full copy will replicate all solutions and data, whereas a minimal copy will only replicate the solutions.
The following data records are also copied when you do a Minimal copy:
- Business Unit
- Connection Role
- Currency
- Duplicate Rule
- DuplicateRuleCondition
- EmailServerProfile
- Field Permission
- FieldSecurityProfile
- ImportMap
- InternalAddress
- Mailbox
- Organisation
- Position
- Report
- Resource
- ResourceGroup
- Role
- RollupField
- SavedQuery
- SLAKPIInstance
- Solution
- Subject
- Team
- TeamTemplate
- Template
- SystemUser