Skip to main content

ADR-003: Cloud Strategy — Azure-Preferred, Vendor-Agnostic

Status: Accepted Date: 2026-03-16

Context

PowerSeller has existing Azure infrastructure — SQL Managed Instance, Azure Virtual Desktop (MWFI), and Azure DevOps. The SaaS platform needs a cloud provider, but hard vendor lock-in would create long-term risk and limit flexibility.

Options considered:

  • Azure-exclusive: Use Azure-specific services everywhere (Cosmos DB, Azure Functions, Azure AD)
  • Azure-preferred, vendor-agnostic at application layer: Use Azure for infrastructure, keep application code portable
  • Multi-cloud from day one: Deploy to Azure and AWS simultaneously
  • Cloud-agnostic: Kubernetes everywhere, no managed services

Decision

Azure as the primary cloud provider. Application code is containerized and uses standard protocols. No Azure-specific SDK calls in domain logic.

Key principles:

  • Infrastructure is Azure: SQL MI, Container Apps, Service Bus, Redis, Static Web Apps
  • Application code is portable: OpenID Connect (not Azure AD SDK), standard SQL (not Cosmos DB), OpenTelemetry (not Application Insights SDK)
  • Monitoring is vendor-agnostic: OpenTelemetry exports to Azure Monitor today, could export to Grafana tomorrow
  • Containers are the deployment unit: Docker images run anywhere

Consequences

Positive:

  • Leverages existing Azure investments (SQL MI, AVD, DevOps)
  • Application code can theoretically run on any cloud or on-premises
  • OpenTelemetry provides observability independence
  • No proprietary lock-in at the domain logic level

Negative:

  • Slightly more work than using Azure-native SDKs directly
  • Must resist convenience of Azure-specific features in application code
  • Azure Container Apps is a managed service — if migrating away, would need Kubernetes setup