Dogfooding only works if you're a dog

In software development it's considered good practice to find a way to use the software you write. So if you're writing a new web browser you, as soon as possible, start using that web browser for your daily internet surfing. This is called dogfooding, and it's good because you're much more likely to see (and fix) the flaws in your software when you use it on a regular basis. The name comes from the phrase "eating your own dog food" which, if you think about it, kind of has the counterargument built right in.

Dogs aren't people. Dogs don't even necessarily like things that people like. And if you end up making the world's most delicious dog food as judged by humans, you've obviously gotten your wires crossed re: product design. So it is, too, with software: developers are, in very specific ways, unlike a lot of the population. A software team tends to be concentrated in one area, with one culture, and spend most of their day with powerful computers and fast internet. And when those contextual assumptions break down, you see a lot of rough edges.

Google Docs has pathological difficulty remembering that you use non-US formatted dates, but I imagine that doesn't come up very often because its developers are all in the US. Trying to use most Android apps without a stable internet connection is a complete nightmare that most people developing Android (and Android apps) aren't likely to experience often. I used a location-sharing app today that incorrectly assumed I was in a car because of my speed, presumably because the developers don't catch a lot of trains.

This isn't an invective against dogfooding; I think it's still an important aspect of development. But it's important to recognise its limitations. For testing that your software passes the minimum bar of "a person can use it without having a rage-seizure at how annoying it is", dogfooding works well. And for "does it meet the needs of our development team and people like them", it's also an excellent tool. But most software is not targeted at developers and, even if it is, there are a lot of developers on the other side of the world who might want totally different things.

So if your goal is to make dog food, please don't forget to test it with actual dogs. Also, dog food isn't nutritionally complete for humans. That's not a metaphor. Don't eat dog food.

Robochess

Robochess sketch

Yesterday's gaming dalliance reminded me of an old idea I've had kicking around for a while. It's a turn-based strategy game similar to chess in that it's on a grid and you have various pieces that move, but that's pretty much the whole similarity. It's more similar to programming battle games like Core War, but I really like the name Robochess.

Each piece on the board is actually a robot, only able to make moves according to its programming. That programming is done in a fairly simple visual programming language built into the game. Each instruction costs a certain amount of Instruction, which is a limited resource in the game. Robots can move, add Instruction to themselves or adjacent robots, as well as mine Instruction from themselves or adjacent robots. There's no attacking, rather you beat the other robots by either mining all their instructions out, or turning them evil by changing their programming.

And actually everything in the game is a robot. The junk tiles are just robots with no useful instructions, the walls are wallbots that just do nothing, and your main robot is just a robot with a special "do what the player wants" instruction. If that instruction is mined out, you lose. Alternate victory conditions could include being the first to mine a particular victory instruction out of one of the junk piles, or capture all the instructions available on the map.

I'm sure there'd still be some complexities to solve, but I think the core mechanic of a strategy game with programmable pieces would be pretty fun.

Cell city

Cell city sketch

Been thinking through an idea that a friend put in my head a while back: ambient games. Basically, games where instead of having to pay them constant attention, you just make occasional adjustments and the game happens mostly by itself. The main source of enjoyment is satisfaction in watching your decisions unfold over time, rather than big hits of activity at once.

I've started sketching out some ideas for how I might make such a game, and the above is what I've got so far. Essentially, it works a lot like a cellular automata version of a city-building game: you have a big grid of cells, which change intensity or color, points, which cause activity in nearby cells, and zones which set rules for how activity in one cell causes activity in nerby cells. By changing the arrangement of points and zones, you can create any number of different crazy patterns.

But it's not just about making pretty shapes. The cells are constantly moving and changing, and stability is by no means guaranteed. Depending on the rules you use, your world could die off and leave nothing behind, or chaotically spiral into a seething mass of white noise. Getting that balance right over time to make a world that you find pleasant is the ultimate goal of the game.

And of course, it's never truly complete. Just like a garden, there'll always be something that needs doing. But you don't have to do it right now.

Bootleg classroom

I've had the idea kicking around in my head that it'd be pretty fun to make a more informal teaching and skill-sharing environment for adults. It'd be something like a mini-conference environment, where people split up into small groups, but with an unconference-style lack of structure.

At the start of each meeting you'd go around the group and ask each person for a list of things they know about and would be willing to share, which you turn into a big topic list for the event. Everyone groups up by the topics they'd like to be involved with - either learning or teaching. This bit would be a bit tricky because you can only be in one group at a time, but if people just kept moving to their next available preference it should converge on a stable solution.

Once your groups are sorted out, everyone splits off and runs their individual sessions. Depending on how much time you have, you could probably run a few of them. Ideally it'd be a pretty fun and informal teaching environment where, over time, everyone learns a bit of whatever they're interested in. If you ran these for long enough, it would probably settle down into a cluster of general meetups as people's skills develop.

I think there's a lot of room for innovation in the way we do community-building, especially in the tech community. Right now there are only a few, fairly unambitious formats like casual drink meetups, talks, and occasional hackathons. Taking existing top-down formats and democratising them seems like a pretty rich vein to tap.

Je te manque

One of the more random surprising things about the French language is the verb manquer, which means to miss something. However, it doesn't work like you would expect coming from English. Je te manque doesn't mean "I miss you", it actually means "you miss me"; the verb works backwards! At first blush that seems patently ridiculous, how could that possibly make sense? French is a subject–object–verb language. The subject is "I", the object is "you", so how could it be that the object is doing something to the subject?

But a brief foray through English emotional verbs reveals that we should not be throwing too many stones. "I miss you" and "I love you", sure, but "you annoy me", "you upset me", "you inspire me", "you amaze me", "you impress me". If you can don your non-native-speaker hat for a second, how do any of those make sense? We get frustrated at someone, and instead of saying "I havefrustratedfeeling you", we turn it around and say "you frustate me". We force them to have the agency for our emotion.

How do we decide which emotional verbs get the not-my-problem treatment? I assume that reflects our own attitudes towards them. We like to think of ourselves being in the driver's seat for love and hate, but – especially for the negative emotions – we would rather that responsibility lie elsewhere. And imagine if it didn't! We'd have no elegant and snappy way to express an idea like "you offended me", we'd have to settle for "I haveoffendedfeeling you". The emotional nexus of our communications would have to stay centered on our actions and our decisions, with no opportunity to use linguistic tricks to outsource that responsibility to others.

Sounds fairly confronting, but I bet if I was transported to that world, after a while this one wouldn't causemissingfeeling me at all.