Driving Rust
Eight levels. Each one ends with a sentence you can say to a coding agent that you could not say before — and a diagram you could redraw on a whiteboard.
The route
Levels 1–5 are Rust judgment. Levels 6–8 are Solana and tokens. Nothing is locked — but they build.
The map
The Bargain
What Rust charges, what it pays, and when the borrow checker is right to refuse your design.
When Rust, When Not
The decision surface, drawn against your own stack. Aimed at a belief you hold; be ready to lose it.
The Shape of a Good Rust Codebase
Errors as architecture, traits versus enums, newtypes, illegal states, and the smells an agent will hand you.
The Questions Your Agent Will Ask
Owned or borrowed, sync or async, dyn or generic, channel or lock, one crate or many. What each answer commits you to.
The Boundary
PyO3, WASM, CLI, sidecar. Sizing the carve is the whole skill: too small and marshalling eats the win, too large and you rewrote the system.
Accounts, Not Objects
Solana’s model as it actually is: stateless code over accounts somebody paid for. Where the Postgres analogy breaks.
Do You Need a Token?
The honest filter: what a token buys that a Postgres row does not, applied to your real projects. Negative verdicts included.
Architecting the Program
Signers, validated accounts, arithmetic, upgrade authority, and the capstone: the brief you would hand a Rust agent.
Rematch — 0 calls you would make again
The calls that cost you, and the ones you were certain about and wrong. Answer them again; the score updates.
The ledger
Every concept this course covers, the level that teaches it, and the one-line decision rule it produces. Rules unlock as you clear levels. This is the page to keep.
| Concept | Level | Decision rule |
|---|---|---|
| When Rust | ||
| The band: when a project wants a Rust element | L2 | |
| Rust already in your Python stack | L2 | |
| The anti-cases: IO-bound services, résumé-driven Rust, no maintainer | L2 | |
| Ownership | ||
| Move semantics | L1 | |
| Borrowing as a design critic, not a rule | L1 | |
| Clone / Copy and the cost of cheap duplication | L1 | |
| Owned type vs borrowed view (String / &str) | L4 | |
| Lifetimes as an API commitment | L3 | |
| Modelling | ||
| Traits vs enums — open vs closed extension | L3 | |
| Trait objects vs generics | L4 | |
| The newtype habit | L3 | |
| Making illegal states unrepresentable | L3 | |
| Failure | ||
| Option and Result — absence and failure in the type system | L3 | |
| Error architecture: thiserror at library edges, anyhow at application edges | L3 | |
| unwrap / expect as a load-bearing claim | L3 | |
| Panic vs recoverable, and who decides | L3 | |
| Concurrency | ||
| Send and Sync | L4 | |
| Arc<Mutex<_>> vs channels vs actors | L4 | |
| Sync vs async and the colour problem | L4 | |
| "Fearless concurrency" is a compile-time claim | L4 | |
| Boundaries | ||
| Crates and workspaces as module boundaries with teeth | L4 | |
| The public API surface is the thing to review | L3 | |
| unsafe — meaning, legitimacy, and its real cost | L5 | |
| FFI: PyO3, WASM, CLI, sidecar — sizing the boundary | L5 | |
| Project economics | ||
| Zero-cost abstraction — what it promises | L4 | |
| Compile time as a project-management cost | L4 | |
| Dependency weight, semver and MSRV | L3 | |
| What the type system lets you not test | L3 | |
| Driving agents | ||
| One error strategy chosen up front | L3 | |
| Workspace boundaries as the unit of delegation | L4 | |
| clippy and rustfmt as enforced conventions | L3 | |
| You review the public surface; the rest is detail | L3 | |
| Solana: the model | ||
| Accounts, not objects | L6 | |
| Rent and rent-exemption | L6 | |
| Account sizing and realloc | L6 | |
| Determinism: no floats, no wall clock, no network | L6 | |
| Solana: authority | ||
| Signers | L8 | |
| Program-derived addresses and program-owned authority | L6 | |
| Mint authority and freeze authority | L7 | |
| Upgrade authority — keep or drop | L8 | |
| Solana: composability | ||
| Cross-program invocation | L8 | |
| The instruction surface as a public API | L8 | |
| Compute-unit and transaction-size limits | L6 | |
| Oracles and off-chain truth | L6 | |
| Solana: tokens | ||
| SPL Token vs Token-2022 | L7 | |
| Decimals and supply as permanent decisions | L7 | |
| The four things a token buys, each tested against a database row | L7 | |
| Solana: failure modes | ||
| Missing signer checks | L8 | |
| Unvalidated accounts | L8 | |
| Arithmetic overflow | L8 | |
| Reinitialisation | L8 | |
| Audit economics | L8 | |
Your licence
It updates as you go. Calibration is the number that matters: how well your confidence matches your accuracy.
Rank comes from levels cleared. Calibration comes from the stake you set before each call — betting Certain and being wrong costs nearly double, and a hunch that pays is worth less.
Everything lives in this browser's storage. Nothing is uploaded anywhere.