Behind the scenes

About / Feedback

Found a bug?
Course feedback short form, anonymous, for pacing and content
A typo or a wrong number the feedback button, bottom-right of any page

Who am I

Shiva Shivakumar

I have built large-scale data systems since 2000, including AdSense, BigQuery, and the infrastructure behind Google Apps and Gmail. CS145 draws on systems I shipped, operated, or watched fail and succeed at scale.

I designed this course around two questions:

  1. How do you keep a course practical when the data stack keeps changing? In 25 years of building systems, I have watched workloads and hardware evolve while the core principles endure. Cloud computing and consumer apps drove one wave of innovation. Cheap RAM, SSDs, and now GPUs rewrote the cost model. Agents are driving the next. My job is to teach the fundamentals in the context of where the industry is going.
  2. How to reach students who learn differently? After eight years of teaching, I know some students use slides, some read notes, some watch videos at 2x, and some learn by running code. So I build the course like an app to support multiple journeys.

My skills

  1. I curate the core content and keep it current, based on where the industry is heading.
  2. I am also pretty terrible at drawing pictures and animations. I write code instead.

How I built the app

This section is a worked example of what the AI policy asks of you on projects: ship with AI, own the result. Here is what that looked like for the course itself.

I want all the pages, PSETs and videos to cross-link to each other, so it runs as a full RAG system with full text search. I treat this as a data and content problem, plus a git problem. Hand-producing the slides, the notes, the video and the colabs makes a course stale by week four.

I keep one primary content source per page, four render targets, everything under version control.

Claude draws each topic as an animated SVG and I iterate on it (custom insult prompts) until we get it right. ElevenLabs reads my scripts for TTS. We need to solve four problems to keep the four views in step:

A pipeline in three bands. One markdown page and one narration script render into slides, the docs page, a video and the colab. The video path has two inputs: the figure drawn as an SVG, which the author proposes and Claude draws and the two of them argue over until it is right, and whose numbered groups are the animation sequence, and the narration, which comes back from ElevenLabs with a timestamp for every token. Cue alignment pins step one to the phrase that names it rather than to a timer, code highlights ride the same mechanism, the composer draws the steps at those times and a final mux applies one speed with the captions rescaled. A dashed loop runs back from the composer to the drawing: watch it, redraw a step, render again. Three checks read the output back: every cue still spoken, no blank slide, nothing under fourteen pixels.

The middle band is where the work is. The figure and the narration are two inputs to one timeline, and the numbered groups inside the SVG are the animation sequence, so redrawing a step is how the video changes.

Feedback

My engineering bet is to make this timely and current. If you find bugs or content drifts, please let me know in the feedback link at the top of this page. Thanks.