Skip to main content

Moving faster in cloud transformation without cutting governance

 Many organisations begin cloud transformation by asking, “How do we move faster?” A better question is often, “What is slowing us down in the first place?”

In my experience, Azure transformation programmes rarely slow down because teams are too cautious. More often, they slow down because the foundations are weak. Decisions are inconsistent. Too much is treated as bespoke work. What looks like speed at the beginning often becomes rework later. Teams push workloads forward but then need to come back and fix identity, networking, security, subscription design, resilience, or operational readiness. This is why I believe strongly that speed does not come from shortcuts. It comes from clarity, repeatability, and doing the important basics early.


On Azure, this starts with a strong landing zone. When management groups, subscriptions, Azure Policy, RBAC, connectivity, monitoring, and security baselines are established early, delivery teams can move with much more confidence. They are not solving the same platform questions again and again in every project. Instead, they are building on top of an environment that is governed, secure, and ready to scale. This is where real acceleration starts. Not in cutting governance, but in making governance usable, clear, and available at the right time.
The second major driver is standardisation. Azure offers flexibility, which is one of its biggest strengths, but large transformation programmes cannot scale if every team makes different architectural decisions. Standard patterns for networking, identity integration, resilience, deployment, tagging, and operations create consistency and reduce friction. Repeatability matters much more than heroics. Heroics may help in one difficult situation, but they do not create momentum across a transformation programme. Reusable blueprints, engineering guardrails, and common delivery patterns do.
From what I have seen, the programmes that move faster usually do four things well:
  • Build the Azure foundation early.
  • Classify workloads by service pattern.
  • Automate as much as possible
  • Grow internal ownership during delivery
Another lesson is that organisations should move by service pattern, not only by infrastructure. The fastest Azure programmes do not treat every workload as a unique case. They assess workloads early and align them to the right target model. Some applications can be rehosted. Others should be replatformed. Some need deeper modernisation using Azure Kubernetes Service, Azure App Service, Azure SQL Managed Instance, or serverless services. The key is not to over-design every migration. The key is to make good decisions once and then apply them repeatedly with discipline. This reduces design churn and creates a delivery rhythm.
I also strongly believe in wave-based delivery. Big cloud programmes are easier to govern and accelerate when they move in waves, with clear checkpoints, visibility into dependencies, and practical sequencing. This gives leaders better control without creating unnecessary bureaucracy. It also allows teams to generate early wins while still keeping alignment with the long-term Azure platform direction. In many organisations, wave-based delivery is what creates the balance between momentum and control.
There is also a point that should not be underestimated: safe transformation is faster transformation. Some people still think stability slows the programme down. I see the opposite. Protecting service continuity, validating rollback options, embedding observability with Azure Monitor and Log Analytics, and strengthening security with Microsoft Defender are not barriers to speed. They are what keep the programme moving. Fragile delivery always slows down due to outages, rollback events, and low confidence, which create hesitation in the next waves.
Cloud transformation should simplify, not just relocate. Azure is an opportunity to reduce complexity, retire legacy systems, consolidate services, and improve transparency. Simply moving complexity to Azure is not real transformation—it just changes the problem’s location.
Another area that is often underestimated is capability transfer. Knowledge transfer should not happen only at the end as a handover activity. It must happen during delivery. Internal teams should be involved from day one in engineering, operations, governance, and platform management. The real success is not only that the platform is live on Azure. The real success is that the client team can run it, govern it, optimise it, and evolve it with confidence.
Finally, automation is essential. Infrastructure as code with Terraform or Bicep, standard CI/CD pipelines, policy-driven governance, and automated controls all improve consistency and speed. AI also has a role, especially in documentation analysis, onboarding, code understanding, and knowledge capture. But AI should support delivery and remove friction, not become a distraction.
The takeaway is clear: governance drives speed on Azure. Fast transformation comes from investing early in landing zones, repeatable patterns, automation, and internal capability—not from cutting corners. This approach creates cloud transformation that is faster, stronger, and more sustainable.

Comments

Popular posts from this blog

How to audit an Azure Cosmos DB

In this post, we will talk about how we can audit an Azure Cosmos DB database. Before jumping into the problem let us define the business requirement: As an Administrator I want to be able to audit all changes that were done to specific collection inside my Azure Cosmos DB. The requirement is simple, but can be a little tricky to implement fully. First of all when you are using Azure Cosmos DB or any other storage solution there are 99% odds that you’ll have more than one system that writes data to it. This means that you have or not have control on the systems that are doing any create/update/delete operations. Solution 1: Diagnostic Logs Cosmos DB allows us activate diagnostics logs and stream the output a storage account for achieving to other systems like Event Hub or Log Analytics. This would allow us to have information related to who, when, what, response code and how the access operation to our Cosmos DB was done. Beside this there is a field that specifies what was th...

Can User Technical Profile Influence AI Architecture Decisions?

In the last few days, I ran a small experiment on Devin/Windsurf/Cascade, BMAD, and LLM-based architecture decisions. The initial concern was simple: if an AI coding assistant knows something about the user, for example, that the user is a Java developer or a .NET developer, can this information influence the architecture and technology stack that the AI will propose? This question is important because many companies are starting to use AI tools not only for coding but also for product discovery, architecture, documentation, and technical decision-making. If the AI is influenced by the developer's personal profile, the result may not be fully neutral. It may look like a business or architecture decision, but in reality, it may be partially shaped by the context of the person using the tool. The test was done using BMAD with Devin/Windsurf/Cascade. The scenario was a unified field service operations platform. The task was to let BMAD refine the product, define the architecture and s...

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 http://go.microsoft.com/fwlink/?LinkId=260882 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...