EVC #8: WASMing around with "compute / device mismatches"
Founder Bolt with Connor Hicks from Suborbital
In 2014 I founded an open source & hardware company called Smart Torvy, which started as a university campus automation system before focusing on home automation. All hardware pieces ran on an ATmega328P-compatible chip (we had transitioned from an Arduino MVP) that connected through ZigBee to a Rasperry Pi; we were writing all the edge devices code in a C++ dialect, and the rest in Python.
One of the concepts I started thinking about was around “compute / device mismatches”. For example, I might want to write some subset of my code on the board in Python rather than having to send data back to the central hub, use Python to analyze it, and then send it back. A couple of years later I was working on an e-commerce platform, and had similar thoughts: why am I sending these raw images to the server rather than using ImageMagick to resize them right in the browser?
Luckily, a few years later someone smarter than me at Mozilla came up with WebAssembly (Wasm). Wasm allows developers to write programs in their favorite server-side language (C, Rust, Swift, Ruby, etc), compile it into a portable WebAssembly binary, and then execute that code in different environments: you could write Ruby code, compile it to a Wasm binary, and then use the Javascript API to run it right in the browser. You could even embed it in a microprocessor using something like wasm3, which makes it a great fit for edge computing applications.
There’s a ton of great Wasm applications, but there are a few areas that I’m particularly excited about exploring. If you’re building or thinking about this space, I’d love to chat!
Shifting some applications back towards monoliths by using Wasm to embed functions instead of using separate microservices. This should reduce complexity for small teams, as well as cloud cost by minimizing the amount of data transfer over the network.
Creating native-like experiences on mobile devices by using Wasm to do as much as possible on-device, reducing latency especially on slow connections.
Replacing API and webhooks integrations with Wasm runtimes embedded within cloud products, giving users the chance to extend the platforms through custom code rather than being constrained by the API design of the vendor.
Fun Reads
GitHub’s Engineering Team has moved to Codespaces: I always enjoy reading recaps of large projects at scale. I’ve also been pretty skeptical of cloud development environments, so it’s interesting to see some real-life analysis. There’s also some crazy numbers in there: “The GitHub.com repository is almost 13 GB on disk” 🤯
What Is WebAssembly — and Why Are You Hearing So Much About It?: If you’re interested in diving deeper into Wasm, this is a good primer.
Stack Overflow Developer Survey 2021: Always a good read! A couple of interesting data points were AWS’ lead erosion as the most popular cloud provider, and React officially surpassing jQuery in terms of popularity. Also hurts to see Ruby at 46% dreaded :(
Maybe you don’t need Rust and Wasm to speed up your JS: Vyacheslav called this a “small performance investigation”, but it’s a great step-by-step window into how a compiler engineer thinks through code optimization.
Founder Bolt ⚡
Today’s Founder Bolt is with Connor Hicks, founder of Suborbital. He’s the creator of the open source project Atmo, which helps developers build function-based applications using composable “Runnables”. At Suborbital they are now building Flight Deck, a platform that helps SaaS vendors offer a programmable interface right within their application, allowing users to build serverless functions to extend the product.
What’s one productivity hack that you really love?
My favorite productivity hack these days is listening to LoFi music while writing code. I’ve found myself staying focused for longer and remaining more relaxed while I work, and it’s become a regular part of my day.
What’s the latest product your engineering team has adopted at work?
The latest thing my team has adopted is the PlanetScale serverless database. It has been an incredibly easy way to get a database up and running and it works extremely well. It’s built by the team who builds the popular Vitess database project, and I’m loving it so far.
What technology/architecture are you the most excited about trying? What about getting rid of?
I’m currently trying to find time to try two new technologies: the Cue data language and GitHub Codespaces. They’re both very interesting, and we’re going to be building some cool things with both. I’ve also recently started using an iPad Pro regularly, and the ability to do more work on it is a big deal.
In terms of getting rid of a technology, I’m pretty excited to get rid of Intel processors. We already have many M1 machines in our household, but my daily driver is still an Intel machine since there are still some wrinkles with developing on M1.
What’s one side project you started but never finished?
A side project that I started was a tool for ensuring your code project’s documentation stays up to date and compile-able with the actual project. I built a minimum viable version of it, but it didn’t last past the weekend where I started it.