{"id":11,"date":"2019-06-12T02:36:55","date_gmt":"2019-06-12T02:36:55","guid":{"rendered":"https:\/\/blog.devopsabcs.com\/?p=11"},"modified":"2023-09-23T03:08:35","modified_gmt":"2023-09-23T03:08:35","slug":"one-project-to-rule-them-all","status":"publish","type":"post","link":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/2019\/06\/12\/one-project-to-rule-them-all\/","title":{"rendered":"One Project To Rule Them All"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">The Trilogy &#8211; Part 1<\/h3>\n\n\n\n<p>In this 3-part series showcased on <a href=\"https:\/\/devblogs.microsoft.com\/premier-developer\/one-project-to-rule-them-all\/\">Microsoft&#8217;s Premier Developer Blog<\/a>, we will discuss the business value of having a single organization, single project approach in your Azure DevOps journey.<\/p>\n\n\n\n<p>Why a single project approach you ask? Usually, organizations or enterprises start their Azure DevOps journey in one of two ways:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>A <strong>migration<\/strong> from pre-existing on-premise Azure DevOps Server (aka Team Foundation Server) project collection(s). This is usually done using High Fidelity tools such as the <a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=54274\">TFS Migrator Tool<\/a>. <\/li><li><strong>Organically<\/strong>: meaning the organization or enterprise initially creates an Azure DevOps Organization with a project in it. Sooner or later, the need is felt to add more projects to this initial ADO organization or even create supplementary ADO organizations to house additional projects.<\/li><\/ol>\n\n\n\n<p>In any case, the organization or enterprise may come to the realization that these scattered projects in multiple ADO organizations have become unwieldly and difficult to manage. A side note: henceforth, when we mention the word <strong>enterprise<\/strong>, we mean &#8220;<strong>organization or enterprise<\/strong>&#8221; but for the sake of brevity and to avoid confusion with an Azure DevOps organization, we may have a preference for the former expression. Common challenges are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dealing with a fragmented view of work within the enterprise<\/li><li>Planning <em>vertically<\/em> from the portfolio (or leadership) level down to the level of the project or feature teams<\/li><li>Conversely, obtaining a wider context of work by going up to the portfolio level<\/li><li>Planning <em>horizontally<\/em> across multiple project or feature teams (e.g. viewing <a href=\"https:\/\/en.wikipedia.org\/wiki\/Gantt_chart\">Gantt charts<\/a> of all the feature teams on a common timeline and cadence)<\/li><li>Managing security enterprise-wide<\/li><li>Sharing source code, pipeline definitions, test plans, and artifacts across the enterprise<\/li><li>Facilitating mobility and fluidity of individual team members from one team to another<\/li><li>Acquiring Business Intelligence from the multitude of scattered or even siloed projects<\/li><li>Delivering <a href=\"https:\/\/en.wikipedia.org\/wiki\/OKR\">OKR<\/a>&#8216;s, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Performance_indicator\">KPI<\/a>&#8216;s, Metrics or Reports enterprise-wide<\/li><\/ul>\n\n\n\n<p>The above challenges can be dealt with using a single organization, single project strategy. The &#8220;One Project To Rule Them All&#8221; idea is certainly not new. Indeed, it&#8217;s mentioned by <a href=\"https:\/\/nkdagility.com\/author\/mrhinsh\/\">Martin Hinshelwood<\/a> in this July 2012 <a href=\"https:\/\/nkdagility.com\/one-team-project\/\">blog post<\/a>. More recently, in May 2018, <a href=\"https:\/\/colinsalmcorner.com\/\">Colin Dembovsky<\/a> wrote an interesting <a href=\"https:\/\/colinsalmcorner.com\/vsts-one-team-project-and-inverse-conway-maneuver\/\">blog post<\/a> in the matter that I encourage you to read. Finally, the Microsoft Documentation on <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/organizations\/projects\/about-projects?view=azure-devops#when-to-add-another-project\">&#8220;<\/a><u><font color=\"#000117\"><font style=\"background-color: rgba(0, 127, 172, 0.2);\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/organizations\/projects\/about-projects?view=azure-devops#when-to-add-another-project\">When to add another team project&#8221;<\/a><\/font><\/font><\/u> explicitly states:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em>In general, we recommend that you use a single project to support your organization or enterprise.<\/em><\/p><\/blockquote>\n\n\n\n<p>Unfortunately, many enterprises have multiple organizations and projects in their portfolio and merging them into a single project can seem a daunting task as can be seen by this <a href=\"https:\/\/developercommunity.visualstudio.com\/idea\/365365\/make-it-possible-to-move-a-team-project-between-te-1.html\">request<\/a>. While there are tools out there that can help, there is no &#8220;Single Tool To Rule Them All&#8221; if I may express myself this way. Nonetheless, we have the following at our disposal:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/azure\/devops\/?view=azure-devops-rest-5.0\">Azure DevOps Services REST API<\/a><\/li><li><a href=\"https:\/\/github.com\/nkdAgility\/azure-devops-migration-tools\">Naked Agility\u2019s Azure DevOps Migration Tools<\/a><\/li><li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=nkdagility.processtemplate\">Azure DevOps Process Tools<\/a> which is a wrapper for <a href=\"https:\/\/github.com\/Microsoft\/process-migrator\">Microsoft&#8217;s process migrator<\/a><\/li><\/ol>\n\n\n\n<p>The reality is that it&#8217;s a large endeavour to migrate multiple projects into a single one with minimal disruption. In addition, different enterprises or organizations have different needs. For instance, a consulting firm housing projects for its customers and inviting them into their organization would require more isolation in order to prevent customer A from accessing critical or sensitive information of customer B such as source code.<\/p>\n\n\n\n<p>Apart from cloning a project from one organization to another, all other project migrations such as merging multiple projects together are by their very nature <em><strong>not<\/strong><\/em> high fidelity. Typically, one migrates a project into a single parent or host project by moving its work items under a fenced Area of the parent project. Similarly, the migrated project&#8217;s pipelines are placed within some isolated folder of the host project. This allows us to migrate multiple leaf projects within a common host infrastructure or trunk reflecting the enterprise&#8217;s portfolio and\/or program structure.<\/p>\n\n\n\n<p>Let&#8217;s illustrate the above with a concrete example. I started with an Azure DevOps organization called <strong>devopsabcs<\/strong> containing 29 projects based on the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/work-items\/guidance\/scrum-process?view=azure-devops\">Scrum process<\/a>. A good portion of these projects were part of my training portfolio to pass the <a href=\"https:\/\/www.microsoft.com\/en-us\/learning\/exam-AZ-203.aspx\">AZ-203 Exam: Developing Solutions for Microsoft Azure<\/a>. Other projects are part of other portfolios such as my Research portfolio containing various R&amp;D projects. The following abridged json describes a subset of the projects to merge:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\t\"TargetOrganizationName\": \"agileatscale\",\n\t\"TargetProjectName\": \"OneProject07\",\n\t\"TargetPAT\": \"ZZZtargetOrgPAT2ZZZ\",\n\t\"CoreRootOutputFolder\": \"c:\\\\templates\",\n\t\"RootPathToConsoleApplications\": \"c:\\\\src\\\\devopsabcs\\\\migrationtool\",\n\t\"SimplifiedProjects\": [\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"ApplicationInsights\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Training\\\\CertAZ203\",\n\t\t\t\"TeamPrefix\": \"AI_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"CosmosDB\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Training\\\\CertAZ203\",\n\t\t\t\"TeamPrefix\": \"CDB_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"DevOpsDemoGenerator\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\Migrations\",\n\t\t\t\"TeamPrefix\": \"DG_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"SomeFinTechCo-Hackfest-PoC\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Customer\\\\FinTech\",\n\t\t\t\"TeamPrefix\": \"FIN_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"hol\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Workshops\\\\DevOps\",\n\t\t\t\"TeamPrefix\": \"HOL_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"ManagedIdentities\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Training\\\\CertAZ203\",\n\t\t\t\"TeamPrefix\": \"MI_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"MigrationTool\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\Migrations\",\n\t\t\t\"TeamPrefix\": \"MT_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"PartsUnlimited\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Demo\\\\Migrations\",\n\t\t\t\"TeamPrefix\": \"PU_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"PowerBI\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\BusinessIntelligence\",\n\t\t\t\"TeamPrefix\": \"PBI_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"SmartHotel360\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Demo\\\\Migrations\",\n\t\t\t\"TeamPrefix\": \"SH_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"SpecFlow\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\Testing\",\n\t\t\t\"TeamPrefix\": \"SF_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"spring-music-devops\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\OSS\",\n\t\t\t\"TeamPrefix\": \"SPR_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"VstsWorkItemMigrator\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Research\\\\Migrations\",\n\t\t\t\"TeamPrefix\": \"WIT_\"\n\t\t},\n\t\t{\n\t\t\t\"IsClone\": false,\n\t\t\t\"SourceOrganizationName\": \"devopsabcs\",\n\t\t\t\"SourceProjectName\": \"WebJobs\",\n\t\t\t\"SourcePAT\": \"ZZZsourceOrgPATZZZ\",\n\t\t\t\"AreaPrefix\": \"Training\\\\CertAZ203\",\n\t\t\t\"TeamPrefix\": \"WJ_\"\n\t\t}\n\t],\n\t\"LoadEnginesPostCreation\": true\n}<\/code><\/pre>\n\n\n\n<p>A few comments are in order. Although the <em>SourceOrganizationName <\/em>for each project above is the same, namely, <strong>devopsabcs<\/strong>, this does not need to be the case. Indeed, the <strong>Migration Tool<\/strong> is capable of merging projects coming from multiple Azure DevOps organizations as long as you provide a valid <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/organizations\/accounts\/use-personal-access-tokens-to-authenticate?view=azure-devops\">Personal Access Token (PAT)<\/a> for each source project. Discussion on the Migration Tool is deferred to <a href=\"https:\/\/blog.devopsabcs.com\/index.php\/2019\/06\/20\/one-project-to-rule-them-all-2\/\">Part 2 of this Blog series<\/a>. Each <em>AreaPrefix<\/em> above consists of exactly two path parts following the pattern &#8220;{<em>Portfolio Name<\/em>}\\\\{<em>Program Name<\/em>}&#8221;. Though this may be a common desired configuration for the single host project, it does not need to be the case. We do allow for variance in the number of path parts. In addition, the <em>AreaPrefix<\/em> is used to specify the build and release folder structure to house the migrated pipelines as well as the query folder structure to contain the source project&#8217;s migrated queries. Finally, the <em>TeamPrefix<\/em> is used to prefix the migrated team names as well as the migrated repository names and service connection names.<\/p>\n\n\n\n<p>The prefixes serve two purposes:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Avoid name clashes in the host or target project<\/li><li>More importantly, facilitate filtering of teams, repositories, and service connections<\/li><\/ol>\n\n\n\n<p>It&#8217;s instructive to view a before and after migration picture for a specific project. We choose the <em>SmartHotel360<\/em> project which can be generated via the <a href=\"https:\/\/azuredevopsdemogenerator.azurewebsites.net\/\">Azure DevOps Demo Generator<\/a>. We used the Demo Generator to <em>clone<\/em> the SmartHotel360 project into our devopsabcs organization.<\/p>\n\n\n\n<p>The following images paint the initial picture of SmartHotel360:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/04-SmartHotel360-teams.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/04-SmartHotel360-teams-1024x658.png\" alt=\"\" class=\"wp-image-54\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/04-SmartHotel360-teams-1024x658.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/04-SmartHotel360-teams-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/04-SmartHotel360-teams-768x493.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 project contains 3 teams<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-1024x659.png\" alt=\"\" class=\"wp-image-57\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Project Iterations<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-1024x683.png\" alt=\"\" class=\"wp-image-59\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Project areas<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-for-team.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-for-team-1024x683.png\" alt=\"\" class=\"wp-image-58\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-for-team-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-for-team-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/05-SmartHotel360-iterations-for-team-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Team iterations<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-for-team.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-for-team-1024x683.png\" alt=\"\" class=\"wp-image-60\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-for-team-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-for-team-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/06-SmartHotel360-areas-for-team-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Team areas<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/07-SmartHotel360-service-connections.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/07-SmartHotel360-service-connections-1024x683.png\" alt=\"\" class=\"wp-image-61\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/07-SmartHotel360-service-connections-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/07-SmartHotel360-service-connections-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/07-SmartHotel360-service-connections-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 service connections<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/08-SmartHotel360-repositories.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/08-SmartHotel360-repositories-1024x683.png\" alt=\"\" class=\"wp-image-62\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/08-SmartHotel360-repositories-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/08-SmartHotel360-repositories-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/08-SmartHotel360-repositories-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 repositories<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/09-SmartHotel360-work-items.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/09-SmartHotel360-work-items-1024x683.png\" alt=\"\" class=\"wp-image-63\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/09-SmartHotel360-work-items-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/09-SmartHotel360-work-items-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/09-SmartHotel360-work-items-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 work items<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/10-SmartHotel360-queries.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/10-SmartHotel360-queries-1024x683.png\" alt=\"\" class=\"wp-image-64\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/10-SmartHotel360-queries-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/10-SmartHotel360-queries-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/10-SmartHotel360-queries-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 queries<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/11-SmartHotel360-build-pipelines.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/11-SmartHotel360-build-pipelines-1024x683.png\" alt=\"\" class=\"wp-image-65\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/11-SmartHotel360-build-pipelines-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/11-SmartHotel360-build-pipelines-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/11-SmartHotel360-build-pipelines-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Build Pipelines<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/12-SmartHotel360-release-pipelines.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/12-SmartHotel360-release-pipelines-1024x659.png\" alt=\"\" class=\"wp-image-66\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/12-SmartHotel360-release-pipelines-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/12-SmartHotel360-release-pipelines-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/12-SmartHotel360-release-pipelines-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>SmartHotel360 Release Pipelines<\/figcaption><\/figure>\n\n\n\n<p>After using the <strong>Migration Tool<\/strong>, this is how the <em>SmartHotel360<\/em> project got migrated into the single project <em>OneProject07<\/em> of the single organization <strong>agileatscale<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/02-resulting-merged-project.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/02-resulting-merged-project-1024x683.png\" alt=\"\" class=\"wp-image-16\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/02-resulting-merged-project-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/02-resulting-merged-project-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/02-resulting-merged-project-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The 3 teams got migrated and prefixed with &#8220;<strong>SH_<\/strong>&#8220;. The team members for each team got created (if they did not already exist in the target organization) and added to the corresponding team(s).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/13-SmartHotel360-migrated-teams.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/13-SmartHotel360-migrated-teams-1024x683.png\" alt=\"\" class=\"wp-image-70\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/13-SmartHotel360-migrated-teams-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/13-SmartHotel360-migrated-teams-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/13-SmartHotel360-migrated-teams-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The SmartHotel360 iterations got migrated and placed under the node with path &#8220;<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong>\\\\SmartHotel360<\/em>&#8220;. Observe that the <em>AreaPrefix<\/em> specified was &#8220;<strong>Demo\\\\Migrations<\/strong>&#8220;. In this case, the migration of iterations is non-trivial and highly dependent on the enterprise&#8217;s needs. Ideally, iterations should be shared across all enterprise teams. However, in practice, this may be a non-trivial task due to the many possible variations in the way each source project could have defined and configured its iteration node structure.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/14-SmartHotel360-migrated-project-iterations.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/14-SmartHotel360-migrated-project-iterations-1024x683.png\" alt=\"\" class=\"wp-image-71\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/14-SmartHotel360-migrated-project-iterations-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/14-SmartHotel360-migrated-project-iterations-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/14-SmartHotel360-migrated-project-iterations-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>By contrast, the migration of the SmartHotel360 areas is more straightforward. We&#8217;ve simply migrated the source area structure under the path &#8220;<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong>\\\\SmartHotel360<\/em>&#8220;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-1024x683.png\" alt=\"\" class=\"wp-image-72\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Furthermore, we&#8217;ve fenced the &#8220;<em>SH_SmartHotel 360 Team<\/em>&#8221; to the path &#8220;<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong>\\\\SmartHotel360<\/em>&#8221; thereby ensuring its members don&#8217;t have access to the other migrated projects. So unless a member had access to other projects prior to migration, that member will only be able to access work items under the above area path.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-security.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-security-1024x659.png\" alt=\"\" class=\"wp-image-80\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-security-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-security-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/15-SmartHotel360-migrated-project-areas-security-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The &#8220;<em>SH_SmartHotel 360 Team<\/em>&#8221; iterations are prefixed with &#8220;<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong><\/em>&#8221; but have essentially been preserved.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-iterations.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-iterations-1024x683.png\" alt=\"\" class=\"wp-image-74\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-iterations-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-iterations-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-iterations-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Similarly, the \u201c<em>SH_SmartHotel 360 Team<\/em>\u201d areas are prefixed with \u201c<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong><\/em>\u201d but have essentially been preserved.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-areas.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-areas-1024x683.png\" alt=\"\" class=\"wp-image-73\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-areas-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-areas-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/16-SmartHotel360-migrated-team-areas-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The service connections have been prefixed with &#8220;<strong>SH_<\/strong>&#8221; in order to avoid name clashes. It&#8217;s important to migrate service connections as they are often required dependencies for build and release definitions.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/17-SmartHotel360-migrated-service-connections.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/17-SmartHotel360-migrated-service-connections-1024x683.png\" alt=\"\" class=\"wp-image-75\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/17-SmartHotel360-migrated-service-connections-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/17-SmartHotel360-migrated-service-connections-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/17-SmartHotel360-migrated-service-connections-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The repositories are also prefixed by &#8220;<strong>SH_<\/strong>&#8220;. Furthermore, we&#8217;ve set access control entries for the \u201c<em>SH_SmartHotel 360 Team<\/em>\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/18-SmartHotel360-migrated-repositories.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/18-SmartHotel360-migrated-repositories-1024x683.png\" alt=\"\" class=\"wp-image-76\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/18-SmartHotel360-migrated-repositories-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/18-SmartHotel360-migrated-repositories-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/18-SmartHotel360-migrated-repositories-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The migrated work items have area and iteration prefixed by \u201c<em>OneProject07\\\\<strong>Demo\\\\Migrations<\/strong><\/em>\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/19-SmartHotel360-migrated-work-items.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/19-SmartHotel360-migrated-work-items-1024x683.png\" alt=\"\" class=\"wp-image-86\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/19-SmartHotel360-migrated-work-items-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/19-SmartHotel360-migrated-work-items-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/19-SmartHotel360-migrated-work-items-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>The Shared Queries got migrated under the path \u201c<em>Shared Queries\/<\/em><i><strong>Demo\/Migrations<\/strong><\/i><em>\/SmartHotel360<\/em>\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-1024x683.png\" alt=\"\" class=\"wp-image-87\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-1024x683.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-300x200.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-768x512.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>In addition, we&#8217;ve configured the following access control entries in order to limit the scope of the \u201c<em>SH_SmartHotel 360 Team<\/em>\u201d:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-security.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-security-1024x659.png\" alt=\"\" class=\"wp-image-91\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-security-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-security-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/20-SmartHotel360-migrated-queries-security-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Finally, the build and release pipelines have been migrated under the expected folder structure and security permissions as can be seen here:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/21-SmartHotel360-migrated-build-pipelines.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/21-SmartHotel360-migrated-build-pipelines-1024x659.png\" alt=\"\" class=\"wp-image-88\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/21-SmartHotel360-migrated-build-pipelines-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/21-SmartHotel360-migrated-build-pipelines-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/21-SmartHotel360-migrated-build-pipelines-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/22-SmartHotel360-migrated-release-pipelines.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/blog.devopsabcs.com\/wp-content\/uploads\/2019\/06\/22-SmartHotel360-migrated-release-pipelines-1024x659.png\" alt=\"\" class=\"wp-image-89\" srcset=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/22-SmartHotel360-migrated-release-pipelines-1024x659.png 1024w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/22-SmartHotel360-migrated-release-pipelines-300x193.png 300w, https:\/\/blog-dev-001-bcdr.devopsabcs.com\/wp-content\/uploads\/2019\/06\/22-SmartHotel360-migrated-release-pipelines-768x494.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>In conclusion, if you are thinking of moving to <a href=\"https:\/\/azure.microsoft.com\/services\/devops\">Azure DevOps<\/a>, I encourage you to do things right from the start and consider the ideas put forth in this article and by the others mentioned. Do your due diligence! You won&#8217;t regret your decision as the platform is quite mature and still continually evolving.<\/p>\n\n\n\n<p>If, like many, you have multiple projects in one or more organizations and are considering consolidating these projects into &#8220;One Project To Rule Them All&#8221;, then stay tuned for <a href=\"https:\/\/blog.devopsabcs.com\/index.php\/2019\/06\/20\/one-project-to-rule-them-all-2\/\">Part 2 of this Blog series<\/a> where we will discuss the <strong>Migration Tool<\/strong> mentioned in this article.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Additional Exploration<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/plans\/?view=azure-devops\">Plans (Agile at scale)<\/a><\/li><li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/plans\/portfolio-management?view=azure-devops\">Portfolio management<\/a><\/li><li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/plans\/configure-hierarchical-teams?view=azure-devops\">Configure a hierarchy of teams<\/a><\/li><li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/plans\/review-team-plans?view=azure-devops\">Review team Delivery Plans<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The Trilogy &#8211; Part 1 In this 3-part series showcased on Microsoft&#8217;s Premier Developer Blog, we will discuss the business value of having a single organization, single project approach in your Azure DevOps journey. Why a single project approach you ask? Usually, organizations or enterprises start their Azure DevOps journey in one of two ways:<\/p>\n<p><a class=\"readmore\" href=\"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/2019\/06\/12\/one-project-to-rule-them-all\/\"><span class=\"arrow-right icon\"><\/span>Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":70,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7],"tags":[12,10,8,11,9],"class_list":["post-11","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-project-management","tag-agile-at-scale","tag-azure-devops","tag-devops","tag-migrator-tool","tag-project-management"],"_links":{"self":[{"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":62,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":411,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/posts\/11\/revisions\/411"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/media\/70"}],"wp:attachment":[{"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-dev-001-bcdr.devopsabcs.com\/index.php\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}