Build software faster, August 2021

My recent work has cohered a bit around the goal of building software faster. Here’s what I’ve done over the last month.

Released

  • Substantiate. An augmented reducer that makes it much faster to build React apps. I released the library on npm. I wrote about it.

Prototyped

  • Direct React. A GUI that lets you modify the traits of a React app, and persists those modifications back to the code. I wrote about it.

Wrote

  • Avoiding the drain. About my goal of building tools that make building so fast I never feel the drain of motivation.

In progress

  • Behaviorist. A fuzzily-defined project that aims to let you build a video game via a combination of:

    • direction manipulation (drag to place things in a level),

    • an event → action model (when the user presses the left arrow, run the move action),

    • forms-based programming (configure the move action to move the player left by filling out a form),

    • plugins (e.g. implement the move action as a plugin written in JavaScript),

    • and an incredibly vague idea about the game always being in a “working” state that you sculpt towards the desired behavior.

Reflection

  • It feels good that I was able to try out two and a half ideas in one month. Building small experiments to learn the good and bad parts of an idea seems like a promising technique.

  • Both Substantiate and Direct React came directly out of real work I was doing. I wanted to build prototypes faster at Airtable, and these tools came out of desires that came out of that work. Substantiate helped the work go faster. And, though Direct React didn’t, I strongly believe that if I put a bit more development time in, it would.

  • Both Substantiate and Direct React make it faster to write code. This has been useful. But making it faster to write code is not what I’m aiming for. I want to find a way to mostly avoid writing code, because writing code is way too slow.

  • Behaviorist feels off track. Problems:

    • It’s a big hodgepodge of ideas, and each of them seems flawed.

    • I don’t have a project I’m trying to make with it.

    • I’m worried about the fact that, as I’m building the tool, it’s very hard to get myself out of the mindset of, “I’m building a tool to make building games approachable” (which is definitely not my focus) and into the mindset of, “I’m building a tool to make it faster for me to build something”. The fact that I keep on slipping back into this being a tool for “someone else” is bad.

    • The fact that Behaviorist is focused on games is good I think. Making a tool for making simulations is doing “build software faster” on hard mode because simulations are a very complex type of behavior that code is good for expressing.

  • Potential next steps

    • Think of a game I actually want to make to help focus Behaviorist’s feature set and ground it in the needs of a real user.

    • Write up Behaviorist and move on from it.

    • Take steps to find a more substantial and regular community of people working on the dynamic medium / future of programming stuff. People I can exchange ideas with and learn from.

    • Choose the most promising next tool idea and build it.

      • A generic version of Direct React that exposes the code AST and a plugin system for defining UIs that manipulate that AST.

      • Say fuck it and start building tools on top of language models because anything else is going to be obsolete soon.

      • Explore what other editors could be added to Direct React (could be a great way to understand more about the very fabric of a running application and how it could be manipulated).

      • ActiveRecord, but for a reducer.

      • Finish Direct React enough to make it a useful style editor.

    • Study other tools (Codeflow, Hypercard, Origami, Dreams, Fancade, Roblox, Flash, CappuccinoJs, Interface Builder, Imba, Universe, Game Builder Garage…)

    • Write up other interesting tools I’ve tried: Axure, GameMaker…

    • Write about the drain more to find the high priority things to make faster.

    • Start the podcast where I interview people who created tools that help you build software faster.

    • Learn more about creativity/discovery.