DevOps & Dynamics 365 CE

In this blog, I am going to share my views on DevOps and its implementation in any Dynamics 365 CE project. This should be an interest for those who want to implement DevOps in the new Dynamics 365 CE implementation as well as those who want to migrate to the DevOps way of working for ongoing implementation/support projects.

Why DevOps?

Being Agile and nimble in this digital era has become a necessity and it is no more fancy or nice to have a regime. DevOps adoption should not be looked at as an overhead to an organization as it will fuel multiple aspects in the progress and growth of an organization. Few of the major benefits that DevOps addresses are highlighted below table.

Early Business Value Realization– Organization/applications to adapt to new business models
– Adopting fast-changing market, Measure of Progress
Time to Market– Enabling IT to match the speed of Business
– Increase customer satisfaction by rapid, continuous delivery of business ideas
Collaboration & Engagement– Close Co-operation, Self-Organizing Agile Teams ensuring Ownership Transparency
Automation– Automation enhances efficiency and enables the foundation for robust and qualitative delivery and fuel DevOps Engine

The above benefits are in general to any organization, however, it also provides benefits to the Ways of Working (WoW) in general which are highlighted below

  • Minimal Handoffs – By establishing new Ways of working (WoW) and with the change, AD/AM teams working together, the hand-offs between the teams for sharing of information & close collaboration, enables informed decision faster
  • Lean Dynamic Prioritization – For applications operating in DevOps, one of the key success factors is to be able to balance between the critical needs and business demands. Lean dynamic prioritization process keeps stability of the applications intact while still delivering business value
  • Lean Change Approval Process – In large enterprises Change Approval Board (CAB) is reactive and is invoked during the fag end of the change deployment into production systems. An intelligent CAB process called “Codified CAB or Greenlight APIs” that collects information about features/user stories and the progress of that story. Based on the progress and heuristics the Codified CAB determines dynamically whether should be “straight through” or should it be taken with manual CAB.
  • Intelligent data Analytics – Collect & Analyze data intelligently based on the type of the seasonality, events etc.  and provides data analytics helping teams to identify, resolve/pre-empt issues from a single source of truth.

Typical DevOps KPIs which are generally measured:

Based on the experience across multiple customer engagements, below are the KPIs that are generally measured in DevOps based delivery: 

Efficiency – Lead time to deploy: Time is taken from “Story Commit” to “release into production”
– Deployment frequency
– Velocity improvement for each DevOps team
– # of releases per Sprint
– Daily Team Burndown: Committed v/s Actual
Quality – No deployment failure till date.
– Accepted Use Stories
– # of incidents arising out of change
– Test Coverage: Number of test cases / scenarios which are covered during testing
– Dev v/s Ops Ratio
Cost – Cost spent in conducting various testing as well as the impacted indirect failure & correction costs
– Improvement in effort to develop and deploy changes
Customer Experience – New Product / Services Launched: Number of new products, services and/or features launched
– Customer Base / User Growth Rate: Improvement in numbers of customers using software/services
Others – DevOps team attrition rate
– % of test cases automated
– # of innovations & continuous improvements delivered in DevOps mode

What are DevOps Practices?

The core practices are also the main steps performed for any DevOps implementation. Following are the  main practices that form the DevOps

  • Continuous Planning
  • Continuous Build & Continuous Integration
  • Continuous Testing
  • Continuous Delivery
  • Continuous Monitoring

Team structure in DevOps way of working

The right team structure is the important aspect to realize the right potential in the DevOps way of working. Following are the important criteria to be considered for DevOps team structure formation

  • Number of DevOps teams
  • Number of team members in each DevOps team

Here are some of the key team structures followed in the majority of the Dynamics 365 CE projects

  1. Single DevOps team for all business line

Teams can be organized in such a way that a single DevOps team can handle the entire backlog. Development Engineer and Operations Engineer has shared the responsibility of working on user stories from the backlog. Along with the user stories, the operation team will also focus on non-backlog work items such as bugs and issues in a production environment.

  1. Multiple DevOps Team per business line

DevOps teams can be organized separately based on the functionality to work in a more autonomous way. This is the preferred way when there are separate Apps designed for Sales, Service and other functions. This will give the flexibility to develop and deploy new functionality in each App without being dependent on other team development.

While comparing the above two team structures, both the options have pros and cons. Please see the below the table with a high-level comparison

Single DevOps TeamMultiple DevOps Teams
Less Complex as to manage single team Maintenance efforts are less as there is only single backlog to manage Dynamics 365 solution deployment in the higher environment is technically easier with a single solution but can be challenging in some of the committed features are not developed on time and it may delay the entire releaseMore complex compares to single team per business lines Maintenance efforts are high as to manage multiple backlogs and track the dependencies of the development across teams Dynamics 365 solution deployment in the higher environment is technically difficult as to manage the solution component dependency across teams and solutions. But this approach gives the flexibility to ship only those features which are ready to be deployed in production.

Separate DevOps team with the respective backlog for each team is the preferred way of working but no one size fits all, so team structure might vary but the thought process would remain the same.

Tools and Technologies for DevOps implementation

Tools play an important role in any DevOps implementation. With the right set of Tools, the DevOps process becomes efficient and autonomous. Below are few guiding principles which need to be considered while considering tools for DevOps.

  • Leverage Native Tooling as much as possible – Use tools available out of the box for the applications rather than exploring alternative toolset from the market.
  • Fit for FutureFuture roadmap of the selected tool need to be considered into account while selecting them.
  • Use tools with abundance in talent – Each tool deployment will come with the required skills to operate and hence skills/competency required to operate the tool also need to be considered while considering selection of the tool.
PracticeActivityTools

Continuous Planning

User Story logging and tracking

  • Azure Board
  • Jira

Continuous Integration

Development – Custom CodeVisual Studio
Unit Testing
  • FakeXRMEasy
  • Code & Configuration Quality Check
  • Power Platform Checker

  • .NET code analysis in Visual Studio for plugin and custom workflow code

  • SonarQube for .Net code quality check
  • Continuous Testing UI & Regression Testing
    • EasyRepro
    Continuous Deployment

    Deploy Configuration and Customization

    Power Platform Build Tools Tasks –
      • Power Platform Pack Solution
      • Power Platform Export Solution
      • Power Platform Import Solution
    Continuous Monitoring Application Monitoring
    • Power Apps CDS Analytics
    • Azure Application Insights

    How much can we Automate?

    Automation is the key advantage of the DevOps way of working. With the right set of tools, major DevOps practices can be automated, which will ensure faster and reliable project execution.

    • From the continuous Integration perspective,
      • Power Platform Build Tools offers DevOps tasks Power Platform Checker to ensure the configuration and customizations are as per the Microsoft recommendation and following SDK guidelines.
      • Unit Testing can also be automated for custom code using third party tools such as FakeXRMEasy.
    • Continuous Delivery tasks can also be automated with Power Platform Build Tools such as
      • Power Platform Export Solution – To export the solution with configuration and customization from Dynamics 365 CE source environment
      • Power Platform Import Solution – To import the solution with configuration and customization to Dynamics 365 CE target environment
    • Continuous Testing is also automated with EasyRepro which facilitate the automated UI testing specifically on the Dynamics 365 projects. EasyRepro can run in Azure DevOps pipeline to test the major functionalities after deployment to ensure good deployment quality.
    • Dynamics 365 environment can be monitored with Power Apps CDS Analytics to view the performance as well as application usage. Detailed monitoring of each application page load performance can be done by feeding the logs to Azure Application Insights.

    Apart from the above standard tasks and tools, many tasks can be automated with PowerShell scripts such as database backup before deployment, restore database etc.

    We can achieve a lot of automation with DevOps implementation in Dynamics 365 projects. But in the case of parallel development with multiple teams/developers working in the same project, manual efforts would be required to merge the customization, especially for the common component changes.

    How to become DevOps Organization for Dynamics 365 project?

    As we understand the benefits of the DevOps implementation for Dynamics 365 projects, let us see how to move towards the DevOps way of working.

    A non-disruptive, yet impactful way of adapting your team for DevOps methodology for the Dynamics 365 project is to follow the below maturity journey of application to DevOps.

    Summary

    Implementing DevOps is about optimizing and improving the project execution to build new features, maintain existing applications with the development and operation team working together with the right set of tools. For any Dynamics 365 CE project, DevOps implementation should be mandatory as it is not difficult to implement, also with the right set of tools and accelerators benefits can be realized quickly.

    Is it wrong to customize Microsoft Dynamics 365 CE?

    Dynamics 365 CE customization is always a topic of discussion for all the projects and the following questions are asked by most of the stakeholders

    “Should we customize Dynamics 365 CE? If yes, how much?

    In this blog, I will share my experience with customizing Dynamics 365 CE.

    Lets start with definition – What is customization in Dynamics 365 CE?

    Microsoft Dynamics 365 CE offers out of the box customizing capabilities which includes

    1. Creating and configuring Entity and Fields (Tables and Columns)
    2. Configure Views and Dashboard
    3. Validation check through business rules and guided business process flow etc

    Along with this, the platform also offers extensibility of application through custom code components such as

    1. Webresources – JavaScript, html etc
    2. Plugin
    3. Custom controls – PCF

    Above capabilities are the recommended customization by Microsoft which allows us to extend the application functionality based on the business requirements.

    Should we go with above customization always?

    I would say No, even though the customizations are as per the Microsoft recommendation it is not a good idea to go for it always as it will increase the maintenance efforts and cost to manage the custom code in future.

    To understand in a simple way, I came up with a decision tree which can help every project to make a decision – whether we should go for customization?

    This decision tree doesn’t cover all the aspects of customization request such as ribbon buttons, custom control requirement etc but can be the guidance for most the request.

    As I have highlighted earlier, if the business requirement is critical we should definitely go for customization but this should be done in defined boundary by Microsoft. Unsupported customization is not at all acceptable as it will not guarantee that those changes would work in future (with upcoming Dynamics 365 product or browser upgrades). Refer this article with the list of unsupported customization from Microsoft

    Also, it is always recommended to validate the customization via “Solution Checker” to make sure we are not doing any unsupported customization.

    Another question which is frequently asked while doing customization

    Will Customization impact application performance?

    There is no direct answer to this as it depends on the “How have we implemented these customizations?” There is no adverse impact on application performance if we follow the best practices while implementing the custom code. Always refer the best practices during implementation, some of them are as below –

    1. https://docs.microsoft.com/en-us/powerapps/maker/model-driven-apps/optimize-form-performance.
    2. https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/best-practices-sdk

    In summary, customizing the Dynamics 365 CE is not a good idea unless there is a critical business requirement to be fulfilled and always follow the Microsoft recommendations to make sure your application is future proof and there is no adverse impact of those customizations.