DEV Community

Aman Bhandari
Aman Bhandari

Posted on

Every quality gate I ship code past, I ship my learning past

Shallow learning is the bug class that shows up as "I knew this last week" six months later, when a new model makes the abstraction leak and you cannot explain what happened. The fix is the same as for production code: gates at every stage, fail-loud at each one, no bypass.

I run a six-gate pipeline for concept acquisition that is structurally identical to the six-stage QA gate pipeline I run for software deploys. Same shape, different artifact. Same discipline, different failure mode being prevented. The payoff is a concept you can still apply when the original explanation has faded and the new problem does not look like the old one.

The framework surfaces: claude-code-agent-skills-framework for the rule files, claude-code-mcp-qa-automation for the production-QA-shaped pattern that inspired the pipeline mapping.

Gate 1 — Requirements (is this concept worth learning right now?)

QA analogue. The requirements review. Is this feature worth building, and does it map to a real user outcome?

Learning version. Eugene Yan's four questions applied to concepts:

  1. What is the problem this concept is supposed to solve? (Described without jargon.)
  2. Who actually hits this problem — a real role, not a hypothetical.
  3. Would a non-technical workaround solve 70% of it? (If yes, that is the first thing to ship.)
  4. What does competence look like, measurably?

If any of the four fails, the concept is either not ready to learn yet (you are reaching for technology without a problem) or not worth learning (the problem is hypothetical).

Most "I want to learn X" impulses do not survive this gate. The ones that do become durable study — because they started with a problem, not a tool.

Gate 2 — Design (can I describe every piece in my own words, before coding?)

QA analogue. The design review. Reading the architecture doc. Naming which services are touched.

Learning version. The Socratic Q&A phase of my session design. I cannot write the first line of code until I can describe every piece of what I am about to write, in my own words, without prompting.

The concentric loop opens here: analogy in lived experience, descent through code, through system intermediaries, through hardware/math, return to the analogy with enriched meaning. If the return does not land, the descent was not deep enough and the concept has not been designed into my mental model — only dropped onto it.

The test for passing Gate 2: pose a variation of the problem to myself. Can I describe the solution shape before writing it? If the answer is "let me try it and see," the design is missing, which means the implementation will be guesswork dressed up as code.

Gate 3 — Implementation (test before code, always)

QA analogue. The TDD contract applied to production code. RED first. Then minimum GREEN. Then REFACTOR.

Learning version. Exact same contract. Every exercise file has a test file created first. The tests must fail. Only then does the implementation start. Then refactor with tests green.

The reason this works for learning — not just for production — is that a failing test forces the concept into a testable shape. Vague understanding cannot write a failing test; it produces a vague test that passes on anything. If the test is sharp, the concept behind it is sharp.

For math concepts, the test shape changes but the contract does not: a known-answer test (plug in small numbers, match the analytical result), a convergence test (loss decreases on toy data), a gradient-check test (numerical gradient matches analytical gradient). Same discipline, different domain.

Gate 4 — Integration (can I build the 100-line version with my tools in hand?)

QA analogue. Integration testing. The pre-merge gate that runs the full test pyramid and catches interaction bugs unit tests miss.

Learning version. Karpathy's build-from-scratch discipline. Before trusting the 40,000-line library version of a concept, build the 100-line version by hand. micrograd for autograd. nanoGPT for training loops. Your own 40-line RAG pipeline before touching LangChain.

The operational constraint: every time I build, there must be a tool in my hand. dis for Python bytecode. sys.getsizeof for memory layout. time.perf_counter for timing. mypy --strict for type propagation. strace when the abstraction leaks to the OS. The tool forces the mechanism into memory. Without it, the build becomes a pattern-match — which is the exact failure mode I named in an earlier post (the cold-grill diagnostic).

A concept that survives this gate is one whose mechanism you have observed with instruments, not one you inferred from the documentation.

Gate 5 — Acceptance (whiteboard, blank sheet, adapt to a variation)

QA analogue. The pre-deploy gate. Staging canary against a realistic load profile. Not the happy path — the one that breaks if the release is wrong.

Learning version. The whiteboard test. Cold grill. Blank sheet, no notes, camera on the empty page, and I have to derive the concept from first principles while somebody (the Partner in my setup) randomizes at least one variation I have not seen: different activation function, different loss, different input shape. Three "why" checkpoints interrupt the derivation — questions I cannot have memorized the answers to.

This is a FAANG-level verification standard. I run it on myself. A concept that passes this gate has actually been understood — not recognized from a YouTube explanation, not parroted from a textbook, but built from primitives under adversarial conditions.

The failure mode without this gate: "I understood it when Claude explained it" becomes "I can recite what Claude said" becomes "I cannot actually use this on a new problem." Every step of that drift is invisible until the new problem arrives and the concept does not fire.

Gate 6 — Post-deploy (does the concept still work 4 weeks later on a novel problem?)

QA analogue. The post-deploy observability gate. Alarms, error-rate deltas, user-visible regression detection.

Learning version. The Bransford transfer test (Bransford and Schwartz, "Rethinking Transfer," 1999). Pose a novel problem in a new surface form, weeks later. Different domain, different vocabulary, different practitioner's framing. If I solve it, the concept compounded. If I can only reproduce the original analogy, the concept collapsed into memorization and the learning loop did not actually close.

Paired with spaced review. Cards for load-bearing concepts get re-surfaced on a schedule that lengthens with each successful recall. The review is not passive re-reading — it is re-derivation against a new variation each time. A concept that fails Gate 6 is a concept that needs another descent with a different analogy, not "study more of the same."

The bypass failure mode

Every gate has a "look up the answer and move on" bypass. This is exactly Karpathy's reframing of vibe coding: accept the plausible-looking output, ship the exercise, call it progress, and quietly skip the mechanism. Applied to learning, the bypass produces the reflex I named in an earlier post: "If I just start doing exercises now, I will look up the solution from here and there, complete the exercise, move to next."

The fix is the same as for production code: make the bypass expensive by making every gate fail loud. A test that does not exist cannot pass. A whiteboard derivation that does not happen cannot be marked green. A transfer test that is not run leaves the concept in a "not verified" state.

Bypass-resistance is the whole point of the gate. A gate you can bypass is a gate that will eventually be bypassed.

What this gives me

Two compounding outcomes:

  1. Retention. Concepts that survive six gates do not fade into "I knew this last week" six months later. They are still available when the new problem arrives.
  2. Transferability. The fifth gate's variation requirement and the sixth gate's novel surface form force transfer. A concept that transfers is the opposite of inert knowledge — it applies to problems I have not yet met.

Both outcomes only come from discipline, not from talent or speed. A person can skip the gates and finish the exercise faster. That person has produced a file, not a concept.

The QA pipeline and the learning pipeline are the same discipline applied to different surfaces. Same operator, same three hats, same refusal to call anything done that has not passed its specific gate.

Pick one gate your current learning flow does not have. Add it. Not all six at once — one at a time, sustained for a month. The next concept that lands on your plate will arrive differently.


Aman Bhandari. Operator of an AI-engineering research lab running Claude Opus as the coaching partner, plus a QA-automation surface shipping against a real sprint workload. Public artifacts: claude-code-agent-skills-framework and claude-code-mcp-qa-automation. github.com/aman-bhandari.

Top comments (0)