CRM Release Management Tips &Best PracticesexploreengageelevateRazwan ChoudryMicrosoft CRM Consultant / Architect / Training InstructorCRM Consultants UK

About RazwanDynamics CRM Consultant since 2006Microsoft CRM Consultant Architect & TrainingInstructor available on ad hoc basisAuthor of ‘Winning Strategies for CRM Success’Twitter @crmconsultantsMy Free Solutions: XRM Toolbox – ‘Bulk MergeDuplicates’ Plugin / Autonumber / Geocoder &more on

Putting the CRM in SCRUMHow can organisations successfully adopt the Agile approachwith CRM implementationsFactors to consider when Sprint PlanningRisks and Impact of release cycles on overall CRM SuccessManaging parallel / concurrent crm development projectsUnderstanding how Solutions work – Managed Vs UnmanagedManaging Development environmentsAutomating the release processexploreengageelevate

Making Agile work for CRMAgile allows customers to deliver results quickly with incremental release cyclesand sprintsCRM is purchased as ready to use delivering Quick Wins / Fast DeploymentsAllows the customer to take ownership of their crmEmpowers non developers to make customisations, but what are the drawbacksAgile may instil the mentality that defects can be fixed in later releases, potentiallyoffloading the address of important design considerations such as performanceProject Priorities may change, how can we ensure our solution release cycle willstill workAgile doesn't work unless you have processes in place to support dependenciesHow can we improve release management & deployment Tasks with ALMautomationPreventing solution errors & issues post deployment – Prevention is always betterthan cure even if agile allows us to ‘Fix Later’exploreengageelevate

CRM is Forever New Requirements and Changes as Business Grows New Customer Demands New End User Demands Continuous CRM Updates and new Feature releases New SDK Features Deprecations of existing / old features Constantly evolving strategy to meet customer & business needs Eco System offerings disruptive to traditional methods Require repeatable processes to support changesexploreengageelevate

CRM Gremlinsexploreengageelevate

CRM GremlinsSolution Import FailuresAdding Dependant Objects to Solution WarningMissing DependenciesDeleting fields with same name / different type – SQL error during importCustomise Form Button – Updates the Default SolutionShipping Core customisations from different environments / Object typecode ordering could cause conflictsSolution Components with different Managed Properties/ StatesUnable to delete / remove solutions when dependencies are addedSecurity Roles – Only root is includedWorkflow - needs to be owned by same person, otherwise you cant importDeployment tasks taking too long / ComplicatedRemoving Unwanted components after importing solutionexploreengageelevate

Post go live issues that should be consideredBrowser Issues / Compatibility modeMissing Config for Users / EmailSecurity roles – access errorsOutlook Client / Incompatible Add onsEmails not sendingGUIDS are different? Breaking integrations / WorkflowsLicence types not working as expectedSitemap / Ribbon customisations – Consider Billing AdminPerformance Issues often only reported post go liveexploreengageelevate

Impact of Release Cycles on CRM AdoptionErrors releasing solutionsPreventing UpgradesUnsupported CustomisationsLimited Hotfixes and Support periodUser AdoptionIncrease in User ComplaintsMissing DeadlinesIncrease in project Costsexploreengageelevate

Importance of QA / UATOften overlooked in CRM ProjectGiven minimal priority / resourcesIssues are rushed close to release dateHow much resource & effort is put on Integration testingPerformance should be considered during solution designLoad testing / regression testingCould have wider implications / long term implicationsOnce customisations have been released, its difficult to rollback for both Managed & Unmanaged SolutionsUsing TFS will help track and issues early onexploreengageelevate

Common Releases IssuesMany resources often involvedDifficult to manage and coordinateMissed out steps due to many manual tasksOut of Sync Development / UAT environmentsRushed testing / DefectsUnable to track who made changesRegular CRM Updates hard to keep upto date / SDKChangesexploreengageelevate

Customising SolutionsData Dictionary – share available fields and plan changes,helps prevent errors when creating objectsEntity Schema design should be completed before everydevelopment project to plan for dependenciesSeparate / Isolate Development Environments to reducedependenciesUse a Core Solution to Maintain dependencies between DevenvironmentsUse separate Env for Proof of concepts, create customisationsfrom scratch to prevent Gremlins!Automate release process allows team to focus on their tasksexploreengageelevate

RisksNot adhering to a repeatable release process will have adirect impact on crm project successProject Complexity complex development increasesproject riskNumbers of devs / size of teamsLack of Resources ie QA?User Adoption if IT staff struggle, Testing and UATissues will have a direct impact on user adoptionLarge Infrastructure requirementsLack of Trainingexploreengageelevate

Problems with using Same Dev for All projectsAll Solutions required to begin as UnmanagedSoon as another solution is added will create dependencies onprior projectExporting Solution A after Solution B was Added will meanSolution A will automatically inherit any new dependenciescreated by Solution BThis will break the Solution release process, even if we used aMaster Solution for shared objects as solution will be exportedwith dependenciesSingle dev only suitable for simple and linear crm release cyclefor single solutions or linear release projectsNeed to regularly backup versions of both Managed &Unmanaged from Developmentexploreengageelevate

Managing DependenciesNew Dependencies are added to the earlier solutions everytime a new solution is added with dependant componentsExporting Solution A will include new Dependencies that wereadded by Solution A, so will not be able to import Solution Ainto Target AgainSolutions C developed on environments without Solution Bmay result in Errors when creating relationships that alreadyexist in Target, will not allow you to overwriteOccurs for both Managed or UnmanagedSolution layering should be considered during design /analysis stages not from development / release stageexploreengageelevate

Managing DependenciesAll Solutions will Have Dependencies on Core objectsThe Release Order of Solution often determines howthe Dependencies are managedWhen there is no clear release order, there should beeffort to manage the core dependencies in a dedicatedsolutionUsing a Master / Core Solution will facilitate the releaseof multiple solutionsMaster / Core Solution should have DedicatedDevelopment environmentProject Specific Development environments need to beupdated with Master / Core Solution at regular andcontrolled intervalsChanges Made directly to production will contribute toDependencies, cause issues with removing solutions.This when we should Consider Using ManagedComponentsexploreengageelevateSolution CSolution BSolution A

Creating SolutionsHow to structure your solutions for release?The recommended approach is to keep the number of solutions low to avoidcomplexity and ensure the solution customizations are independent from eachother.Single Solution (Size limit)29.296 MB for crm online6 MB default for crm on premiseDifficult to apply hotfix for managedComponent Based Solutions (size limit)Merging , layering , ordering becomes more trickyFeature Based Solution (recommended)Recommended to isolate features into separate CRM solutions so that no mergeconflicts & dependencies need to be resolved within CRM customizations.Incorporate a Core / Base Solution to Manage Dependencies when working in anenvironment with large development teams and fluxing release cyclesexploreengageelevate

Managing Dependencies with a Core / Base SolutionExport a New Solution from the Latest DevelopmentEnvironment, Containing only Common objects that may beused in other projects. Export this to your New DevNow when you start development on your Project you will beable to consume existing components and add them into yoursolution rather than creating them if they already existAny Changes made to the Core Solution Components by anyprojects need to be exported to all development environmentsusing the Core SolutionThe Core Solution will need to be updated whenever anotherproject updates components of the core solution, this can bedone beforeexploreengageelevate

Managing Parallel Solution Deploymentexploreengageelevate

Solution DesignImportant to design Schema considering broader scope offuture projectsInclude Existing and Related Projects in schema designs toshow overall dependenciesData Dictionary will improve insight and collobarationEnsures the Objects are created with future projects in mindRelationship TypeReuse of Core ObjectsHelp us be aware of dependenciesImpactRework of Entity designBreak existing solutionsexploreengageelevate

Managing Development EnvironmentsHow can we ensure development environments and solutionsare maintained with the correct version of solutions that willallow successful release into UAT & Production?Support development of Concurrent / Parallel CRM SolutionDevelopmentStreamline the release process to facilitate Development,Testing and Go LiveEnsure our Solutions are compatible with Rollups & UpdatesProblems with using the Same Development for all projects?DependenciesConflictsTestingsNo isolation when trying to resolve issuesexploreengageelevate

Managing Development EnvironmentsCRM PlatformVersionConfigurati0nSecurity &InfrastructureVersionsDev NUnmanagedUnmanagedDev XUnmanagedManaged.Net BinariesBuildsUnit TestsConfig /DeploymentStepsSourceControlDev YUnmanagedMaster/ Core n

Solutions to support Agile Release processThe Solutions feature was introduced in CRM 2011, solutions are used topackage your customisations and import/ export them to CRM deploymentsEmpowers partners to use XRM & .Net framework to deliver ISV SolutionsImport, Update and Maintain Customisation ComponentsPublisher– Allows Multiple development teams and helps prevent conflictingcustomisationsAdd Prefix to Entity and Field AttributesDefine Integer Range for Picklists/ Optionsets.Version Number – Manage Development / Releases / Updates / HotfixesCompatibility to import from earlier CRM Versions, Option to export to specifictarget CRM versionexploreengageelevate

Solutions OverviewSolutions Customisation ComponentsSettingsPublishersVersioningManaged Vs UnmanagedImport & ExportCreatingUpdating Solution ComponentsRemoving Solution ComponentsLayersMergingexploreengageelevate

Solution ComponentsSolution files can contain thefollowing CRM system objectsCan contain versions;can be exported for changemanagement.Can be Managed andUnmanagedCan contain Global Settings,But not personal settingsexploreengageelevate

Whats not included in a solution?Business UnitsUsersTeamsQueuesGoalsSubjectsProduct CataloguePersonal Views / DashboardsPersonal User SettingsCustomer Dataexploreengageelevate

Working with solution filesSolution file consists of;Customizations.xmlSolution.xmlWorkflowsWeb resources (built by the web resource file projects)Plug-in assembliesThe customizations.xml file is exported in the solution zip. Certainportions of the customizations.xml file can be edited manually.SDK\Schemas provides XSD to help you make supported modificationsEditing a managed solution file is not supportedNot all elements of the customizations.xml file can be edited. However allthese can be done GUI toolsExtracting the Solution file is useful when comparing differencesexploreengageelevate

LayersTo Understand Solution Truly, you have to think in Layers System Layer – Default SolutionUnmanaged layerManager Layer – Managed Componentsexploreengageelevate

Component StatesWhy are System Components in anUnmanaged Solution have managedstate by default?Keeps System or Business Entities asCustomisable as these entities are usedrepeatedly for many othercustomisations projectsManaged properties only becomeeffective after their associatedcomponents are installed as part of amanaged solution.The value or the IsCustomizableproperty, the type of entity, and thetype of solution will have an impact onthe behaviour of an entityCan be used use to prevent Customersfrom Deleting/ Editing System Objectsor Breaking Core Functionality afterbeing installed on productionexploreengageelevate

Unmanaged SolutionsAll Solutions begin as UnmanagedUnmanaged Solution customisation are Made at theUnmanaged Layer which is also part of the DefaultSolutionAllows us to make customisations, register plugin stepsetc, before we can export as ManagedDeleting the Unmanaged Solution only deletes thereference to the solution, not the customisationcomponentsRequires manually deleting the customisationcomponents from either the solution or Default Solutionexploreengageelevate

Managed SolutionsManged Solutions need to be exported as Managed from anUnmanaged SolutionThe whole point of Managed is locking down the Componentstates so they cannot be editedThis secures the solution in the Target / Production so it keepsthe solution feature working and prevents end users frombreaking it. Therefore it is maintainable.Managed Solutions are installed at the Managed LayerDeleting the Managed Solution will remove all itscustomisations as well as data containedAny Managed components that are customisable will be doneat the Unmanaged Layerexploreengageelevate

Managed Vs Unmanaged SolutionsCRM Supports using a mixture of both and allowing multiple solutions to easilyapply bug fixes or updates on the environment.The downside is there is no standard mechanism of removing fields from entities,webresources etc. Could create many redundant objects.The ALM for Microsoft CRM officially states that Unmanaged solution is only usedfor development and Managed is released down stream to production. (Ideal forISVs and works for incidental development or where development is following afixed release calendar, but what about for Agile scenarios where the Customer isresponsible for their own deployments?Once you release as Managed you cannot covert back to Unmanaged, howeveran Unmanaged solution can be converted to ManagedHowever Managed Solutions may interfere with the Agile Release Process wherethe solution is being developed, tested and used at the same time.If a managed solution is deployed to Test, QA and Production, If a blocking issueoccurs in the production environment it will take longer to resolve. It may bebetter to use Unmanaged so you can take a snapshot of production, replicate &resolve, update unmanaged solution and release to Production.exploreengageelevate

Updating Solutions, Layers & LimitationsSolution Component needs to belong to either a Managed orUnmanaged Component, Cannot be a Mixture of both!Components in the unmanaged solution layer cannot beupdated by a managed solution.Cannot change the attributes of unmanaged solutioncomponents so that it is in a managed solution layer, so it canbe edited or changed by a managed solution.Manually deleting the components that the unmanagedsolution installed, you can import that solution again asmanaged and then install an update for it with a managedsolution. However you will lose your data, will need to exportthe data prior to deletion and then re-import it when thecomponents are installed as managedexploreengageelevate

The Solution PublisherPublisher– Allows Multiple development teams and helps prevent conflicting customisationsAdd Prefix to Entity and Field AttributesDefine Integer Range for Picklists/ Optionsets.The solution publisher for a managed solution plays an important factor whenreleasing an update to your managed solution. Using the same solution publisher youcan create a new managed solution to update a managed solution you previouslyreleased.Components in managed layers will be owned by the solution publisher.Publisher owns the component, not the solution.Components with same name and publisher will be considered the same thing.Removing a solution does not remove a component when it is referenced by anothersolution using the same shared publisher.Default Publisher created for each environment with same default new prefix and Integerrange for optionsetsImportant when creating development environentsexploreengageelevate

Updating Solutions ConsiderationsImportance of Publisher And Solution Name when Updating SolutionsMaintain customizations (recommended) - This option maintains anyunmanaged customizations performed on components, however some of theupdates included in this solution may not take effect.Overwrite customizations - Overwrites any unmanaged customizationspreviously performed on components included in this solution. All updatesincluded in this solution will take effect.Using the Overwrite customizations option when investigating customizationsconflict issues. They can export their unmanaged solutions before so that theycan re-apply if required.“Creating a new solution with a different name and same publisher, will appear towork until the next version of the solution is deployed. Selecting the option toimport without overwriting will import the new version of the solution within alayer directly above the previous version of the core solution. This will be beneaththe solution containing the hotfix, which therefore may result in configurationand customization changes not being surfaced.”exploreengageelevate

Applying Solution Updates / HotfixesSolution must maintain the same solution publisher and the same solution nameThe Installed Date remains the Same when updating a solution, which can be misleadingUpdating the Solution does not cause loss of dataMaintain the version number by overwriting the existing solution (only include the affected components)Using the recommended approach to preserve customizations when importing managed solutions, maintaining theversion number will automatically replace any components within the solution being importedLack of ability to identify that a hotfix has been applied. Consider adding a noteOr with an incremented version number of the existing solution and create a new layerincrementing the version number will create a new managed layer for the solution above the old layer.can become misleading, as it suggests that the hotfix can be uninstalled or deleted which is not necessarily true due tothe additive nature of the platform.Creating a new solution with a different name and same publisher, will appear to work until the nextversion of the solution is deployed. selecting the option to import without overwriting will import the newversion of the core solution within a layer directly above the previous version of the core solution. This willbe beneath the solution containing the hotfix, which therefore may result in configuration andcustomization changes not being surfaced.Creating a New Solution with just the updates will allow you to rollback, but will add an additional solutioninto your organisation, which could potentially clutterexploreengageelevate

MergingMerging is howCRM willVirtually Mergethe Behaviour ofthe multiplesolutionsaccording to thefollowing rulesAllowscombination ofmany Managedand UnmanagedsolutionsOrder of SolutionImports mayeffect behaviourexploreengageelevate

Deleting / Removing SolutionsManaged Solutions will be removed including dataDeleting the Unmanaged Solution will only delete theSolution Container, However all Customised Componentswill Remain. Will have to manually delete any unmanagedcomponents from the D