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