I released Face
on Monday. It got more Twitter attention then any of the other Constraint System releases so far. Which feels good! Although I also do notice that there wasn't a lot of direct feedback -- or (what I'd really like to see) people sharing things they made with it -- just likes. I did get some feedback I've been thinking about: that the 'hjkl' direction navigation (borrowed from Vim) is a high barrier to people jumping in.
Why do I use the navigation? Well, first because it is what I use daily, in Vim, in i3wm, and while browsing the web thanks to the Vim plugin. Also since I've switched to the Atreus keyboard, my actual arrow keys are a couple layers deep, making 'hjkl' even more convenient.
Ok, that makes sense, but why not give people not used to it the arrow option? That speaks to a broader design question. I started doing the Constraint Systems stuff directly inspired by 100 Rabbits, specifically Noodle
, which is a pretty uncompromising drawing tool (for one thing it starts with a completely blank screen). It drove home to me that you can just do that -- make exactly the tool you want exactly how you want it, and, in 100 Rabbits case, you can even build a community of like-minded people around that tool. This is especially in contrast to when I'm designing something at work and I feel like I have a responsibility: to the team, to the project, to make things accessible to a broader audience.
Closely connected to that is feedback/iteration speed. If I'm building the tool exactly how I want it, then when adding or modifying a feature I simply have to determine if it feels good and makes sense to me. If I start extending the configuration, so that it can be used in ways that I don't, I add overhead, where I have to check new features against both my use and the alternate flow I've added in. (Another option is to make things configurable, which I'd like to explore sometime soon, but I also can't expect configurability to solve all my problems, the vast majority of folks will stick with the defaults.)
Also tied to that, is that I view the constraint systems project as my journey to 'find my own way', something I always have trouble with when giving feedback is if my feedback makes sense for my mental model of the project, but not the person creating it. Sometimes they'll try to satisfy my feedback, but if they aren't on the same page about how it fits in, chances are they'll do something down the line that will clash with my suggestions. Usually I think that I would rather see the fully- formed, fully-developed thing from someone else. I'd rather see a coherent mental model I don't totally align with than a mish-mash.
In fact, I think what is interesting in a lot of the 100 Rabbits projects is to me it often feels like they're coming from an alien logic (Orca especially is like this). That's a big part of the thrill of it. It's like my favorite trope in sci-fi books of how an alien language can unlock new modes of thought.
But what comes with this is a big learning curve. And I think that's what I need to think about more seriously with the experiments. Because if I want people to drop in and create and share, that unfamiliar confrontation is going to cause many to bounce off. I think in the back of my head I'm still imagining Constraint Systems building in to some sort of app that combines writing, drawing, diagramming and maybe image editing, and if you're going to go through all that you may be more willing to perservere through an unfamiliar control scheme for a payoff down the line. But if you just see a GIF on twitter and click through... you're less likely to do that.
So I need to think about what I want to do. I also feel like I am doing a slippery slope thing, where I want to make sure I don't chase after every piece of feedback I hear (I've worked on projects I felt were doing that and found it frustrating), but I also shouldn't get too strongly attached to some perceived purity. Because on a basic level what I'm talking about is enabling arrow keys for navigation along with hjkl. Something even Vim, which is not exactly beginner friendly, does. And I think I can go ahead and do that without feeling like I'm really compromising the vision of anything -- especially if I think of it as making it more possible for people to make things, which is my top goal.
It doesn't come without a cost (some part of my brain shouts) though. Even though enabling them is trivial code-wise, I will need to think through how I expose it in the instructions, instead of saying 'j' for down, I'll need to say 'j' or '↓' for down. Which does add some overhead. Probably worth it, though? Trade-offs!