← Module 12/Pattern synthesis
RU
Module 12 · Capstone and synthesis

Synthesis: the patterns running through the course

The course was never 54 topics. It's about a dozen deep patterns in different costumes. Under the craft of games lie threads connecting game dev to your ML: and the real value isn't facts about games, it's a library of transferable patterns and the skill of recognizing them. Plus the spine of the whole course: knowing when a tool (especially ML) is NOT the answer.
~15 min🧩 where the course converges
The gist in 30 seconds
The course isn't 54 topics, it's a handful of patterns wearing different costumes. On the surface there's a catalog of game craft: technical (constraints-breed-innovation, offline precompute, LOD), design (teach-through-play-not-text, meaningful-trade-offs, feedback-loops), business (a-platform-unseats-incumbents, polish-compounds, say-no-to-features), meta (prototype-before-architecture, failure-teaches-faster). Underneath are the through-lines connecting game dev to ML (the 🔁 cargo): constrained randomness → constrained decoding; search+learning → inference-time search; store-the-function-not-the-output → implicit reps; latency-as-deadline → real-time inference; Goodhart → RLHF; hit-driven power laws → research bets; emergence-observe-don't-derive → eval-driven; the control loop → curricula/bandits; the weakest link → pipeline reliability; you-are-not-your-user → held-out eval; coarse-to-fine → ANN/hierarchy. And the spine is knowing when ML is NOT the answer (classical>ML for control, PCG>GAN, RL rarely ships). The meta-skill: asking "what problem does this solve / what trade-offs does it make / where is it used and why not everywhere / what does it connect to". That transfer — seeing one pattern across domains — is what makes you broadly useful.

The mechanism: one pattern, many costumes

Two layers

M01 M06 M08 M09 M10 M11 ML/systems constrained randomness latency = deadline Goodhart / proxy vs goal when ML is NOT the answer the threads run through the modules and out into your domain — the topics were costumes, the threads are the body

The top layer is a catalog of game craft (the technical / design / business / meta patterns from §1 of module 12): useful as a checklist of "have I met this pattern before?". The lower layer, the one valuable to you, is the through-lines that lived in the 🔁 block of every lesson and tied a game mechanic to ML/systems. Those are what to take with you.

The through-lines (that 🔁 cargo)

ThreadIn games (module)→ In your ML / systems
Constrained randomnessWFC / noise / Spelunky (M11), constraints-breed-innovation (M01/M05)constrained / structured decoding; a generator + hard invariants
Search + learningminimax/MCTS + NNUE/policy (M11)inference-time search (ToT/verifier), model-based RL, RAG=retrieval+LLM
When ML is NOT the answerclassical>ML for control, PCG>GAN, RL rarely ships (M11)determinism/debuggability/cost > "smart"; the classics by default
Store the function, not the outputfixed point/tiles (M01), procedural content from a seed (M11)implicit representations; generation as compression
Latency = deadlinethe game loop (M01), the audio buffer/jobs (M08), TTS (M11)real-time inference budget; streaming; isolating the critical path
Goodhart / proxy vs goalanalytics/A-B (M06), monetization ethics (M10), reward design (M09)RLHF / reward hacking; a metric degrading under optimization
Hit-driven power lawsstudio economics, discoverability (M10)research bets, heavy-tailed value, kill-fast experiments
Emergence: observe itMDA, systems design (M09/M02)a trained system's behavior = a runtime property; eval-driven
Control loop / explore-exploitDDA/flow (M09), UCB1/MCTS (M11)curriculum learning, bandits, adaptive systems, IRT
The weakest linkAmdahl (M08), the leaky bucket (M06), the telegraphing funnel (M09)the reliability of a multi-step pipeline; the end-to-end bottleneck
You are not your userValve playtesting / the curse of knowledge (M09)you can't evaluate on the training set; human eval on held-out data
Coarse-to-fine / LODbroad→narrow collision (M01), Nanite/mipmaps (M08)ANN/retrieval, hierarchical search, adaptive compute

The spine: knowing when a tool isn't the answer

One thread runs through the entire course and matters more than the rest: the maturity to understand where a tool applies. Classical AI beats ML for NPC control (determinism, debuggability, cost); procedural generation beats GANs for structural content (validity, control); RL is superhuman in demos and almost never ships. This isn't "ML is bad" — it's "every tool has a domain where it's the best and domains where it's the worst". The ability to reach for the simple, cheap, debuggable solution by default and to call in the complex one (ML/search/a network) only where nothing else will do is rare, and it makes an engineer broadly useful. That was the course's real objective.

The meta-skill: good questions

How do you carry a pattern into a new area? Four questions (from the module's conclusion), applicable to any unfamiliar piece of technology: (1) what problem does it solve? (2) what trade-offs does it make? (3) where is it used — and why isn't it used elsewhere? (4) which familiar patterns does it connect to? The fourth is the engine of transfer: it turns something new into "ah, that's that pattern in a new costume".

🧩 One thread, many appearances

"Constrained randomness" from hardware to LLMs

M01: hardware constraints produce focus (Tetris in 10 KB). M09: kishotenketsu doses the difficulty. M11: WFC/noise/Spelunky generate worlds with constrained randomness. → LLMs: constrained decoding — mask the invalid tokens, bake validity into the process.

🧩 See the thread: one idea — "randomness/freedom only becomes useful once constraints give it a channel" — ran through 4 modules and came out in your work with LLMs. That's not a stretched analogy, it's one invariant in different domains.

"Latency = deadline" frame → buffer → token

M01: a 16.67 ms frame budget. M08: the audio buffer (a miss = a click), jobs under the frame budget. M11: a TTS chunk before the buffer empties. → Your real-time inference: the same hard budget, isolating the critical path, streaming with backpressure.

🧩 See the thread: "a hard real-time deadline whose misses are visible or audible" is one engineering problem, whether it's a frame, an audio buffer or a streamed model response. Having mastered it in games, you already know how to design latency-critical ML systems.

"Goodhart" metric → monetization → reward

M06: A/B and peeking, optimizing the wrong metric. M10: predatory monetization = optimizing a proxy (spending) against the player's good. M09: reward design in MDA. → RLHF: reward hacking, degradation under over-optimization of a proxy reward.

🧩 See the thread: "optimizing a proxy diverges from the true goal" is one law across analytics, monetization ethics, design and AI alignment. If you can see where monetization crosses into exploitation, you can see where metric optimization crosses into manipulation.

Deep end · why transfer works and compoundsskippable

A pattern is a compressed invariant

A pattern transfers because it's an abstraction — the compressed essence that survives after the domain-specific details are dropped. "The weakest link dominates" is true of Amdahl (parallelism), of the leaky bucket (retention), of the telegraphing funnel (level design) and of pipeline reliability — because all of them are sequential composition with multiplicative/additive loss. Master the invariant in one domain and you have it in all of them: transfer compounds — every new domain is cheaper to learn (you recognize familiar threads) and enriches the patterns themselves with new costumes. That's the mechanics of expertise: an expert sees deep structure rather than surface (chunking), and so "gets" a new area faster than a novice.

Analogy is the fuel of thought, but verify the transfer

Transfer by analogy is powerful but not automatic: the invariant has to be checked, not assumed. "MDA as reward design" holds (both are inverse problems with an emergent middle); "mapping Bartle onto the 8 kinds of fun" doesn't hold (different axes, only a rough intuition). The discipline: when carrying a pattern over, ask "which invariant exactly is shared, and where does it break?". A good transfer is precise, not "everything resembles everything".

Analogy
The course is like discovering that dozens of songs are built on the same chord progressions. At first every song sounds unique; then you hear I–V–vi–IV under half of pop and a 12-bar blues under much of the rest — and suddenly you can play a new song you've never heard, because you recognize the progression underneath it. The 54 topics were songs; the through-lines are the chord progressions. Once you've heard them, a new domain (a new game, a new ML system) isn't foreign: you recognize the progression under it and play it at sight.
Why it matters
That's the point of the course for you: not to become a game programmer, but to build cross-disciplinary judgment — a library of transferable patterns and the skill of recognizing them, so that game dev, ML and systems illuminate each other, and so that you can see when a tool fits and when it doesn't. That's what makes an engineer at Artificial Agency (or anywhere) broadly useful: not depth in a single pipe, but the ability to carry solutions between domains and to feel their limits precisely.
🔁 Beyond games — transfer itself as a skill
This lesson is the transfer, so the 🔁 here is about transfer as such.

ML / AI (your domain): recognizing patterns across domains is the core of expertise (chunking, analogy as the fuel of thought): an expert sees deep structure rather than surface, and therefore learns new things faster. Your concrete payoff: the dozen threads above are ready-made bridges into ML (constrained decoding, inference-time search, RLHF/Goodhart, latency budgets, eval-driven work, curricula, coarse-to-fine), and the spine of "when ML isn't the answer" is a rare judgment about limits that many ML engineers lack (the urge to put a network everywhere). The four meta-questions are a portable framework for any new technology. A caution: transfer has to be verified (a shared invariant, not "everything resembles everything"), or you get false analogies.

Learning/career: a "second brain" (a pattern journal) compounds; cross-domain breadth plus narrow depth (T-shape) is worth more than pure specialization.

Principle: look for the invariant beneath the surface; transfer a verified pattern, not a resemblance; go simple by default, complex only where the invariant demands it.

🔧 Build your own pattern journal
🧩 10 threads into your "second brain" ~30 min
Write out the 10 patterns from the table that actually caught you. For each: the name, the invariant (the essence, independent of domain), 1 example from games, 1 from your ML, and where it breaks (the boundary). That's the core of your pattern journal — extend it after every project.
🧭 Apply the 4 questions ~15 min
Take a technology you ran into recently at work (a new framework, method, tool) and run it through the 4 questions: what problem / what trade-offs / where is it used and why not everywhere / which pattern from the journal does it connect to. Notice how the fourth question accelerates understanding.
Checklist: started a journal with 10 threads (invariant + 2 examples + boundary); applied the 4 questions to a real new technology; stated your own "when ML isn't the answer" spine in one sentence.
Connections
summary
Classical vs ML — the ML side of the "which to use when" spine; the decision tree.
threads
Hardware, MDA, Job systems, Monetization — characteristic appearances of the threads.
next
Postmortem — how to add patterns to the journal after every project.
foundation
Capstone — where you'll put these patterns to work (Novgorod).
Questions worth asking
If you take one thing from the course — what is it?
The skill of seeing one pattern across domains and knowing the boundary of where it applies. Not any particular fact about games, but the meta-ability: when you hit something new, to recognize a familiar invariant beneath the surface ("that's constrained randomness / the weakest link / Goodhart / search+learning") and to feel precisely where it works and where it breaks. In practice that's two things together: (1) a library of transferable patterns (the dozen threads in the table — ready-made bridges between game dev and your ML), (2) the spine of "when a tool, especially ML, isn't the answer" (the maturity to reach for the simple/cheap/debuggable by default). The first gives you speed (you learn a new area through the familiar), the second gives you judgment (you won't put a network where a script is better). Together that's the cross-disciplinary judgment this course existed for: so that you're useful not as a "game programmer" or an "ML engineer" separately, but as someone who carries solutions between fields and feels their limits.
"Everything is connected" sounds nice, but how does it practically help?
Through acceleration and through tool selection, concretely. Acceleration: when you hit a new problem, instead of "learning it from scratch" you ask "which familiar pattern does this resemble?" — and you start from a ready structure rather than a blank page. Example: you run into streaming TTS inference — if you know the "latency=deadline" thread from the game loop/audio buffer, you immediately know about budgets, backpressure and isolating the critical path instead of rediscovering them. Tool selection: the "when ML isn't the answer" thread saves you months directly — before training a model you ask "wouldn't a script/search/algorithm be better here?" (determinism, debuggability, cost), and the answer is often yes, as in game AI. For a "connection" to be useful rather than vague, it has to be precise: not "everything resembles everything" but "this invariant is shared, and here is where it breaks" (see the deep end on verifying transfer). A vague "everything is connected" is useless; a specific thread with a verified invariant and a known boundary is a working tool.
How exactly do you transfer a pattern without falling into a false analogy?
Isolate the invariant and check its boundaries explicitly. Three steps. (1) State the invariant in domain-neutral terms: not "Amdahl is about threads" but "in a sequential composition, the weakest/incompressible link dominates the result". (2) Verify the transfer on a shared cause, not on surface resemblance: "Amdahl ≈ the leaky bucket of retention" holds because both are multiplicative/sequential loss with a dominating link; "brain neurons ≈ network neurons" is a false analogy (a shared name, not a shared mechanism). (3) Find where the invariant breaks: every pattern has a region where it doesn't apply — "constrained randomness > ML" holds for structural content with hard invariants but not for rich distributions with no rules (textures, natural images — ML wins there). A good transfer always comes with "this works as long as …". The false-analogy test: if you can't name the shared cause and the breaking point, it's probably a surface resemblance rather than an invariant. The discipline of "which invariant, and where's the boundary" is what separates powerful cross-domain transfer from a pretty but empty metaphor.
Further reading