Build the mental model
This project is the first checkpoint for everything the Advanced chapter built: the platform decision guide, the major-cloud comparison, the modern-platform comparison, and the BaaS comparison. Instead of adding facts about any single provider, it asks you to combine what you already compared and apply it under realistic constraints.
- Platform decision guide - the need-flag framework for choosing a category
- Major-cloud comparison - AWS vs Google Cloud vs Azure tradeoffs
- Modern-platform comparison - Vercel/Netlify/Railway/Render/Cloudflare tier
- BaaS comparison - Supabase vs Firebase style tradeoffs
- Multi-cloud and vendor lock-in - what happens when you depend on one vendor
| Workload | Framework it tests |
|---|---|
| Marketing site | Modern-platform comparison's static-hosting/CDN tier |
| SaaS product | BaaS comparison + major-cloud comparison |
| Background-worker backend | Platform decision guide's long-running-process filter |
| AI app (spiky usage) | Decision guide's cost-shape reasoning + vendor lock-in lesson |
The goal is a platform CATEGORY for each workload, not a specific vendor mandate. You are practicing the reasoning the decision guide teaches, not memorizing a product name. A correct answer names the category and states which need-flags drove the choice.
Justify, don't just name
Naming the right category without stating which need-flags drove it doesn't demonstrate the skill; the one-line justification is the actual deliverable.
WORKLOAD TO PLATFORM CATEGORY MAP
---------------------------------
1. Marketing / portfolio site
-> Static hosting / CDN platform (Jamstack)
2. Full-stack SaaS (accounts + database)
-> BaaS-backed or full-stack PaaS platform
3. Long-running Node.js backend + background workers
-> Container/VM-based PaaS (persistent compute)
4. AI app calling external API (spiky, unpredictable usage)
-> Serverless functions / scale-to-zero platformConnect it to a real scenario
Marketing site
Confirm there is no server-side logic and no user data -- that points straight at static hosting and a CDN.
SaaS product
Notice accounts plus a database together -- that's the BaaS-or-full-stack-PaaS shape from the BaaS comparison lesson.
Background-worker backend
The long-running-process answer is yes here, which overrides everything else and rules out static hosting and serverless functions immediately.
AI app
Traffic is unpredictable around external API calls, which points at serverless or scale-to-zero compute so you're not paying for idle capacity between spikes.
Run and compare
Run selectPlatformCategory against all four workloads, compare its output to your own reasoning, and check the AI app's pick against the vendor-lock-in lesson's concerns.
Try the working example
function selectPlatformCategory(workload) {
if (workload.needsLongRunningProcess) {
return {
workload: workload.name,
category: "Container/VM-based PaaS (persistent compute)",
justification:
"Background workers and long-lived connections need a process that keeps running, which rules out request/response serverless functions and static hosting alike."
};
}
if (workload.isStatic && !workload.needsDatabase && !workload.needsAuth) {
return {
workload: workload.name,
category: "Static hosting / CDN platform (Jamstack)",
justification:
"No server-side logic or user data to store, so pre-built assets served from the edge are the cheapest and fastest fit."
};
}
if (workload.trafficPattern === "unpredictable") {
return {
workload: workload.name,
category: "Serverless functions / scale-to-zero platform",
justification:
"Usage spikes unpredictably around calls to an external API, so paying only for active invocations beats reserving capacity for a steady load that never arrives."
};
}
return {
workload: workload.name,
category: "BaaS-backed or full-stack PaaS platform",
justification:
"Steady traffic plus accounts and a database is the core full-stack shape a BaaS or a managed PaaS handles well without hand-rolled infrastructure."
};
}
const workloads = [
{
name: "Marketing / portfolio site",
isStatic: true,
needsDatabase: false,
needsAuth: false,
needsLongRunningProcess: false,
trafficPattern: "steady"
},
{
name: "Full-stack SaaS product (accounts + database)",
isStatic: false,
needsDatabase: true,
needsAuth: true,
needsLongRunningProcess: false,
trafficPattern: "steady"
},
{
name: "Long-running Node.js backend with background workers",
isStatic: false,
needsDatabase: true,
needsAuth: false,
needsLongRunningProcess: true,
trafficPattern: "steady"
},
{
name: "AI-powered app calling an external AI API (spiky usage)",
isStatic: false,
needsDatabase: false,
needsAuth: true,
needsLongRunningProcess: false,
trafficPattern: "unpredictable"
}
];
workloads.map(selectPlatformCategory).forEach((result) => {
console.log(`${result.workload}\n -> ${result.category}\n (${result.justification})\n`);
});Running selectPlatformCategory against the four workloads prints: the marketing site maps to 'Static hosting / CDN platform (Jamstack)'; the SaaS product maps to 'BaaS-backed or full-stack PaaS platform'; the background-worker backend maps to 'Container/VM-based PaaS (persistent compute)'; and the AI app maps to 'Serverless functions / scale-to-zero platform' -- each printed with its one-line justification.5-minute try-it
Add a fifth workload of your own -- for example, a data-pipeline job that runs on a schedule once a night -- and extend selectPlatformCategory's need-flags if the existing four aren't enough to categorize it correctly. Justify your category choice in one sentence, the same way the function does.
One important caution
Picking a specific vendor before actually listing out the workload's need-flags, which skips the reasoning step this project is built to practice.
Treating traffic pattern as the only factor and ignoring a hard filter like needing a long-running process, which can override every other consideration.
Google Cloud - IaaS vs PaaS vs SaaS — Cloud Providers & Platforms