When Fitz and I were visiting Google Headquarters in Mountain View last week, we gave a tech-talk to the public… one which we given many times before at conferences. Only this time, it was recorded and posted on Google Video. Enjoy!
When Fitz and I were visiting Google Headquarters in Mountain View last week, we gave a tech-talk to the public… one which we given many times before at conferences. Only this time, it was recorded and posted on Google Video. Enjoy!
My good buddy Ben Gross is researching group dyamics, and asked me if there was a good writeup anywhere of the “Spatula System” that my friends and I have been using to track food credits. We couldn’t find one, so I agreed to briefly blog about how it works.
It all started back in 2000, when I worked in a small office with my friend Karl Fogel — just the two of us. Every day we’d go out to lunch and take turns treating each other. Lunch was always about $10 per person, so on Monday I’d spend $20 for both of us, on Tuesday Karl would spend $20, and we’d keep alternating like that. Eventually it got hard for us to remember whose turn it was to buy lunch each day, so we grabbed a spatula from the office kitchen, and kept it on our desks. Whoever had the spatula on his desk had to buy lunch that day. When we’d return from lunch, we’d simply move the spatula to the other person’s desk.
This worked for a year, but then we got a third person (Mike Pilato) in the office. We started moving the spatula in a circuit around all three desks, and we now spent $30 when it was our turn to treat the group to lunch.
Then we hit a snag.
What happens if somebody doesn’t come to work on a certain day? Does that person simply get away with only spending $20 on lunch? It didn’t seem fair.
So our response was to essentially reinvent the concept of currency. Our currency units were simply called “lunch points”, and each point was worth “about $10”. We started keeping track on a whiteboard of how many imaginary lunch points each person had. We all started at 0 points. If I treated Karl to lunch, then I’d gain 1 lunch point, and Karl would lose a lunch point. My positive currency total (+1) meant that “I was owed a lunch by someone” and Karl’s negative total (-1) meant that “Karl owed a lunch to someone.” If Mike then treated all of us to lunch the next day, he’d gain two lunch points, and Karl and I would each lose a lunch point.
What this currency system gave us was flexibility. It was now perfectly fine for random combinations of people to treat each other to lunch, in any order at all… as long as the points were all tracked. It also allowed us to pass debts around transitively: person A might owe person B a lunch, but person B might owe C a lunch, so in theory then, person A really owes C a lunch. Yikes! Intsead of trying to keep track of these specific debts individually, our currency system automatically allows person B to just ‘drop out’ of the system. Why? Person B starts at 0 points, goes to +1 when he buys lunch for person A, and then loses a point when C buys him a lunch. Voila, person B is back at 0 points, meaning he neither owes — nor is owed — by the community. And there was no need to track who specifically owed who.
So these days, we just keep track of points in a Subversion repository which you can browse. Anytime anyone treats any number of people to food, we check the file. Whotever has the lowest point total (typically negative points) ends up treating the group and gaining a bunch of points back all at once. By following this algorithm, debts tend to get equalized gradually over time. It’s pretty neat. (And of course, running ‘svn log’ gives us a complete history of shifting points!)
To be clear: I don’t think this system is particularly profound. As I already mentioned, we simply reinvented the idea of currency, and found a new appreciation for why it’s such a useful concept. It effectively anonymizes all transactions between people, yet still accurately tracks each person’s contribution to (and reward from) society.
Lots of things!
I spent a lot of time rolling on the floor with my son. That’s good.
I did a bunch of work on a new 2nd Edition of the Subversion Book, which is busy being updated to send off to O’Reilly in the spring. We’re not only updating it to cover Subversion 1.3 and 1.4 features, but doing a pretty big reorganization of the outline and topics as well. We’re also going to put a bunch of “best practices” recommendations into it, which people have been asking for.
I start experimenting with new features on my camera, which I discussed in a previous post. Lots of fun.
I finally finished my wife’s Cookbook Recipe Database, now online at last! It only took me four years and four complete restarts to get it done! First I wrote a bunch of homemade LAMP stuff (my own SQL stuff, my own python object model, my own CGI scripts…), but it turned into a huge mess. Then I tried Zope, but that was too complex for me. Then I tried Plone , which was great, but pretty much overkill. I wasn’t writing a content management system, just a simple web-based database. Finally I discovered Django, which is effectively “Python on Rails”. It was exactly the wheel I had been trying to invent way back in my first attempt! In a matter of an hour or two, I had crafted the whole database in some simple python declarations. Anyway, all the site needs now is some CSS, poor ugly thing.
I supercharged my banjo during the break too. After nine months of playing the one, I finally put new strings on the beast. And while on vacation in North Carolina, I discovered brass fingerpicks in a store (instead of the usual nickel ones)… as well as metal thumbpick, instead of the usual plastic ones. Finally, as a holiday gift I got a torque wrench that allows me to evenly tighten all the screws on my drum head to a precise tension. So between the tightened head, the brass picks, and the new strings, the banjo sounds even better than when I first got it. At last Friday’s jam, someone said it sounded “like a laser beam” from across the room. Woo!