Work inspiration with Alex Russell

Generic placeholder image

Alex Russell

Software engineer at Google Chrome team
@slightlylateinfrequently.org

I'm Alex Russell. I live and work in San Francisco. I'm an engineer on the Chrome team; specifically I work on Blink, the is engine that implements HTML and CSS.

"What do I do" is harder to answer. I'm one of the "Tech Leads" for a project inside the Chrome Team called Fizz (named after the gin cocktail). I serve on ECMA TC39 (the standards committee for JavaScript) and have been elected to serve on the W3C Technical Architecture Group. I've recently become responsible for all standards engagement for the Chrome Team (aka "Standards Tech Lead"). Previously I worked on Google Chrome Frame and helped lead the team that designed and developed Web Components

Google (wisely) separates technical leadership (deciding what and how to build) from people management. Some people do both, but that's more rare. I'm unabashedly technical; my goal is to help us figure out what to improve about the web as a platform and work through the details of how to make that happen, both through the standards process and from an API design perspective.

In a social setting, I just say "I develop new features for the web". It's easier.

How did you get started in development? What is your background?

My father is a mechanical engineer ("a real engineer") and growing up he always had computers in the house and was constantly upgrading them, customizing, and building networks, so I sort of got interested through his enthusiasm. We never had game consoles, but there were always computers. I didn't start programming for real until High School; we had a CS class that taught Pascal and K&R C on an ancient time-sharing SVR4 Unix box. We only had the command line (CSH), Vi (not Vim), and the compilers. Teacher was a mean-spirited sort, but I loved the challenge. The summer before my Junior year, I visited Purdue for a summer program for potential engineering students and they let us stay in the dorms and had exercises about making web pages. At that point I already knew some Unix (thanks to the high school classes) and I was hooked on HTML as soon as I realized how quickly you could change things. It was the first GUI I ever programmed. I learned JavaScript the next year, about the same time I started learning C++ and Java. 

While in University I spent a lot more time than I should have continuing to poke at JavaScript. Some of my best friends today are still folks I met online from back then on (the now defunct) DHTMLCentral.com. I didn't do well academically and dropped out after my 3rd year. Went to work in network and web app security which I enjoyed immensely, but JavaScript kept calling. I kept building libraries on the side and eventually that turned into people offering me jobs to do my hobby for a living.

I joined Google to work on Chrome Frame after several years at startups where I had worked on the Dojo project full time. It was a shock to come back to C++ after so long. I'm glad I left my comfort zone.

What are you working on now?

When I see something the web can't do, I ask "why?"

This led to Service Workers ("why can't the web do offline well?") and more recently, Add-to-Homescreen apps and Push Notifications ("why can't web apps be a first-class citizens of the OS?"). There are a lot more whys to get to the bottom of.

Right this minute, though, I'm working on improving the stuff we just shipped. The Push Notifications and Add-to-Homescreen apps don't yet do all the things that their native counterparts can, so I'm working with others on improvements there.

I'm also focusing on finding ways to make the standards process more evidence-driven and, hopefully as a result, faster. Today, browser folks spend a lot of time guessing about what web developers might want. Worse, you see speculation in standards meetings where someone comes with data about what developers do want and then get shouted down because the bias of the committees isn't to honor evidence. We must do better. This is the big problem we need to solve and, to get there, we need to find ways to run more and better experiments about new APIs in a way that doesn't create premature "burn-in" for features that aren't yet standardized. It's a complicated problem space, but I'm hopeful that we'll make progress on it this year.

In my spare time, I'm continuing to improve Cassowary.js. The Overconstrained.io and GSS communities are great and it's always satisfying to be able to use what I've learned about the internals of the platform to make something useful go faster.

What software do you use for your work?

I'm using SublimeText as my editor. It's portable to most of the OSes I use daily (Mac, Linux, Win, but not CrOS) and the Vintage mode is the first Vim emulation that has supported enough of the obscure commands that are burned into my ape brain to let me continue to be productive after switching. 

My toolchain for working on Chrome is pretty pedestrian: whatever the local compiler is, Goma (because I can), and Ninja+clang. On Windows, I'm still addicted to WinDbg. It is the best native code debugger I've ever seen or used, for any platform, ever. GDB and LLDB's lack of sane multi-process debugging makes working on Chrome on Linux and OS X so painful.

In terms of end-user work (e.g., for cassowary.js), IRHydra^2 is amazing. A lot of the smarts from it are coming to Chrome's DevTools soon, which will be incredible. Optimising JS is hard, and a lot of it comes down to avoiding certain patterns that the runtimes can't make fast. Tools that show where slowness is coming from are manna from heaven: DevTools, about:tracing, IRHydra^2; these are the things that let us hit the mark:

  • Respond to input in 100ms
  • Animate your content in 6ms
  • Idle cleanup work should happen in 50ms chunks 
  • Load in less than 1 second (1000ms)

This is Paul Irish's formulation of something the Chrome team has been trying to enable for the past year. The tools make it possible. 

And what hardware?

I've tried to unify my office work environment with my home office setup. They've both got 4K monitors which I can drive from most of my laptops (the Pixel 2 is amazing! doesn't need discrete graphics to pull it off) and all my monitors and displays are high-density ("retina"). I've worked hard to enter the post-visible-pixel world and I'm not looking back. It's amazing.

Desktop:

  • HP Z620 (16-core i7, 64gb ram, 2 HDs) running Linux; headless
    • This is the workhorse build/test box; also has Android development setup

Laptop(s): 

  • Late 2014 MacbookPro (4-core i7, 16gb ram, discrete video to drive 4k)
  • Chromebook Pixel and Pixel 2 (which I'm writing this on; Best. Screen. Evar)

Peripherals:

  • Adjustable standing desk
    • At work, have whatever they issue and for the home office, have a NextDesk Solo Plus (great for a smaller space)
  • HM Mirra 2 chair
    • Life is too short for back pain
  • Dell Z27s 4k/60hz monitor
  • Goldtouch split ergonomic keyboard and a Microsoft Natural Elite keyboard (with the USB add-on)
    • Considering moving the new Microsoft Sculpt. It feels great.
  • Microsoft Optical Mouse (the old kind); I'm a lefty
  • Bose qc20 noise cancelling in-ear headphones
    • The only effective defense against Google's insistence on open-plan offices
  • HooToo HT-UH010 USB 3.0 hub
  • DroboMini (all SSD) for personal photos, local backup, etc.
  • ALL the VMWare VMs
    • Had a physical Windows machine a few years back, and I can't speak highly enough of Hyper-V. It's so good.
  • Many Android devices for development/testing

What is your ideal work environment?

This is a hard one. I need some stimulation and I'm frequently away from my desk during the day, but when I get to my desk, I want things the way they're "supposed to be". That means an ability to remove distractions. A cup of good coffee, some chill music, and a full to-do list are how I work best. The rest of the setup (huge monitor to fill field of view, aggressive virtual-desktop + Chrome Profile use, noise-cancelling headphones) is all there to support it.

Who are the developers you admire most?

My talented and patient wife Frances is, of course, at the top of the list. I frequently reflect on the fact that, while I'm doing "important" things (whatever that means), she's doing good things with her technical skills. Her work as Front-End Lead at the UK's Government Digital Service and more recently as Head of Design at Code for America are inspiring; her work positively impacts the immediate lives of real people. I can only hope that the more diffuse work I do can add up to something as good in the long run.

I'm also in awe of Jake Archibald, who I've worked closely with on the Service Worker design. His ability to translate difficult technical challenges into solutions and then make them funny is something I fear I'll never be able to do. I always learn something when I see Mathias Bynens talk. Mike Bostock is a genius; his conceptual integrity in his work is astonishing. Sara Soueidan does things with SVG that make me nearly choke on my coffee an Lea Verou does the same with CSS. I have infinite time for people that make browsers do things "they aren't supposed to do". They're my heros for questioning "the right way" and emerging on the other side with something beautiful; convention and norms be damned.

Inside Google there are a host of people I look up to (mostly on the Chrome team) that you might not hear of: Slava, Erik Arvidsson, Emil Eklund, Adrienne Porter Felt, Ryan Sleevi, Rick Byers, Kinuko Yasuda, Tamura Kent, Evan Martin, Elliot Sprehn, Ananta Iyengar, Carlos Pizano

Oh no! I forgot Adam Langley, Kentaro Hara, and Jochen Eisinger! Can you add them into the list before you publish?

...I guess I should stop at some point, huh? I think the reason I'm still at Google 6 years later is folks like them. It's a privilege to get to work with them. It also feels so unfair that I can't list the amazing PMs, designers, and managers. You don't get an excellent product without every cylinder firing on time, every time. The Chrome team is a special place.