agree, verification is the unlock. the difference with kernels: correctness is easy to check against a cpu reference, but speed depends on the exact gpu, and tiny changes swing it a lot. races can also pass once and fail later. so you need a reference plus a benchmark on real hardware. what have you optimised that way?
i'm a frontend engineer and this weekend i wrote my first gpu kernels.
first question i asked: in the age of ai, does anyone still write these by hand?
short answer: yes. and that's exactly why i'm learning it.
a kernel is basically the callback you pass to https://t.co/L8NvVtfELw, except the gpu runs thousands of copies at once. each copy uses its index to find the one pixel or number it owns.
ai can already write the simple ones. i had an agent walk me through a greyscale filter in webgpu and it handled the boilerplate fine.
but the bugs that matter are subtle. drop one term from the index math and thousands of threads race to write the same slot. the output looks almost right. nothing crashes.
that's the pattern with agents everywhere: they write the first draft, you own whether it's correct. and you can't review a kernel you don't understand.
the kernels that make models faster, like flashattention, are still written or closely guided by people who know the hardware.
my plan: fundamentals in webgpu first, then triton and cuda.
shipping with agents doesn't mean knowing less. it means knowing enough to catch what they get wrong.
i'll share what i learn as i go.
Introducing Canva Craft ๐
Extraordinary image generation is now available to everyone, powered by our first frontier model built specifically for design.
With Craft, Canva is now the world's second most advanced AI lab for image generation on @DesignArena's global leaderboard.
See what it can do ๐
Give your agent a way to verify its work. This can dramatically improve the quality of output.
With this process in place, Claude Code was able to write 90%+ of its code itself. When generating software at a faster rate than you can review it, the bottleneck shifts to proving that it works. @bcherny and team invested enough in verification, we've been able to move fast while maintaining stability.
Code reviews aren't going away, but you need to think of it differently. One human reading through line-by-line is no longer going to work as a gate, it needs to evolve into a multi-layered verification system, built with fast deterministic feedback loops for your agents.
This is where e2e tests, feature maps (as @poteto has been advocating), property tests and multi-agent adversarial reviews come in. These all provide opportunities to catch errors early and fix them before things get out of hand.
You don't have enough eyeballs for the amount of code being written so your focus needs to be on product intent, risk assessment and evaluating evidence rather than reviewing code. Delegate the code checking work to your automated tests, scale your approvals based on risk, and turn your test failures into living evaluations. This approach helps maintain speed without losing reliability.
Let the agents do what they do best and let you focus on what makes you irreplaceable: judgement, direction, and ownership. We tried to capture how we handle code review and verification in this writeup. Hopefully it's helpful.
This was wild to watch unfold. We ran ๐๐-๐๐๐๐๐๐๐ in a loop against https://t.co/bnjggVrBDj until it got to 100/100.
It made us close quite a few gaps. We worked hard to make sure the criteria is high quality and worth your time & tokens.
๐งต 5/5: The Takeaways
Pointers = Array Indices: A Wasm pointer is just an offset into WebAssembly.Memory.
Zero-Copy Speed: JS reads the guest's memory directly, avoiding serialization overhead.
Watch Out: Memory must be freed manually (or via wasm-bindgen) to avoid memory leaks!
If you found this useful, RT the first tweet and follow for more Rust + WebAssembly deep dives! ๐