<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cloud Architecture Patterns on Software Engineering Learning Paths</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/</link><description>Recent content in Cloud Architecture Patterns on Software Engineering Learning Paths</description><generator>Hugo</generator><language>en</language><atom:link href="https://kyngo.github.io/learning-paths/paths/cloud-architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloud Computing Fundamentals</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/01-cloud-computing-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/01-cloud-computing-fundamentals/</guid><description>&lt;h1 id="cloud-computing-fundamentals"&gt;Cloud Computing Fundamentals&lt;a class="anchor" href="#cloud-computing-fundamentals"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cloud computing is renting someone else&amp;rsquo;s computers — but the architecture decisions you make on those rented computers are entirely different from on-premises. This section covers the service models, shared responsibilities, and design principles that underpin every cloud-native system.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="cloud-service-models"&gt;Cloud Service Models&lt;a class="anchor" href="#cloud-service-models"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every cloud provider offers services across a spectrum of abstraction. Understanding where each model sits determines what you manage versus what the provider manages.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│ YOU MANAGE EVERYTHING │
│ On-Premises │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
│ │ App │ App │ App │ App │ App │ │
│ │ Runtime │ Runtime │ Runtime │ Runtime │ Runtime │ │
│ │ OS │ OS │ OS │ OS │ OS │ │
│ │ Compute │ Compute │ Compute │ Compute │ Compute │ │
│ │ Storage │ Storage │ Storage │ Storage │ Storage │ │
│ │ Network │ Network │ Network │ Network │ Network │ │
│ └──────────┴──────────┴──────────┴──────────┴──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ IaaS PaaS FaaS SaaS │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ App ▲ │ │ App ▲ │ │ Code ▲ │ │ ▲ │ │
│ │ Runtime│ │ │ │ │ │ │ │ │ │ │ │
│ │ OS │Y│ │ Runtime│P│ │ Runtime│P│ │ App │P│ │
│ │ ───────│O│ │ OS │R│ │ OS │R│ │ Runtime│R│ │
│ │ Compute│U│ │ ───────│O│ │ ───────│O│ │ OS │O│ │
│ │ Storage│ │ │ Compute│V│ │ Compute│V│ │ Compute│V│ │
│ │ Network│ │ │ Storage│ │ │ Storage│ │ │ Storage│ │ │
│ └────────┘ │ │ Network│ │ │ Network│ │ │ Network│ │ │
│ │ └────────┘ │ └────────┘ │ └────────┘ │ │
│ YOU ▲ │ │ │ │ │
│ PROVIDER ─ │ │ │ │ │
└─────────────────────────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="service-model-comparison"&gt;Service Model Comparison&lt;a class="anchor" href="#service-model-comparison"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Model&lt;/th&gt;
					&lt;th&gt;You Manage&lt;/th&gt;
					&lt;th&gt;Provider Manages&lt;/th&gt;
					&lt;th&gt;Examples&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;IaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;OS, runtime, app, data&lt;/td&gt;
					&lt;td&gt;Hardware, networking, virtualisation&lt;/td&gt;
					&lt;td&gt;EC2, Compute Engine, Azure VMs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;App code, data&lt;/td&gt;
					&lt;td&gt;OS, runtime, scaling, patching&lt;/td&gt;
					&lt;td&gt;App Engine, Elastic Beanstalk, Azure App Service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;FaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Function code&lt;/td&gt;
					&lt;td&gt;Everything else, including scaling to zero&lt;/td&gt;
					&lt;td&gt;Lambda, Cloud Functions, Azure Functions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;SaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Configuration, data&lt;/td&gt;
					&lt;td&gt;The entire application&lt;/td&gt;
					&lt;td&gt;Gmail, Salesforce, Datadog&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;CaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Container images, orchestration config&lt;/td&gt;
					&lt;td&gt;Infrastructure, container runtime&lt;/td&gt;
					&lt;td&gt;ECS, GKE, AKS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;DBaaS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Schema, queries, data&lt;/td&gt;
					&lt;td&gt;Engine, patching, backups, scaling&lt;/td&gt;
					&lt;td&gt;RDS, Cloud SQL, Cosmos DB&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="choosing-a-service-model"&gt;Choosing a Service Model&lt;a class="anchor" href="#choosing-a-service-model"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Is your team managing the OS and patching today?
├── Yes, and we want to keep control → IaaS
├── Yes, but we&amp;#39;d rather not → PaaS or CaaS
└── We just want to ship code
 ├── Stateless, event-driven → FaaS
 ├── Long-running processes → PaaS or CaaS
 └── Standard business app → SaaS (buy, don&amp;#39;t build)&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="the-shared-responsibility-model"&gt;The Shared Responsibility Model&lt;a class="anchor" href="#the-shared-responsibility-model"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Security and operations responsibilities split between you and the provider. The split point varies by service model.&lt;/p&gt;</description></item><item><title>Multi-Account &amp; Organisation Strategy</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/02-multi-account-organisation-strategy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/02-multi-account-organisation-strategy/</guid><description>&lt;h1 id="multi-account--organisation-strategy"&gt;Multi-Account &amp;amp; Organisation Strategy&lt;a class="anchor" href="#multi-account--organisation-strategy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A single cloud account for everything is the number one architectural mistake organisations make. It creates a blast radius that spans your entire business: one misconfigured IAM policy can expose production data, development experiments can exhaust production quotas, and cost attribution becomes impossible. This section covers how to structure accounts, enforce guardrails, and automate provisioning.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-multiple-accounts"&gt;Why Multiple Accounts?&lt;a class="anchor" href="#why-multiple-accounts"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A single account conflates environments, teams, and workloads into one security and billing boundary. Multiple accounts provide:&lt;/p&gt;</description></item><item><title>Networking Architecture</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/03-networking-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/03-networking-architecture/</guid><description>&lt;h1 id="networking-architecture"&gt;Networking Architecture&lt;a class="anchor" href="#networking-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cloud networking is not just &amp;ldquo;VPC plus subnets.&amp;rdquo; It&amp;rsquo;s the connective tissue between every service, account, region, and on-premises data centre. Mistakes here are expensive to fix because networking underpins everything above it. This section covers the design patterns that scale from one VPC to hundreds of accounts across multiple regions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="vpc-design-patterns"&gt;VPC Design Patterns&lt;a class="anchor" href="#vpc-design-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A Virtual Private Cloud (VPC / VNet) is your isolated network within the provider&amp;rsquo;s infrastructure. The design of your VPC determines how workloads communicate, how traffic enters and exits, and where security boundaries lie.&lt;/p&gt;</description></item><item><title>Compute Patterns</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/04-compute-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/04-compute-patterns/</guid><description>&lt;h1 id="compute-patterns"&gt;Compute Patterns&lt;a class="anchor" href="#compute-patterns"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Choosing the right compute model is one of the highest-leverage architecture decisions you&amp;rsquo;ll make. It affects cost, operational complexity, scaling behaviour, and team velocity. This section provides frameworks for making that decision and patterns for getting the most out of each model.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="compute-decision-framework"&gt;Compute Decision Framework&lt;a class="anchor" href="#compute-decision-framework"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every workload has different characteristics. Match the compute model to the workload, not the other way around.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;What is the workload profile?
│
├── Stateless request/response, runs &amp;lt; 15 min
│ ├── &amp;lt; 1M requests/day → FaaS (Lambda / Cloud Functions)
│ └── &amp;gt; 1M requests/day → Containers (cost-optimised)
│
├── Long-running process, always-on
│ ├── Needs OS-level control → VMs
│ └── Doesn&amp;#39;t need OS-level control → Containers
│
├── Batch processing, can tolerate interruption
│ └── Spot/preemptible instances (VMs or containers)
│
├── GPU/ML training or inference
│ ├── Training → GPU VMs or managed ML (SageMaker, Vertex AI)
│ └── Inference → GPU containers or serverless inference
│
└── Legacy app, can&amp;#39;t be modified
 └── VMs (lift and shift)&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="compute-model-comparison"&gt;Compute Model Comparison&lt;a class="anchor" href="#compute-model-comparison"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Factor&lt;/th&gt;
					&lt;th&gt;VMs&lt;/th&gt;
					&lt;th&gt;Containers&lt;/th&gt;
					&lt;th&gt;FaaS&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Startup time&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Minutes&lt;/td&gt;
					&lt;td&gt;Seconds&lt;/td&gt;
					&lt;td&gt;Milliseconds (warm) to seconds (cold)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Scaling granularity&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Per VM&lt;/td&gt;
					&lt;td&gt;Per container&lt;/td&gt;
					&lt;td&gt;Per request&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Min cost at idle&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;VM cost 24/7&lt;/td&gt;
					&lt;td&gt;Cluster cost 24/7&lt;/td&gt;
					&lt;td&gt;Zero (scale to zero)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Max control&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Full OS access&lt;/td&gt;
					&lt;td&gt;User-space control&lt;/td&gt;
					&lt;td&gt;Code only&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Operational burden&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Patching, hardening, monitoring&lt;/td&gt;
					&lt;td&gt;Orchestration, image management&lt;/td&gt;
					&lt;td&gt;Near-zero ops&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;State handling&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Local disk available&lt;/td&gt;
					&lt;td&gt;Ephemeral by design&lt;/td&gt;
					&lt;td&gt;Stateless&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cold start&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;N/A (always running)&lt;/td&gt;
					&lt;td&gt;N/A (always running)&lt;/td&gt;
					&lt;td&gt;100ms–10s (varies by runtime)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cost at scale&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Lower per-unit (reserved)&lt;/td&gt;
					&lt;td&gt;Lower per-unit (bin-packing)&lt;/td&gt;
					&lt;td&gt;Higher per-unit (per-invocation)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="auto-scaling-patterns"&gt;Auto-Scaling Patterns&lt;a class="anchor" href="#auto-scaling-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Auto-scaling adjusts compute capacity based on demand. The goal is to match capacity to load with minimal lag and minimal waste.&lt;/p&gt;</description></item><item><title>Data Architecture Patterns</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/05-data-architecture-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/05-data-architecture-patterns/</guid><description>&lt;h1 id="data-architecture-patterns"&gt;Data Architecture Patterns&lt;a class="anchor" href="#data-architecture-patterns"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Data outlives applications. The services you build today will be rewritten, but the data they produce will still matter in ten years. Cloud data architecture is about choosing the right storage for each workload, placing data where it needs to be, and ensuring it&amp;rsquo;s protected, governed, and accessible.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="polyglot-persistence"&gt;Polyglot Persistence&lt;a class="anchor" href="#polyglot-persistence"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using a single database for everything is an anti-pattern. Different data access patterns require different storage engines.&lt;/p&gt;</description></item><item><title>Cloud Migration Strategies</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/06-cloud-migration-strategies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/06-cloud-migration-strategies/</guid><description>&lt;h1 id="cloud-migration-strategies"&gt;Cloud Migration Strategies&lt;a class="anchor" href="#cloud-migration-strategies"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Migration is not a technical project — it&amp;rsquo;s a business transformation with technical components. Most migration failures are caused by poor planning, not poor execution. This section covers the strategic patterns for moving workloads to the cloud and the tactical patterns for cutting over with minimal risk.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-6-rs-of-migration"&gt;The 6 Rs of Migration&lt;a class="anchor" href="#the-6-rs-of-migration"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every workload in your portfolio maps to one of six strategies. The right strategy depends on the workload&amp;rsquo;s business value, technical complexity, and cloud readiness.&lt;/p&gt;</description></item><item><title>Serverless Architecture</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/07-serverless-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/07-serverless-architecture/</guid><description>&lt;h1 id="serverless-architecture"&gt;Serverless Architecture&lt;a class="anchor" href="#serverless-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Serverless doesn&amp;rsquo;t mean &amp;ldquo;no servers.&amp;rdquo; It means you don&amp;rsquo;t manage, provision, or think about servers. The provider handles scaling, patching, and availability. You write code, define triggers, and pay per execution. This section covers when serverless is the right choice, how to design serverless systems, and the anti-patterns that make serverless expensive or fragile.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="event-driven-serverless"&gt;Event-Driven Serverless&lt;a class="anchor" href="#event-driven-serverless"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Serverless functions are inherently event-driven: something happens, a function runs, and it stops. This model maps naturally to many workloads.&lt;/p&gt;</description></item><item><title>Multi-Cloud &amp; Hybrid Patterns</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/08-multi-cloud-hybrid-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/08-multi-cloud-hybrid-patterns/</guid><description>&lt;h1 id="multi-cloud--hybrid-patterns"&gt;Multi-Cloud &amp;amp; Hybrid Patterns&lt;a class="anchor" href="#multi-cloud--hybrid-patterns"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Multi-cloud is one of the most over-sold and under-scrutinised strategies in cloud architecture. Vendors and analysts promote it as best practice; practitioners know it doubles operational complexity. This section separates the legitimate use cases from the cargo-cult adoption and covers the patterns that make multi-cloud and hybrid architectures work when they&amp;rsquo;re genuinely needed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="when-multi-cloud-makes-sense"&gt;When Multi-Cloud Makes Sense&lt;a class="anchor" href="#when-multi-cloud-makes-sense"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="legitimate-reasons"&gt;Legitimate Reasons&lt;a class="anchor" href="#legitimate-reasons"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Reason&lt;/th&gt;
					&lt;th&gt;Scenario&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Best-of-breed services&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A specific provider has a uniquely superior service&lt;/td&gt;
					&lt;td&gt;BigQuery for analytics + AWS for everything else&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;M&amp;amp;A inheritance&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Acquisition brings workloads on a different cloud&lt;/td&gt;
					&lt;td&gt;Company A (AWS) acquires Company B (Azure)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Regulatory requirement&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Regulator mandates no single-vendor dependency&lt;/td&gt;
					&lt;td&gt;Financial services in some jurisdictions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Data sovereignty&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Provider lacks a region in a required country&lt;/td&gt;
					&lt;td&gt;GCP has no region in a required market; Azure does&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Negotiation leverage&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Credible multi-cloud capability improves pricing negotiations&lt;/td&gt;
					&lt;td&gt;Demonstrably portable workloads&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="bad-reasons-but-commonly-cited"&gt;Bad Reasons (But Commonly Cited)&lt;a class="anchor" href="#bad-reasons-but-commonly-cited"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Claimed Reason&lt;/th&gt;
					&lt;th&gt;Reality&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;Avoid vendor lock-in&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;You trade one lock-in (cloud) for another (abstraction layer). The abstraction layer is your own code, which is harder to maintain than managed services.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;Redundancy across clouds&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Cross-cloud failover is extraordinarily complex. Within-cloud multi-region is far simpler and better tested.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;We want flexibility&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Flexibility without usage is waste. Design for portability only when you&amp;rsquo;ll actually port.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;ldquo;Our team knows both&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Your team will become mediocre at two clouds instead of excellent at one.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="the-cost-of-multi-cloud"&gt;The Cost of Multi-Cloud&lt;a class="anchor" href="#the-cost-of-multi-cloud"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-cloud is not free. Quantify these costs before committing:&lt;/p&gt;</description></item><item><title>Security Architecture</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/09-security-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/09-security-architecture/</guid><description>&lt;h1 id="security-architecture"&gt;Security Architecture&lt;a class="anchor" href="#security-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cloud security is fundamentally different from on-premises security. There&amp;rsquo;s no physical perimeter to defend. Instead, identity becomes the perimeter, encryption becomes the default, and automation replaces manual audit. This section covers the architectural patterns for securing cloud environments without slowing down delivery.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="zero-trust-in-the-cloud"&gt;Zero-Trust in the Cloud&lt;a class="anchor" href="#zero-trust-in-the-cloud"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Zero-trust is not a product — it&amp;rsquo;s an architecture principle: &lt;strong&gt;never trust, always verify.&lt;/strong&gt; Every request is authenticated and authorised, regardless of its origin.&lt;/p&gt;</description></item><item><title>Cost Architecture</title><link>https://kyngo.github.io/learning-paths/paths/cloud-architecture/10-cost-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/cloud-architecture/10-cost-architecture/</guid><description>&lt;h1 id="cost-architecture"&gt;Cost Architecture&lt;a class="anchor" href="#cost-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cost is an architecture concern, not a finance concern. Every design decision — the database engine, the compute model, the replication strategy — has a cost implication. Engineers who understand cost architecture build systems that are both performant and economically sustainable. This section covers the principles, patterns, and organisational structures for cost-aware cloud design.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="cost-aware-architecture-principles"&gt;Cost-Aware Architecture Principles&lt;a class="anchor" href="#cost-aware-architecture-principles"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="the-five-principles"&gt;The Five Principles&lt;a class="anchor" href="#the-five-principles"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Principle&lt;/th&gt;
					&lt;th&gt;What It Means&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cost is a first-class requirement&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Treat cost like latency or availability — it has targets, is measured, and is reviewed&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Right-size, don&amp;rsquo;t over-provision&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Match resources to actual usage, not theoretical peak&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pay for what you use&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Prefer per-request/per-second pricing when workloads are variable&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Design for cost visibility&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Every resource is tagged, every cost is attributable to a team/service&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Review continuously&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Cost optimisation is not a one-time project; it&amp;rsquo;s a recurring practice&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="cost-as-a-non-functional-requirement"&gt;Cost as a Non-Functional Requirement&lt;a class="anchor" href="#cost-as-a-non-functional-requirement"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Just as you specify SLOs for latency and availability, specify cost targets:&lt;/p&gt;</description></item></channel></rss>