I tried something new in 2017, which was to make a set of personal OKRs to
fulfill throughout the year. OKRs (Objectives and Key Results) are typically
used as a planning framework by companies (both Google and Twitter implement
them) but I had never tried to structure personal goals in this way. I’m not
sure it’s a general approach I’d recommend for anyone else, but I like the
idea of taking a set of abstract goals and trying deconstruct them into
I respect the effects of small adjustments to habits compounded over time. New
Year resolutions have been effective ways for me to implement such changes. In
2014 I started making one-second-per-day videos (and have done so in
2014, 2015, and 2016 so far!). In 2015 I started
regular Rosetta Stone lessons to learn Mandarin. In 2016 I tracked my weight
and food every day with the intent of losing 30 lbs by the time my daughter was
born. In 2017 I wanted to be healthier, happier, grow intellectually, and
create things. I’m writing this as a postmortem on the process, and an
accounting for how I think it went.
At the start of 2017 I, feeling a little unproductive, defined a set of goals
which I’d try to achieve by the end of the year. It was around this time that
I, feeling a little unhappy in my job, started looking at other places to work.
While I was investigating the culture and history of Stripe (which I ultimately
joined) one very common theme was how voracious of a reader its CEO Patrick
Reflecting on the meager list of books I’d completed in 2016, I realized that
my own reading pace had dwindled over the years. Back when I commuted to
Mountain View from SF, I generally had multiple hours per day to read. That
became maybe 40 minutes each day when I started taking Muni to work downtown.
When Twitter moved its office to within walking distance I basically stopped
entirely, not making up in reading the time I was gaining from a shorter
commute. I missed the depth I felt that I got from reading books and figured
the best way to bring that back was to construct a goal of reading a specific
quantity this year.
The first time I remember hearing the term “hackathon” out loud was when I was
a couple weeks into my employment on Google’s Developer Relations team. I was
trying to figure out what I was going to do to help bootstrap developers for
the nascent OpenSocial project. Patrick Chanezon, the Developer Advocate on
the project, said something like “we’re going to cold call a bunch of social
app authors and hold a hackathon to test out the API” which hadn’t really been
done before—we were helping pave a new path for the company at the time.
That first event was kind of a mess. I remember stalling for time with a room
full of developers since our test server wasn’t booting correctly. An engineer
was hurriedly trying to fix things so that the attendees could get to work.
The premise for Luis Buñuel’s THE EXTERMINATING ANGEL is that a group
of socialites are unable to leave a parlor following a dinner party. This is
about as much as I knew going into it, which was exciting, since the premise
works better that way.
I figure that if you’re going to keep people in a room there’s a few ways it
can go. The most obvious is that the room is literally locked or blocked off
and those folks need to escape it physically. In this case that seemed
unlikely, mostly because the movie is named The Exterminating Angel and that
would be a pretty bad name for a movie about a locked room.
Since starting a new job tends to involve a lot of reflection on the prior one,
I’ve spent some time recently thinking about my
time at Twitter. While there were both good and bad
parts, I generally feel like I had a few great opportunities to participate in
product design and understand how even simple looking products tend to have a
lot of hidden edge cases and adjustments to smooth those over.
I generally use the example of
analytics.twitter.com. Superficially, this
site has a very direct purpose–to show you numbers associated with your
Tweets. But as my team started exploring a landing page which would show
aggregated impressions, we found all sorts of cases which would surprise our
I want to get better at creating art in 2017. At the start of a new year I try
to make resolutions which are attainable by incremental effort over a longer
period of time, so when my friend Buster suggested creating a painting or
drawing every day in January, I eagerly agreed.
Friday, February 24th, 2017 was my 1999th day of employment at Twitter, and my last.
I’ve been a bit nostalgic about this, so I reread my initial thoughts on joining Twitter in 2011 to laugh at how young and naïve I was five and a half years ago. I know that when I first started I didn’t really have a great idea of what people did in fast growing companies. Did they jump around and try to work on the most critical problem at the time? Did they focus on small areas and grow them into large ones?
In May 2016, I was offered the chance to manage the Twitter Dashboard team.
This was my first opportunity to manage engineers and I was very conflicted
about switching over from a SWE to an EM. As a software engineer, you are
generally only responsible for the trajectory of your own career. As an
engineering manager, you have a large potential impact on the careers and even
lives of all the people you manage. Ultimately I decided to take the opportunity
but that I was obligated to do the work to improve my skills to be the best
manager I could be.
I’ve been working on a small interactive iPad experience for my daughter Ada. I wanted to create a world where objects would respond to touch, break apart, and evolve into different forms. She’s limited to a slappy/flailing motion and I wanted the game playable with only these rough moves. Gestures such as pinch-to-zoom or even panning the camera purposefully would not be appropriate. My v1 build therefore added a camera which zoomed to focus the most recently touched item. This worked well with my (more purposeful) testing, but zoomed around crazily once Ada got her hands on it.
Akira Kurosawa’s THRONE OF BLOOD (as I like to think of it, Michael
Macbeth) is a
meticulous, engrossing, and beautiful work. It was created at a time in 1957
where cinema still had a great deal of constraints, but also at a time where
Kurosawa had honed his square-frame black-and-white film technique to
perfection. There are shots in Throne of Blood which I haven’t seen done
with as much skill and artistry in any other film.
This IMDB review of Alejandro
Jodorowsky’s THE HOLY MOUNTAIN says “If you liked ‘The Wall’ (you know, the
Pink Floyd movie), but thought it was a bit of a downer and suffered from the
lack of a fat woman humping an excitable, legless, animatronic horse, this
movie could be for you” which may be a little flip but not entirely wrong
description of what to expect from this film.
Oh boy, SUSPIRIA. A prime example of the “cheesy horror movies so well crafted
that they can be considered art films” genre. I can’t even remember what first
added it to my queue, but I do remember seeing references to it in a crazy 2010
playthough of the SNES game Clock
which led me to the following reasoning:
Clock Tower is an insanely weird, horrific, and beautiful game.
I’ve recently been working on an update to the
twodee library we use for Ludum Dare
games. One (of many) areas I’ll be focusing on is speeding up text rendering.
Text is currently very slow because we have to create and bind a new texture,
render glyphs to it, then draw geometry for each piece of text in a scene.
One simple optimization is to pack frequently-used text into a single texture
which will remove many (expensive) texture binds.
Packing a bunch of rectangles into a texture isn’t the easiest
thing to do well. There’s a whole class of algorithms dealing with this
“bin packing” problem, each with various tradeoffs. Luckily, I found
a very useful paper
covers many of these algorithms (thanks Jukka Jylänki!).
To get a feel for how well each of them perform, I decided to implement a few in
There’s a point early on in Andrei Tarkovsky’s STALKER where the Stalker, the
Professor, and the Writer have snuck past a military blockade, dodged bullets
and ridden a railway work car for a few silent minutes of screen time. The
film switches from sepia to color - they have entered The Zone, a mysterious
alien-touched segment of the world. “We are home” Stalker says. “It is so
quiet out here, it is the quietest place in the world.”
A little while ago I read this great article on the cinematic influences of
the game Kentucky Route Zero, which got me thinking that I should be
expanding my exposure to and ability to talk about film, particularly with
regard to influencing work on Moonshot or other creative projects. So I’m
starting an informal Cinema Club (think Book Club) and hope to write a bit
about the films I watch and what I took away from them.
At some point I overheard Buster (my PM on analytics.twitter.com) raving about
Nassim Nicholas Taleb’s books. I was intrigued without knowing too much and
dove into Black Swan (even though Buster
recommended Antifragile as his favorite) because I wanted to see what the deal
Ludum Dare is a game jam. Every 4 months a weekend is selected and a theme is
announced. Thousands of game developers have the weekend to design, create, and
release games for a competition where there are no official judges and no grand
It’s been the most rewarding creative outlet I’ve ever had.
Twitter, naturally, was a common theme. It’s where I participated in and
documented many of the significant parts of my year. Of course, many of my
friends don’t use or even understand the service, so to them I’ve dropped off
the face of the planet. Inspired by the great
2013.twitter.com retrospective, I thought I’d put
together some of my notable moments into a smörgåsbord for those friends to
I recently had to debug an issue which required a lot of familiarity with HTTP
to debug. There were a lot of random workarounds to the problem (“if I disable
feature X it works”) but only when a developer clearly articulated the exact
problem with the HTTP response was it possible to trace the error to a
consistent reproduction case. The underlying lesson is one I’ve learned at
least a few times now. When working with web APIs there will be times where
things break at a level where you will be completely helpless unless you know
how things work underneath all of the frameworks, toolkits, and client
libraries in your application. So learn HTTP, damn it.
A traditional Estonian Christmas dinner includes roast potatoes, creamed
sauerkraut, cold beet and potato salad, roast pork, and thick cut bacon. But
the centerpiece, while intimidating to newcomers, is undoubtedly the star of
the meal. It’s a dark, savory barley and blood sausage known as
verivorst—my favorite thing to eat in the month of December.
At some point, I’ll walk into some sort of Exploratorium with my child, and
amongst the exhibits will be an opportunity to control a Mars rover over the
internet for a few minutes, and the child will not appreciate how
exhilaratingly wild and astounding that will be.
Racing the Beam is kind of like a biography for the Atari systems and
their unique underlying circuit design. Actually, it’s kind of like one of
those band documentaries where the band is already established so you just
follow them around and see their interactions with common folk. Eventually
there’s some scene where a band member blows up or throws a tantrum and
probably didn’t mean anything at the time but foreshadows the band’s eventual
downfall/breakup and so forth.
I picked up Post Office by Charles Bukowski at Booksmith because one
of the shelves claimed it was hilarious and because I hadn’t read anything
relaxed and just funny in a while. I had heard of Bukowski before but wouldn’t
have been able to tell you anything beyond that he had a hand in writing
Barfly, a movie starring Mickey Rourke which I haven’t gotten around to seeing
embedded content, which are handy for putting Twitter content into your
website. Unfortunately, they break when included in a Chrome extension, due to
the use of protocol-relative URLs. Luckily there’s a way to fix the problem,
although it requires a bit of extra code.
Way back in late 2010 I was lucky enough to visit the remote Google office
containing the office of Vint Cerf. He wasn’t there, and apparently
spends much of his time traveling, but I still felt honored to be able to see
his workspace, knowing that I had the privilege of working in the same company
at one time, the same cheaply printed nametag on his office wall as the one
which used to mark my own cube in Mountain View.
Is there a formal name for the idea that someone is mostly the sum of their
external influences? So much of my day-to-day depends on what movies I’ve
watched, which books I’ve read, and what music I’ve listened to. And that’s
not entirely because the Twitter Developer Relations team is a hodgepodge of
cosmopolitan folks and the references fly fast and furious in our work area,
but because everything is so culturally interconnected nowadays.
When I redesigned this site I made
the decision to remove a post. I felt it did not reflect the level of quality
I wanted here. It was a ranty and vague assertion of an unimportant idea,
relied upon stock images to make a point, and ended in an inflammatory attack
on a unrelated company just to make a joke. You can see the original
source if you want, but I’ve decided to remove it from general
This update has been a long time coming. Sometime around October 2011 I
decided that I would convert this blog to a Bootstrap-based layout, wound up
breaking everything with my build process, and decided that the best way to fix
things was to rewrite Jekyll from scratch, using Go.
It is now December 2012 and this plan has come to fruition.
Since starting my job at Twitter, I’ve spent a lot of time on
dev.twitter.com, either reading documentation or posting on the discussion
group. I’ve also been Tweeting a lot more, and I tend to switch back and forth
a lot throughout the work day. My browsing habits tend to lead to a bunch of
open tabs in Chrome, and I realized that I was losing productivity.
… have met and in many cases exceeded the expectations I had when thinking
about joining the company. Obviously I’m still in the honeymoon period and
things are still moving fast, but the energy and culture of the place have been
inspiring. I’ve found a few things particularly worth gushing over:
During my 4 years at Google, I conducted over 70 interviews. While there were
definite hiring droughts, there were several months where I would have 2-4
interviews a week. Since most interviews are just 45 minutes, an interviewer
has to get a good idea of a person’s abilities in a short time span. Usually
this means that one major mistake can make the difference between a candidate
getting a passing score or a failing score. I’ve certainly had interviews
start off really promising, but go quickly downhill when the candidate made a
few key errors.
Like I’ve said before, I think the news that Go will be supported on App
Engine was my favorite of announcement of I/O this year. I think
this is a huge step in getting broader developer support for Go as
well as giving a comfortable middle ground between Python and Java for
developers who want their App Engine apps to be compact and flexible while
retaining some ability to do static analysis and refactoring.
I’m at Moscone Center in San Francisco this week, as a speaker in this year’s
Google I/O conference. My session is tomorrow (May 11th) and as a
first, I’ll be livestreamed over the internet. If you’re interested in viewing
the session, you should be able to see it here, starting at 10:45am
PDT. We’re bringing a lot of great content, and will try to bring
the funny as well.
Chrome Extensions have been praised as being really easy to write, especially
when compared with writing a Firefox xpi or a plugin for IE. But there’s still
a few concepts that trip up developers regularly. One of these is the isolated
worlds concept, and it leads to a lot of support questions in the
Last year between the time that the Chrome web store
crazied everything up and the holidays shut everything down, I was invited to
give an educational session at Add-on-Con 2010 on the topic of
I’ve been working at Google for about three years now, and was fortunate enough
to transfer onto the Chrome extensions team about a year ago. Mostly, I
support developers working on Chrome extensions, but from time to time I work
on projects for the team to keep my sanity. A good example of this is the
Chrome extensions samples browser. The extension docs are
built and hosted automatically from the Chromium source tree so I
modified the docs build script to generate the gallery and zip each sample into
an easily-downloadable archive.
So upon getting here you may be wondering general questions like “what is
this”, and “why are they making me read this page” and “why is there suffering
in this modern world, what with computers and all”? All excellent questions to
be sure, and I figured I’d devote some space to answering them before getting
to the process of writing down whatever comes to mind while completing my
day-to-day tasks at my nerd job.