Every course before this one taught you a piece: a model call, retrieval, tools, MCP, agents, memory. Each, on its own, felt like the obvious next step. The actual skill this course teaches is different and, I'd argue, harder: given a real problem, knowing which of those pieces you genuinely need — and, just as important, which ones you don't. The single most common mistake I see in AI system design isn't picking the wrong tool. It's reaching for every tool at once, on a project that needed one of them.
- See the full stack of choices as one ladder, and what each rung actually costs
- Know when a raw model call is genuinely the right answer — and when it isn't
- Compare API, self-hosted, and fine-tuned models honestly, on cost and control
- Choose between RAG, long context, and fine-tuning for grounding a model in your data
- Understand exactly what an agent loop costs beyond a single call, and how to bound it
- Know the real difference between a Tool, an MCP server, and a Skill — and when to reach for each
- Decide whether you need memory at all, and which kind
- See two honest, different stacks for the same brief — bootstrapped and enterprise
- Walk away with a working checklist for your next real build
The decision layers, as one ladder
Before choosing anything, it helps to see the whole shape of what you're choosing between. Every AI application, however complex it looks from outside, is built from a small number of layers, added on top of each other only as far as the problem actually demands.
One model call
Send a prompt, get an answer. The baseline every other rung sits on top of.
Relative cost: 1× — your baseline unit of cost.
When to skip this rung: This is the floor, not something to skip.
Cost multipliers here are illustrative order-of-magnitude framing, not price quotes — actual pricing moves too fast to hardcode. The shape is what matters: agent loops are usually where cost surprises come from, not the layer people worry about most (RAG).
Click through all seven rungs before reading on, because the shape matters more than any individual rung: capability goes up steadily, but so does cost — and not evenly. Notice which rung has the widest cost range in the whole ladder. It's the agent loop, by a wide margin, and that's not a coincidence — every additional step in a loop is another full model call, and loops can run for a surprising, expensive number of steps if nothing bounds them. Keep that one fact in your head for the rest of this course; it comes up again and again.
- Every AI application is built from a small set of layers, stacked as needed
- Capability and cost both rise with each rung — but not evenly; agent loops are the widest cost range by far
- The discipline: climb one rung at a time, only when the rung below has genuinely failed
- Which single rung on the ladder carries the widest cost range, and why specifically that one?
- In your own words, what does "climb only as far as the problem needs" actually mean in practice?
Do you even need an LLM?
The most common overbuild in this entire field happens before the first rung of the ladder is even reached: reaching for a language model when a much simpler, cheaper, more reliable piece of software would do the job.
A few honest questions worth asking first, in order:
Is the input-to-output mapping actually fixed and rule-based?
If "when X happens, do Y" fully describes the task, a plain if/else or a lookup table will be faster, cheaper, and more predictable than a model — and it will never hallucinate. Save the model for genuine ambiguity, not for tasks that only look complex.
Is this closer to a classification problem than a language problem?
Sorting support tickets into five fixed categories, or flagging spam, are things a small, traditional machine-learning classifier often does more cheaply and more predictably than an LLM call — Machine Learning Fundamentals covers exactly this territory.
Does the task genuinely require understanding open-ended human language, or producing it?
This is the real test. Summarising a messy email, answering a question phrased a hundred different ways, writing a first draft — these need a model, because no fixed rule set can anticipate every phrasing a real person will use.
- Not every problem is an LLM problem — fixed rules and traditional classifiers are often faster, cheaper, and more predictable
- The real test: does the task require genuinely open-ended language understanding or generation?
- Reaching for a model out of habit, not necessity, is the most common and easiest-to-avoid overbuild
Choosing your model — API, self-hosted, or fine-tuned
Once you've confirmed you genuinely need a model, the next decision is how you get one into your product — and this decision has real, ongoing cost consequences, not just a one-time setup choice.
Proprietary API
Upfront cost
Near zero — an API key and a few lines of code.
Ongoing cost shape
Pay per token, metered — scales smoothly with usage, no idle cost.
Control
Lowest — you can't retrain it, and the provider can change or deprecate the model under you.
Best for: Almost every team starting out. Fastest to ship, no infrastructure to run, and frontier-level quality without a research team.
Deliberately no dollar figures here — real pricing moves constantly and varies by provider and negotiated volume. The shape of the trade-off is the stable, teachable part; check current pricing pages before committing budget.
- Proprietary API: near-zero upfront cost, metered pricing, lowest control — the right default for almost everyone starting out
- Self-hosted open-weight: real upfront and fixed ongoing cost, highest control — pays off at high, steady, predictable volume
- Fine-tuned: meaningful upfront training cost, highest control over behaviour — worth it only once prompting alone is proven insufficient
- Default to the API first; earn your way to the other two with real usage data
- Why does self-hosting tend to look worse financially at low or spiky usage, and better at high, steady usage?
- What would you want to see, concretely, before deciding a project needs a fine-tuned model rather than better prompting?
Grounding it in your data — RAG, long context, or fine-tuning
A model with the right general reasoning still doesn't know your private, current, or specific facts. Three genuinely different tools solve that, and they aren't interchangeable.
RAG (see Production RAG for the full depth) retrieves the relevant documents at request time and hands them to the model as part of the prompt. It's the right default for most knowledge-grounding needs: it stays current automatically as your documents change, and it can cite exactly what it drew from.
Long context — simply pasting a large amount of material directly into the prompt every time, no retrieval step — works for a genuinely small, fixed set of documents that fit comfortably in the context window. It's simpler than RAG, but it doesn't scale past that window, and it re-sends (and re-pays for) the same material on every single request.
Fine-tuning teaches the model a pattern or a style through training examples, not through facts handed to it at request time. It's the wrong tool for "know these specific facts" — facts baked in through fine-tuning still go stale, and updating them means retraining. It's the right tool for "always respond in this specific format" or "always apply this house style," where the pattern matters more than any single fact.
- RAG: retrieve relevant facts at request time — the right default, stays current automatically
- Long context: paste everything directly — simpler, but doesn't scale and re-costs every request
- Fine-tuning: teaches behaviour and style through examples — not a substitute for giving the model facts
- The common mistake: using fine-tuning to teach facts, when that's RAG's job
- Why would fine-tuning be a poor way to keep a support bot's answers about your product's current pricing accurate?
- When might long context genuinely be simpler and sufficient, instead of a full RAG pipeline?
When you need more than one call — agents, honestly
An agent — see The ReAct Loop — lets a model plan, act, observe, and repeat across multiple steps toward a goal, instead of answering in one shot. It's genuinely powerful, and it's also the layer most responsible for AI projects quietly running over budget.
The reason is simple arithmetic that's easy to lose sight of while building: every loop iteration is another full model call. A task that takes five iterations to finish costs roughly five times a single call — and if something goes wrong and the loop doesn't recognise it's finished, that multiplier keeps climbing. This is precisely why Loop Engineering — designing the loop so it reliably converges instead of spinning — is its own dedicated course in this track.
Before reaching for an agent loop at all, ask honestly: does this task reliably finish in one or two calls? Most tasks — genuinely most — do. An agent loop is the right tool for tasks whose shape you can't fully predict in advance (multi-step research, exploratory debugging), not a default upgrade for every feature.
- An agent loop's cost scales directly with the number of iterations it takes — the widest cost range on the whole ladder
- Ship every agent with a hard step limit, a checkable definition of "done," and per-run cost logging
- Most tasks finish reliably in one or two calls and don't need a loop at all
- Reserve agent loops for tasks whose shape genuinely can't be predicted in advance
- Why does an agent loop's cost range so much wider than a single call, or even RAG?
- Name the three guardrails worth shipping with every agent, and what each one specifically prevents.
Giving your AI hands — Tools, and MCP
Once a model needs to actually do something — not just describe what should happen — it needs tools: defined actions it can call, with real effects on the outside world (checking a database, sending an email, updating a record).
You can wire tools up two ways. Hand-rolled function calling means you write a custom integration for every tool, specific to your codebase — fine for one or two simple, stable tools. MCP (Model Context Protocol — see MCP for Practical Builders) is a standard way to expose tools that any compatible model or agent can use, without a bespoke integration for each one.
The cost story here is different from every other rung: MCP itself doesn't meaningfully change your per-request token cost. What it changes is integration and maintenance effort — the real cost it saves is engineering time, not inference spend.
- Tools let a model actually act, not just describe — a genuine, deliberate step beyond answering
- Hand-rolled function calling: fine for one or two tools tightly coupled to your app
- MCP: a standard, reusable way to expose tools — worth it once you have several, or once a public server already exists
- MCP's cost saving is mostly engineering time, not token cost
- What's the actual cost difference between hand-rolled function calling and MCP — where does the saving really come from?
- When would reaching for a public MCP server be the right call instead of building your own integration?
Skills — packaged expertise, not just another tool
There's a layer above a single tool call that's worth understanding on its own: a Skill — a packaged, reusable bundle of instructions, reference material, and sometimes scripts, that teaches a model how to do a specific, repeatable job well, rather than giving it one narrow action to call.
The difference in practice: a tool answers "what can it do." A Skill answers "how should it do this particular kind of job, every time, the way an experienced person on your team would." Without a Skill, a model has to work out the right process from scratch, from your prompt alone, every single time you ask for something like a quarterly report. With one, the expertise for that specific, repeatable job is captured once and reused — closer to onboarding a new team member with a well-written playbook than to just handing them a tool.
- A Tool is one narrow action; an MCP server is a standard, reusable bundle of related tools
- A Skill packages the expertise for a repeatable job — instructions, resources, and scripts together
- Skills answer "how should this specific job be done," not just "what can be called"
- A repeated, detailed prompt for the same kind of task is usually a sign a Skill should exist instead
- What's the actual difference between a Tool and a Skill — not in mechanism, but in what each is trying to solve?
- Describe a repeatable task in your own work that might be a good candidate for a Skill.
Memory — do you need it, and which kind
Giving AI a Memory covers this in full depth — the four kinds (working, episodic, semantic, procedural) and the actual tools (claude-mem, mem0, Letta, checkpointers). Here, the question is simpler and comes first: do you need any of it at all?
A huge share of AI applications genuinely don't. If every session is independent — a one-off question, a single document summarised and done — adding a memory layer is pure cost and complexity with nothing to show for it. Memory earns its cost specifically when a user's history should change how the system behaves next time: a returning customer whose past issues matter, an agent whose plan should build on yesterday's partially-finished work.
- Memory is worth its cost specifically when a user's history should change future behaviour — not by default
- Many applications, with genuinely independent sessions, don't need it at all
- Try the cheapest version first — a plain stored fact — before building a full memory pipeline
Two real builds: bootstrapped vs. enterprise
Theory earns its keep once it meets a real brief. Here's the same product idea, taken seriously at two genuinely different scales — because "the right stack" isn't one answer, it's a function of budget, volume, and what's actually at stake if something goes wrong.
Budget reality
A few hundred dollars a month, if that — every layer has to earn its cost.
Model
A proprietary API, mid-size tier. No self-hosting — the DevOps burden alone would sink a one-person team.
Data / grounding
RAG over a free-tier or open-source vector store. Skip fine-tuning entirely; prompting plus good retrieval covers almost everything at this stage.
Agent behaviour
A single call or a short, fixed 2–3 step chain. Avoid an open-ended agent loop — at this budget, one runaway loop can wipe out a week of margin.
Memory
Simple — store a few key facts per user in a normal database. Skip a dedicated memory system until real usage proves it's needed.
Operations
Minimal logging, manual cost checks. Formal observability tooling can wait until there's real traffic to observe.
The governing philosophy: Ship the smallest stack that solves the real problem. Every extra layer is something you now have to pay for and maintain, alone.
Same product idea, same list of ingredients from the capability ladder — genuinely different, both correct, answers. Scale doesn't just change the budget; it changes which risks you're actually optimising against.
Notice what actually changes between the two columns: it's not that the enterprise version uses "better" technology throughout. Several choices — RAG over fine-tuning, a bounded agent loop — are identical in both. What genuinely changes is how much risk gets engineered out: access control, audit trails, step limits with real teeth, isolated memory per customer. The bootstrapped version isn't a worse stack. It's a stack correctly sized to what a small team can actually operate and afford, with the discipline to add more only once real usage demands it.
- The same product brief produces two genuinely different, both-correct stacks depending on scale
- Many core choices stay the same across both — what changes most is how much risk gets engineered out
- "Bootstrapped" isn't a lesser stack; it's a stack correctly sized to what can actually be operated and afforded
Your checklist
Everything in this course compresses into one practical tool: answer honestly, and see what you actually need.
Your minimal recommended stack
A single model call may genuinely be the whole answer — that's not a lesser stack, it's the correctly-sized one.
These five questions are the actual discipline — asking them honestly, before reaching for a layer, is worth more than any framework for choosing between vendors.
- The five honest questions — facts, action, steps, memory, repetition — map directly onto the stack you actually need
- Every layer in this course is genuinely useful and genuinely optional — the discipline is asking before adding
- A correctly-sized stack, not the most capable one, is usually the better system
- Run a real project idea of yours through the five questions. What's the minimal stack it actually needs?
- Which layer are you personally most tempted to over-reach for by default — and why do you think that is?