I build from the gate up.
Bootloaders, byte-level packing and game loops at the bottom. Interfaces people actually feel at the top. Same craft, different altitude — and lately, a lot of it done by talking to the machine instead of typing at it.
Everything is a NAND
gate wearing a costume.
Flip both switches. That one lonely output is the entire tower — every language, every framework, every shader you have ever loved is this, repeated until it becomes an opinion.
| A | B | Y |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Field order is a
performance decision.
The compiler pads your struct to keep every field aligned. Write the fields in a careless order and you pay for holes. Same data, same semantics — reorder it and a million particles get 8 MB lighter.
I've outlived most
of my toolchain.
I started at an Ok prompt and I'm still here, which means I watched most of this list die. The dead branches taught me more than the surviving ones — you learn what an idea was really worth by watching what happens to it.
Amber runs to the right edge. Everything grey stopped somewhere, and the dotted lines show where its ideas went to live instead.
GW-BASIC. Line numbers, GOTO, no undo. A computer is literal, not clever.
Bootsectors and assembly. 512 bytes, and the magic number at the end.
The frame budget is a hard number that doesn't care about your abstractions.
Cache lines and alignment. I still lay out data before I lay out code.
Frontend. Same optimisation instinct, new unit: attention instead of cycles.
Describe intent, review fast. It works because I know what's underneath.
Data is pretty when
you display it right.
Below is one dataset — 48 hours of frame times from a render loop. The numbers and the picture are identical information. Only one of them tells you where the stutter is.
Same pixels.
Four ways through the machine.
One deterministic Float32 image, one naïve 5×5 Gaussian convolution, four execution models. They run sequentially so you can watch the abstraction move: main-thread JavaScript → Workers → WebAssembly → WebGPU.
| Backend | Cold first result | Warm median | Throughput | vs CPU | Validation |
|---|
CPU: allocation + first pass. Workers: pool creation, input distribution, first pass, and result gather. WASM: memory creation, module instantiation, input copy, first pass, and result copy. WebGPU: adapter/device, pipeline compilation, upload, dispatch, and readback.
Median of three passes after setup. CPU reuses its output buffer. Workers keep input resident in persistent workers and return only a tiny completion message. WASM reuses the instance and linear memory. WebGPU reuses device, pipeline, and buffers; host time waits for queue.onSubmittedWorkDone().
The CPU result is the reference. Every other first result is compared element-by-element. Small WASM/WebGPU differences are expected because their accumulation is Float32 while JavaScript accumulates in Number before storing to Float32.
This is one browser, one device, one kernel, and one image size. Workers can lose on small jobs because messaging dominates; WebGPU can lose cold and win warm because pipeline/device setup is expensive. The useful crossover is the point, not a universal ranking.
Off-script,
on purpose.
The gauge on the left just went past its top tick, which is roughly what happens to my evenings. The best engineering ideas I have stolen were not from engineers.
Run the machine in your head until it breaks. Then build the version that doesn't.
Point the instrument at the sky and report what you actually saw, not what was assigned to you.
A thought experiment costs nothing and can still move the universe a few degrees.
The maths works and the intuition doesn't. Learning to sit inside that gap is a professional skill.
Four billion years of iteration with no roadmap and no meetings. Still the best code review available.
Every abstraction we've built is stacked on a primate that learned to count. Design accordingly.
Before optimising the answer, check that the question compiles.
Curiosity that has nowhere to be is where the unusual solutions come from.
Read outside your field on purpose. Analogy is the cheapest form of invention.
Notes in the margin — my reading of them, not their words.
You can't make epic shit with basic people.
— but nice ones. Always nice ones.
Standards are the kindest thing on a team. Shipping something mediocre together costs everyone the same week.
Strong opinions, cheaply abandoned when the profiler disagrees. Being right later beats being right loudly.
Direct when it counts. Sharp code review, soft landing — the two were never in conflict.