I recently read the Microsoft Whitepaper that was released a few days ago titled “Deploying Microsoft Dynamics CRM 2011 and CRM Online Solutions from Development through Test and Production Environments”. From what I saw the authors are recommending the same thought process I had about solution management in the software development life cycle.

For development purposes you slice up the project into component layers. The layers are composed by functionality and also to allow for less contention by members of a development team. In a discussion with some Microsoft consultants they split up a project into 6 solutions as follows:

1. Security Roles

2. Web Resources

3. Customizations

4. Plugin Assemblies

5. Plugin Steps

6. Workflows

Security roles came first on the stack because you may have forms that are dependent on role based security. If the roles aren’t included in that solution they must exist already for the solution to import correctly. The rest of the layers are pretty self-describing. The only other question I asked was why have separate solutions for plugins and then for the plugin steps. They just said that it was more of a logical separation so that one could be updated without affecting the other. Once the development phase is completed the solutions are merged into a unified managed solution that is then deployed to a test environment and then ultimately into a production environment.

In my opinion, one of the pros of having a single managed release solution is that you don’t have to worry about dependencies. I’ve heard that there can sometimes be issues with managed solutions with dependencies where you can get into an uninstallable state. For example, say you have managed solution A that has a dependency on managed solution B. Somehow those solutions can get into a deadlocked state that could cause one or more of the solutions to be stuck. Personally I haven’t seen this happen yet, but I don’t doubt that it is possible.

One con of a single managed solution is that if it is very large you could run into time out errors when importing the solution. My thought on this to try to mitigate this by perform the import directly on the server itself and if necessary decide how to slice the solution into more than one layer from there.

If you can deploy a single managed solution then some of the pros are as follows:

· Real version control (Deleting unmanaged solutions doesn’t remove anything)

· Rollback capability (Deleting unmanaged solutions doesn’t roll anything back)

· A way to prevent accidental tinkering with the production solution

Another con you may have with managed solutions in a production environment is the loss of data for custom entities and fields in the solution. I understand the warm and fuzzy feeling of it, but I don’t think that this is a show stopper assuming proper backups are being made of the CRM server and the database. Obviously you would take the data loss into consideration before performing an uninstall. I think the main purposes of having a managed solution is exactly the ability to roll the system back to a previous state. I would think that ideally (if you can call it that) your worst case scenario should be to restore from backups to return the system to a previous state. You don’t have this option if you are running CRM online. Since you don’t have direct access to the database you are pretty much stuck having to do everything manually with unmanaged online solutions.

In his blog on solutions & release management Ayaz Ahmad shows a scenario where you deploy managed releases on top of each other in the production environment.

image

I particularly like his methodology because I think it reduces unnecessary complexity of having X different solutions to maintain. I am having a hard time seeing what having so many solutions is going to buy you in the end. In this scenario you can then deploy hotfixes on top of the release solutions for any incremental changes that need to be made.

I think we all get Microsoft’s intent behind managed solutions. Maybe the model isn’t mature quite yet? I don’t know. I think you do have to keep reconsidering it as new rollup updates are being released. Managed solutions are what you are meant to use in a production environment and ultimately is the way to go for both online and on-premise solutions.

Let me conclude that I say all of this with a grain of salt. Not every company will be able to implement managed solutions. There may be IT policies in place that make using this solution methodology impractical or not possible at all. Having a multiple layered development solution and then a single test and production managed solution also makes for more work when it comes to automated builds as well.

As far as I can tell the CRM minds are still at work trying to formulate what the best practices are for managing solutions in the development life cycle. I do believe that ultimately the managed solution route is what was intended for production environments and not just for ISV’s. I expect that there will be continued improvement and contributions to the solution management philosophy in the near future.