Skip to main content

Tools, templates and assessments for the Define strategy phase of CAF (Microsoft Cloud Adoption Framework)

Microsoft is offering an excellent framework to support cloud migration and adoption process – Microsoft Cloud Adoption Framework (CAF) 

The framework defined an iterative process with the following phases:

  1. Define Strategy
  2. Plan
  3. Ready
  4. Adopt
  5. Govern
  6. Manage

For each of them, Cloud Adoption Framework (CAF) provides us a list of templates, tools, and assessment mechanisms that can help us improve the adoption and migration process. Let's take a look at the ones for Define Strategy.

Define Strategy Tools, Assessments, and Templates

Cloud journey tracker


The primary purpose of this assessment is to help us identify how we should do Azure's adoption. The assessment identifies areas of the CAF framework that are relevant for our adoption of the migration journey.

There are in total 8 questions that can be covered in around 15 minutes, covering areas like adoption strategy, plan, ready, govern, and manage. The assessment helps us identify where we are now from the cloud maturity level and the adoption areas (e.g., strategy, plan, ready, govern, manage).

The output of the assessment provides us scoring that takes into account what kind of cloud adoption we want to make. Additionally, it provides a list of recommended actions that we can take to improve our understanding of the cloud journey and the business objectives that we want to achieve for each area. 

The information is valuable if you are at the beginning of the journey and you have a basic experience with the cloud and how to adopt it. 


Business outcome template


The Excel template provides us the ability to collect the adoption outcomes that we want to achieve. Each business outcome has 5 different items:

  1. Stakeholders (e.g., Financial Product Owner)
  2. Primary business outcome (e.g., Decrease the total time of the monthly invoice processing)
  3. Business Drivers (e.g., Improve the waiting time)
  4. KPI (e.g., 30% opportunity time per month reduce)
  5. Capability (e.g., Invoice sorting automation)

The KPI item provides help us later on during the cloud adoption to measure the adoption's success. KPI needs to be set from the beginning. Otherwise, the business value is hard to track.

At the end of the exercise, we will have the list of all business outcomes, together with the list of names of the main stakeholders, KPIs, and the main business drivers. 

A full list of business outcomes that can be used, specific for each industry can be checked on the CAF website -


Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine: threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration: TeamCity .NET 4.51 EF 6.0.2 VS2013 It see

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions. Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood. using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope. In the fol

GET call of REST API that contains '/'-slash character in the value of a parameter

Let’s assume that we have the following scenario: I have a public HTTP endpoint and I need to post some content using GET command. One of the parameters contains special characters like “\” and “/”. If the endpoint is an ApiController than you may have problems if you encode the parameter using the http encoder. using (var httpClient = new HttpClient()) { httpClient.BaseAddress = baseUrl; Task<HttpResponseMessage> response = httpClient.GetAsync(string.Format("api/foo/{0}", "qwert/qwerqwer"))); response.Wait(); response.Result.EnsureSuccessStatusCode(); } One possible solution would be to encode the query parameter using UrlTokenEncode method of HttpServerUtility class and GetBytes method ofUTF8. In this way you would get the array of bytes of the parameter and encode them as a url token. The following code show to you how you could write the encode and decode methods.