Arbitrary reduction

Choosing between things is hard and, unfortunately, more hard the more things there are to choose between. But I don't think this just applies to massively multiple choices like picking a movie or an ice cream from a needlessly comprehensive menu, it also comes from the logical generalisations of simple choices. Say you walk past a homeless man on the street and he asks you for money. Do you give it to him? Do you give it to every homeless person? Is that the best use of your money compared to, say, sending money to starving African children?

There are lots of similar scaling problems, where a little easy choice generalises into a big hard choice. You're a policeman, do you let someone off with a warning because they give you a sob story about running late? That's not going to scale; everyone's late, everyone has a sad story. But if you knew that it would just be this one person, just this one time, the decision would be easy. At scale, deciding who deserves warnings and who doesn't becomes a very complex process worthy of an entire judicial system.

But cops still give out warnings, people still give money to the homeless, and we make it through daily decisions about ice cream and other important things. I think the way we do this is by applying arbitrary reductions to the problem to scale it back down to a size where it's manageable. So you ignore the problem of all homeless people and just consider the situation in front of you. Why is the person in front of you more important than the person two blocks away? No reason. It's arbitrary, but the full problem is too hard, and arbitrary reduction gets us through the day.

The problem with arbitrary reduction is that it's often not very fair. We use simple reductions like distance, similarity, or wealth, and those often have a self-reinforcing bias. All the people in the world is too many to think about, so you help people in your comparatively well-off neighbourhood. When you're looking for people to hire, finding the best person out of everyone is hard, finding the best in your existing network is easy. If you want to invest, there are a lot of companies out there, but much fewer if you only consider those founded by friends from university. If you start on the outside of that, you stay on the outside.

Sometimes we can do without arbitrary reduction by just tackling the big problem head-on. Effective altruism is an attempt to do that for the space of charity and general do-goodery. Even without a specific framework or movement, though, it's possible to just take the hard road. Sit down and enumerate the options and goals in as much detail as necessary. If that means thinking on the scope of all people worldwide, then so be it. If it takes a week, a month, a year, so be it. That's the cost of making the right decision with all the information.

Unfortunately, it's often just not feasible. Effective altruism is a worldwide effort by many people from different disciplines all collaborating to answer that question, and there's still a fair bit of disagreement. For something like charity, where you can just make the decision once and keep benefiting from executing that decision for a long time, that might be worth it, but in other cases there's not enough time or resources to avoid an arbitrary reduction. However, that doesn't mean we have to settle for the biased reductions we have now.

So I'd like to propose a fair arbitrary reduction: randomness. It sounds strange, but why not? If the goal is to reduce your options, it's the most representative and equitable way to do so. Can't decide between ice cream flavours? Flip a coin, heads is the top of the menu, tails is the bottom. Congratulations, you just made your decision 50% easier! Looking to hire but don't have time for a full application process? Get the list of attendees for your next industry meetup, shuffle it, and try to talk to those people in order.

I'm not saying to make the actual decisions randomly, that would be chaos. But if you need to throw information away, the right way to do it is randomly. Every time we make a decision easier for ourselves by arbitrary reduction, we create an opportunity for hidden information, hidden bias, to enter the decision. Sometimes that doesn't matter, but often it does, and it's hard to know for sure. If we have to be arbitrary, we may as well be the fairest kind of arbitrary: purely random.

Prototype wrapup #6

And the wheel comes round again! last week I flagged an intention to radically scale down my prototypes in response to my thoughts on the idea triangle, the three-way tradeoff between interestingness, completeness and time. I committed to 3 prototypes in 1 hour each, and I'm happy to say I easily met that goal.

Thursday

I'd been thinking for a while about making some tools to improve the process for updating hero builds in Dota 2. So the first thing was to see if it was possible to download existing builds. This is some scripting to do that.

Friday

This is a continuation from yesterday, a script that can take a .build file and upload it back to the Dota 2 web service.

Saturday

I had a neat/scary idea for a tool I could use to overcome my initial resistance to starting a task: reverse the status quo by making the current situation unbearable! Mosquito plays a high pitched noise until you close the window, the idea being that you say you'll only close the window when you get started. This one made it into its own repo.

Sunday

I wrote about a superlative number market idea before, and I was thinking about using Pony for that. It seems like a fun super-concurrent language to do it in. I wanted to try out making a simple web service backend to test it out, but I couldn't make anything work. I don't think Pony is ready for primetime yet.

Monday

A silly idea I had after I typoed document.createElement as document.crateElement one too many times. Fixes the typo and adds a crate in the background to the elements you created. Only 71K (53K gzipped)!

As you can see, there's a pretty substantial difference between my prototype output the last week and the weeks before it. Much smaller, less ambitious prototypes, and more of them. I'm definitely happier with this approach, so much so that I'm going to commit to doing one every day for next week. This feels like a sustainable vision of the small-scale thing I've been shooting for. The ones I was doing before were really just mini-projects.

I would like to explore that space too, but all in good time.

Noise dictionary

I had an interesting idea today while watching a movie. It's notoriously difficult to compress noise because of its lack of exploitable underlying structure. Unfortunately, certain real-world sounds resemble random noise, like percussion, applause, rain, and even guitar strings. The more they sound like random noise, the harder they are to predict, and the harder it is to compress that audio down effectively. You can sometimes hear this in badly-encoded movie files, where running water sounds garbled.

The essential problem is that you can't compress randomness, so what if we make it non-random? It's quite common to create data that looks random, but follows a predictable pattern if you know the initial seed value. If we created a standard for predictable noise seeds – a kind of noise dictionary – sound effect artists could create sounds using noise sources that sound exactly the same as what they would use otherwise, but are far more predictable. Creators of audio compression formats would be able to use that same dictionary to compress the noise more effectively.

That wouldn't just mean smaller files, it would also mean higher-fidelity reproduction of noise-like sounds, a current blind spot for audio codecs.

Creative competition

I've heard it said that competition is bad for creativity. Certainly, there are some pretty bad examples, such as Microsoft's infamous "stack rankings", where employees were graded on a curve and fired if their rank was too low. In that case it was something more akin to a fight for survival, and understandably it led to some pretty survivalist employees. However, outside of those circumstances, I actually think competition is healthy, even vital, to creativity.

One very difficult thing is to know where the maximum is. Let's say you want to be a really fast runner, so you train and train, and every day you get faster. But as you go along, your improvements slow down, and eventually plateau. Is this the fastest it is possible to run? Or could it be that there's just some way to go even faster that you haven't thought of? Getting it wrong either way is pretty bad. If you think it's not possible when it is, you're needlessly holding yourself back. But if you think it is possible when it isn't, you're set up to just fail non-stop until you eventually give up.

But all of this changes when you have a rival. Only one of you can be the fastest at one time, which means whoever is coming second definitely knows that they could do better. And if they do, the positions switch and now the ex-number-1 needs to figure out what has changed. Each runner has their own approach, so there's a decent chance one of them will come up with something the other won't have considered. Multiply this by hundreds or thousands and that collective engine is pretty good at improving itself.

Most importantly, knowing that the metasystem is improving takes the pressure off you as an individual to figure out what the limit is. Is it possible to run faster than 44.7km/h? Usain Bolt has to worry about that, but you don't. And he can be reasonably certain that if it is possible, someone will figure out how, if not him then one of his rivals.

Of course, in sports there are all sorts of physical and biomechanical limitations to what you can do, and in some other fields the upper limits of possibility are well-defined and known in advance. Things are much harder when there is very little in the way of underlying universal truth or easy approximation of what is possible. Creative work, in particular, is very difficult to measure. Is this the best book it is possible to write? Is one good book every year the most you could reasonably expect to write? Have we basically run out of clever ways to reinterpret Shakespeare plays?

The answer to all those things could be yes or no, and you'd be hard-pressed to find a way of even approaching the question formally. Instead, to explore those limits we have to rely on the iterative process of competition, driven by lots of individual attempts to find improvements. It's not exclusive to creativity, either; many areas with ill-defined limits often get this same treatment. For example, it used to be thought that working and having a family were incompatible, but people have found ways to do it, often by sacrificing in other areas or making surprising changes.

Two things stand out about that: firstly, that people aren't necessarily competing with each other directly, they just want the best result possible, and the best is defined in terms of other people's results. And secondly, the tradeoffs aren't automatically good ones. Maybe you think that you're the best guitar player you can be, until you see someone else who has moved in with their parents, quit their job, and does nothing but practice the guitar every waking hour. You could do that too, if you wanted to be good as bad as they do.

That, perhaps, is the biggest benefit of competition. Not just knowing what better looks like, or knowing that it's possible, but knowing what it would take to get there. Sometimes that's a path you can follow, and other times it's a warning sign.

Fail open

Contrary to many people, I think movies are a great way to learn about computer security. Someone once observed to me that the funniest thing about Jurassic Park is that when the security system loses power, the locks open. What kind of idiot would design a system like that? Oh, sorry, the power went out, now Newman has all your dinosaur embryos and PS the velociraptors are free. More recently I watched Ex Machina, which had doors that lock automatically when there's a power outage. That's definitely more secure, but pretty creepy when you're locked in your room waiting for the power to come back on.

Those two options are called fail open and fail closed, and the decision between them shows up fairly often in system design. Failing closed means that, if something goes wrong, you default to the most conservative behaviour. So if your login system can't connect to the login database, it should act as if your password is incorrect (ie, not let you in). On the other hand, if your spam detector loses access to its spam database, it should just accept everything. That is failing open: defaulting to the most liberal behaviour.

The way to decide between them usually rests on the tradeoff between false negatives and false positives under the circumstances. Losing legitimate email is way worse than getting the occasional nigerian business proposal. On the other hand, letting the wrong person in to your account is way worse than not letting the right person in. And, as should be obvious, accidentally containing dinosaurs too much is far preferable to the opposite.

There are some important human factors, too. Failing open sometimes means that systems just get ignored rather than fixed when they fail. When a smoke detector runs out of batteries and stops working, it still behaves exactly like a properly functioning smoke detector nearly all the time. That's why, instead of going quietly, they fail closed and start beeping obnoxiously. Of course, the flip-side is that a fail-closed system tends to get disabled or bypassed when its strictness gets in the way. Too much obnoxious beeping just means you pull the battery out earlier.

I think of our internal filter as an example of just such a system. Before we say something, do something, create something, release something, we want to make sure it's good enough. Of course, some people say "just don't worry if it's good enough", but to me that's a classic contextual belief that only makes sense if you already have a relatively well-functioning filter. Nobody says or does things with zero consideration for whether those things are any good. But I do think you see a lot of difference in how people react when they're not sure.

I've noticed that some people tend to let their filters fail open. If they aren't sure about the thing they're saying, they'll say it anyway. If they're not sure whether they're singing the right note, they'll sing louder. In the absence of feedback, they go with the most liberal, optimistic behaviour. By contrast, others tend to fail closed. If they don't know, they stay quiet until they know. If they feel uncertain whether the thing they're doing is good enough, they just won't do it. Why take the risk?

And risk is really what it's about, because in some cases the consequences of your filter being wrong can be pretty significant. If you're a politician or a celebrity, or even just in a conversation with a group of people you don't know, failing open could mean saying or doing something that you can't take back. But in many situations I feel like that risk is exaggerated; you're not going to lose all your friends for saying something dumb, or have everyone hate you because you made something bad.

It's for this reason that I recommend failing open when you can. Failing closed is safer, yes, but it's important to remember that you don't just lose when you do something and it's bad, you also lose every time you don't do something and it would have been good.