Free to read

Click a trace, see what your agent did

Stop grepping stdout to debug LLM apps. Emit JSON logs with request IDs, wire OpenTelemetry and Arize Phoenix, and get a clickable timeline of every routing decision, tool call, and token burned.

Still deciding? Ask first.

Message a mentor about fit, prerequisites, or where to start. Replies come on WhatsApp, usually within a day.

  • Curriculum fit, prerequisites, or where to start
  • Honest answer, no pressure to enroll

Taught by an engineer who has shipped this

  • ISO 27001

    Led the engineering work behind the certification of a regulated EU platform.

  • Series A platform

    Architected the case-management product that became the business a €11.6M round was raised on.

  • 3x faster deploys

    Cut time-to-deploy by migrating to Kubernetes on GCP with deploy-on-merge.

Emit JSON logs with request IDs and OpenTelemetry spans across every tool call in a routing agent. Click a trace and see exactly what your agent did, which tool ran, how many tokens it burned, and why it failed.

Emit JSON logs with request IDs and OpenTelemetry spans across every tool call so you can click a trace and see exactly what your agent did.

What you'll ship

Real projects, not toy demos.

  • Emit structured JSON logs with request IDs across a Python LLM service
  • Run Arize Phoenix locally and register an OpenTelemetry tracer
  • Auto-instrument OpenAI calls with OpenInference
  • Wrap every tool with a custom @trace decorator that records tokens, cost, and latency
  • Link router, SQL, RAG, and web search spans into a readable hierarchy
  • Replay a failing trace in Phoenix and set SLO alerts on latency and error rate

What you'll learn

You finish able to:

  • Explain why text logs fall apart for nondeterministic LLM applications
  • Emit JSON logs with a request ID that survives across tool calls and background tasks
  • Start Arize Phoenix locally and wire an OpenTelemetry tracer into a Python service
  • Auto-instrument OpenAI calls with OpenInference and read the span tree
  • Wrap any tool with a @trace decorator that records tokens, cost, and duration
  • Replay a failing trace in the Phoenix UI and alert on latency and error rate

Curriculum

From your first JSON log line to a full trace-driven debugging workflow.

  1. 01

    Why tracing beats logging

    Understand why text logs fail for nondeterministic LLM apps and meet the three pillars of observability.

  2. 02

    Structured logging you can grep and ship

    Replace print with JSON logs, thread a request ID through every tool call, and decide what to log and what never to log.

  3. 03

    OpenTelemetry and Arize Phoenix

    Run Phoenix locally, register an OTel tracer, and auto-instrument OpenAI calls with OpenInference.

  4. 04

    Custom spans for every tool

    Write a @trace decorator that adds token, cost, and latency attributes, then wire it into router, SQL, RAG, and web search.

  5. 05

    Trace-driven debugging

    Replay a failing trace in the Phoenix UI, set SLO alerts, and graduate to a runbook you can hand to a teammate.

Who it's for

Is this for you?

AI engineers

who ship agents into production with print statements and hope, then cannot explain what happened when something breaks

Backend engineers

who bolted OpenAI calls onto an existing service and now cannot pinpoint which tool caused the latency spike or the bill surprise

Platform and SRE engineers

who need structured logs and trace propagation across an LLM tool chain the same way they already have it for microservices

FAQ

Common questions.

  • Do I need to know OpenTelemetry already?

    No. The course introduces traces, spans, and attributes from first principles, then walks through wiring them up inside a real Python agent. If you have used OpenTelemetry before, you can skim the early lessons and focus on the LLM-specific attributes.

  • Why Arize Phoenix and not a hosted tool?

    Phoenix runs locally, stores traces on disk, and speaks the OpenTelemetry protocol. You can swap it for any OTel-compatible backend (Langfuse, Honeycomb, Datadog) without changing your instrumentation code. The course teaches the wiring, not a vendor.

  • Will this work with my LLM provider?

    Yes. The workshop uses an OpenAI-compatible client, so anything that speaks the OpenAI API (including OpenRouter, Fireworks, and local vLLM) works without changes. The OpenInference instrumentation hooks the client, not the endpoint.

  • Do I need a web search API key?

    The routing agent uses Serper for web search. Without a key the web route is skipped and the agent still works for SQL and RAG, so you can complete every lesson and see every span type.