Managing velocity
I’ve been discussing our velocity at length with my colleagues at work. We have never been able to produce this much code in this little time. With a subsidized coding subscription from one of the frontier labs, each jockeying for technical hearts and minds, it’s never been a better time to be a software developer. Being a software engineer, well, that’s becoming more challenging for sure.
Since I first heard it, that line “software engineering is computer programming integrated over time” keeps reverberating between my ears. I’m vibe coding an entire Kubernetes-based Linux distribution; how on earth can I keep this chaos under control? To me, the answer is: MORE AI!
I feel like the liken family of projects is extremely high quality, but I don’t deny that it is entirely vibe-coded. I have barely looked at the code myself, even though there’s still a strong instruction to treat the repo as a “literate programming” project with extraordinary levels of code commentary inline for anything tricky. How can I claim that the quality is high without having even seen the code? By scaling up my quality control and product ownership with AI agents.
This code has been read in full at great levels of detail with adversarial prompts. Sometimes I just get bored and ask Fable to go look for problems or gaps or shortcomings. When I got access to Astra today, the first thing I asked it to do was find any security or reliability problems in liken proper and to document them as open problems (and it found quite a lot to fix). I continue to have the AI agents ratchet up code coverage and today we started publishing code coverage reports on the documentation sites (liken, media, audio, bluetooth, and display).
Meanwhile I test the product with an uncompromising eye. I will not let things
rest until every single part of it feels solid and reliable to me, and I can
test at a scale that matches the production of code. Building a system designed
as a love letter to Kubernetes implies a strong level of observability inherent
to the product. A lot of the in-cluster testing we do feeds back as new logging
or CRD .status fields that improve the legibility of the system. I’ve been
running liken as my homelab’s only operating system for months now and any
friction I hit I can feed directly back into LLMs to resolve it. Before the last
year or two, I would get too exhausted mentally to build and test and
product-manage my side projects, so it was very easy to make excuses to cut
corners. Now that I’ve scaled out testing and building, I can put all of my
energy into product-managing.
The commit history of the new library-operator tells this story well. It was a
twinkle in my eye in the last devlog, and now just 11 days later it feels better
to me than Jellyfin or Moonfin. In 2024, just the work
that went into
choosing
the iced UI toolkit alone would have been enough to make
me quit this side project by now. Now the fun part to me is actually the pixel
pushing and solving the hardest design questions.
I’m especially proud of the franchises system, all of which would have been far too exhausting to build without AI. While there are well-established sources for box sets and collections, there is essentially nothing out there for representing the narrative story lines of the huge franchises like the MCU or The Walking Dead. So I had Fable turn a swarm of 20 Sonnets loose on it to produce https://tangled.org/guid.foo/fiction-franchises to bring this into the world. I had a few conversations with my daughter about the best way to visually represent a multiversal timeline in narrative order, and we both agreed that this was a completely unsolved problem in all of the apps and streaming services we use. I made a number of failed attempts that I hated, then realized that I could send Claude Design to go out and make comps for me. It came up with the brilliant “metro map” design which we built out last night.

So to those who are growing anxious about the velocity of the code changes and trying to keep up with it: don’t forget to zoom out. Maybe you don’t need to know what the code is doing. Maybe you don’t need to steer the shape of the classes and functions directly. Maybe you should let AIs sweat those details like we’ve let compilers sweat the details of turning C into machine code for many decades now.