Reading an abstract of a talk at Google about cryptography, there are a bunch of interesting parallels with game theory:
We combine several advances in cryptography theory to construct a model of computation in which a third party securely performs computations for a set of parties who do not trust one another. These parties encrypt their inputs to a computation, then circulate the encrypted values. Our third party decrypts them, performs the computation and then issues correctness proofs of the results: we cryptographically “tie its hands” to do the right thing. In addition to this model of provably correct computation, we will discuss other techniques to control the information flow of secret data to and from the party, so even the third party cannot profitably abuse the secret data before or after it knows it during the computation.
I’ve always been interested in computer user interface design. Like economics, it’s an exercise in constrained optimisation. An interface is constrained by the limits of the computer like the 2D screen and mouse + keyboard input. Given these constraints, the challenge is to design the most efficient interface that allows users to do what they want to do.
One of the dimensions in which websites and software compete is the quality of their interface. This is particularly important for websites, where competition is only a click away. The key is to recognise that the interface imposes costs on the user. They don’t pay money to use your website, but they do pay with time. They are not interested in your interface per se, but the content or services on your site. Every extra interface complexity is like charging a slightly higher price to users. Think of it as a per-click cost. Every click imposes cognitive costs on users and makes your site more ‘expensive’. If your rivals have a ‘cheaper’ interface, they’ll attract more customers than you. Fewer clicks = less cost to users = more traffic (everything else equal).
It’s not that people dislike thinking per se. People do like thinking about things like sudoku puzzles or crosswords. A lot of people also genuinely like thinking about their work. People are happy to think about things that are related to an objective that they have. What they don’t like is having to think about things peripheral to the objective, like how a user interface works. It’s like walking along a crowded street. You don’t mind walking, but all the other people getting in your way annoy you, because they’re imposing extra costs on achieving your objective. Badly designed interfaces are like crowded streets.
With this in mind, here is an interesting talk called “Don’t make me click” by Aza Raskin at Google about interface design:
Aza’s company, Humanized, has developed some interesting software, including Enso, which is a simple pop-up command line. To activate it you press the caps lock key and then type in special commands. For example you can type “google xyz” and you’ll be taken to the page of Google search results for xyz. Once you get used to it, it’s quicker than opening a browser and doing a search.
Somewhat unrelated, but rather amazing, is this talk at Google by a 12 year old kid about programming. It’s pretty technical, but this kid is incredible. I mean, he’s talking about programming, to people who work at Google. I think he knows more about programming than I know about economics.
I decided it would be nice to have a personal information management system where I can keep track of web bookmarks and other files in one system. I want to be able to tag resources and also group them by projects. I wanted it to be very simple and efficient to use, something like Google Bookmarks, but with the ability to keep files as well as bookmarks and a few other features.
I looked around for something that would do what I want and found a few things like 37signals Backpack, but nothing seemed to do exactly what I want, and I want to keep my data on my own server rather than someone else’s.
So I decided to roll my own. I’ve spent a bit of time on it now, and am reminded of the two key perils of programming: feature creep and perfectionism. There is always a temptation to add one more cute feature to make the system marginally better (at the expense of complexity). There is also the desire to have everything working perfectly under any kind of conditions. Both of these things make programming projects much bigger than they were initially.
To avoid these perils, I have to keep reminding myself that this is only for my personal use. I don’t want the costs to exceed the benefits …