AMA with

Alex Russell

Web Platform at Google, Working on Chrome and Blink, ECMA TC39 member and W3C Technical Architecture Group

January 22nd 2018, 6:00 pm

Ask me about:

  • Chrome
  • Working at Google
  • TC39
  • ECMAScript
  • Blink
  • Web Platform at Google
  • Contributing to OSS
  • And more…

Elsewhere:

Shout out

Tweet

This AMA session is over but you can still ask questions to Alex Russell on their Hashnode profile.

Hi Alex,

What's your opinion on today's value of a computer science degree? If I want to work for a company like Google is it required?

Thanks

Raymond

I'm one of the few people at Google I know who doesn't have a degree of any kind, and for a lot of years that was hard.

One of the things I've come to value over the years is the ability to pierce abstractions (in both directions). The best engineers make the smallest cuts for the biggest impact, and they can do that because they can "see" more of the system. I'm not sure you need a degree (I'm proof that Google hires folks without them), but you do need to be able to wrangle with complexity above and below your "layer". Living your whole career in JavaScript or Java without ever diving down to the layers below will be limiting no matter where you chose to work.

Obligatory: Would you rather fight 1 horse-sized duck or 100 duck-sized horses?

100 duck-sized horses, for sure. I probably wouldn't beat them all, but at least I'd be able to get partial credit.

  • What are a few things you do to manage your time?

  • What are some things that contributed to your success?

  • What are a few of your favorite functions that you wrote that contribute to your workflow? ( maybe a bash function or a script that opens your entire work environment)

I manage my time by acknowledging that I only get 8-10 hours to work in a day. My younger self worked constantly and it was a terrible idea. I did worse work, slowly, and had less impact because I didn't give myself the constraints that gave me perspective. Setting hard limits on work time is something Frances Berriman taught me, and I'm forever grateful for it.

To the extent that I'm successful, it has been luck and perseverance (in that order). Anyone who is even moderately successful and thinks "hard work" got them there is delusional. Nearly everyone works hard...it doesn't distinguish you. What distinguishes you is random chance falling your way. In my case that was parents who had computers & were supportive; also being born white, male, middle-class, and in a family that valued education. Yes, it's important to take the chances you get, but in general I view "how to succeed" stories and advice through the lens of survivorship bias -- and from there, it mostly looks like bunk.

The things I helped develop that contribute most meaningfully to my workflow on the web...um, probably ES6 Classes, Promises, async/await, and Custom Elements.

What's your opinion on Firefox Quantum? Have you tried it? Does Google Chrome see it as a threat?

Have been following Quantum development occasionally and use Firefox regularly, so it's been great (as a user) to see those improvements rolling in. I can say that the Chrome team has been studying the performance of FF Quantum and we're particularly impressed with their improvements in the style engine (the thing that turns CSS into styled elements in the page).

Quantum (and other systems like it) are premised on the notion that there's a lot of parallelism available on modern hardware that our software doesn't use. We've been busy parallelizing parts of Chrome for a few years now (GPU Rasterization was a big improvement in this area), but it has been incremental (rather than a "big-bang" release like Quantum).

There's a big open question in browser and systems design, particularly as regards mobile: do we actually have more cores? If you're moving from a world where the GPU is mostly idle and you're making web pages live on a single CPU core to get everything done, then the answer is very obviously "yes"...but that isn't where Chrome is today. In most of our traces from busy Android devices, we see the OS de-scheduling work (meaning that there are lots of threads and processes contending for the same cores). In some cases, we've even removed parallelism to speed things up. All browser vendors are looking hard at this problem and trying to optimize as best they can.

In terms of competition, I can speak for the whole Chrome team when I say that we think a healthy, vibrant, competitive browser ecosystem with lots of great choices is best for users and for us. We're excited to see FF improve and will keep working to improve our engine. Competition really does deliver outstanding results when it's allowed to work.

What does your average working day look like?

Tried to answer parts of this in another question, but it varies quite a lot -- but safe to say that if I'm at work, I'm in a meeting. Early meetings from home, then commute, then more meetings, then hopefully some make-time (but mostly meetings), and finally commute home by 6 or 6:30.

These days, most of my creative work happens in design documents, github design reviews. That said, there's nothing I like better than a day I can "steal" to go try a new approach, scratch a code itch, or help a partner improve the performance of their site.

What are your thoughts on transpilers and new JavaScript language features that have not yet landed in all browsers being treated as the "industry standard" way to write JavaScript?

I feel some guilt about the current state of affairs. A team I led ("Parkour") built an early (the first?) ES.next -> ES.now transpiler -- "Traceur" -- in the ES6 timeframe...so to some extent, we started this fire.

And it is on fire. I see so many traces where the combination of Babel transpilation overhead and poor WebPack foo totally sink the performance of a site.

I'm happy that babel-present-env is now the norm, but I'm sad that we're still playing this game. To some degree I think it would be prudent for most developers to make a hard cut: only support browsers that support ES6 natively and give other users the progressively-enhanced experience (which you were doing, right?). Transpilers should fade away, not get more central to our workflows.

I less kind thoughts for proprietary, non-standards-track forks of HTML and JS (e.g., JSX), but will keep them to myself = )

Hey Alex, what do you think about Safari/Webkit and how it lags behind Firefox, Chrome and (even) Edge? Has Apple lost its interest in Webkit?

Apple staffs the WebKit team at a much lower level than other browser engine teams (which is not a critique of the engineers on the team; to a person they're brilliant!) It has gotten so bad that we're starting to re-invest in fixing some of the worst compatibility issues in WebKit...which, as you can imagine, is not where we'd like to be spending our limited resources.

It's hard to say what the intent is, but the effect of Apple's decisions haven't been great for us as a community.

Hi Alex, Do you still think Progress web apps are the future of mobile apps in 2018? Why and why not?

"still" is an interesting frame.

PWAs are really about quality. The add-to-homescreen banner is about the browser going "hey, this looks modern and meets our quality bar, let's tell the user it would work as an app". That sort of quality differentiation is very much the future of the web -- particularly on mobile.

MOST websites are terrible on the average mobile phone on the average mobile network. We absolutely need to get better at helping users discover the ones that aren't and direct their attention away from unusably slow content. To the extent that PWAs are a part of that, yes, I think they're going to be part of the answer.

As for apps, that's a long game. Who knows what'll happen there. What I can say for sure is that the effects we wrote up here are very much still playing out; the brands turning to PWAs are only getting bigger: https://medium.com/dev-channel/why-are-app-install-banners-still-a-thing-18f3952d349a

What techincal skills one should have to work in google?

Understanding of systems, networks, and CS basics. Beyond that, we're a technology company. Getting things done means writing code and collaborating in big teams. So being able to write good code, take feedback well, and work with others to improve theirs (without being a tool about it) matters a great deal.

Hey alex! My friend (who's just getting started with coding) just asked me : What is Blink?

What should I answer?

"Blink is the web engine at the core of Chrome. It's what turns HTML/JS/CSS into web pages you can interact with"

There's a proposal for ES, https://github.com/tc39/proposal-class-fields, to use the octothorp (#) to denote a private member of a "class". They say that using the already "private" reserved keyword wouldn't work for making a property truly private and using the octothorp ensures that it's scoped in a way that it's not accessible to the outside world. What's your opinion of this?

There aren't many sigil's left, so spending one on this has a high hurdle to clear.

As usual, I'd like to see what larger code samples using this (and competing syntax) would look like. When we designed various Class features, stretching the feature's legs with transpilers taught us a lot about which tradeoffs felt good in the long run.

Maybe I'm biased because of other languages that use the semantically correct 'private' keyword, but that's because how they create scopes for classes. Would you rather see the traditional 'private' keyword used? Do you think it's possible to use lexical scoping to define a private property without having to use the octothorp, kind of like how PHP or Java have private variables?

The arguments I've seen is how to differentiate between something that's a private and public, using the octothorp enforces that it's not accessible outside of that object. There's an extensive conversation about it here: https://github.com/tc39/proposal-class-fields/issues/56

Milk first or Tea first ? Jam on top or Cream on top?

Tea first. Jam on top.

Hi Alex! 👋

I would love to know your workflow. How do you manage to contribute to OSS, participate in events and also work at Google? What is your typical day like at work?

"Workflow" sure sounds grandiose!

Truth be told, I do less OSS these days that I think folks would assume. Most of my work day is taken up by meetings, and there's enough stuff rolling in on different fronts that I now explicitly try to have folks schedule time to chat when there's something important to do or work out.

Travel is a huge part of the job. Between standards, conferences, and the worldwide distribution of the Chrome team, I'm probably on the road one week a month. Making that work has mostly been about lowering expectations: when you're congenitally slow to respond to email, people start taking your advice to schedule time on your calendar ;-)

When I'm in the Bay Area (home), my day starts about 8:30am (meetings with Europe/US East Cost). I usually take the early ones from home then go into the office. I do meetings, email, and fire-fighting (chat/slack) through lunch (I tend to eat at my desk while working). Afternoons are a mix. On light meeting days (monday/friday), I try to set aside make-time for performance work, writing design docs, and coding.

I'm out of the office and shutting work out of my life by 6-6:30pm. I used to be terrible at this, but putting limits on the time I'm thinking about work has made me realize how much I need the people around me (and has transformed my attitude towards them). Nobody does anything important alone, and acknowledging that you're part of a team means taking care of yourself enough such that you're there for the team when they need you...so go home. Play some video games. Do anything but work when you're not "working".

If you could make an API land in all browsers right now, what would it be?

Animation Worklet. Touch-driven UI is too hard on the web today, and we fail to compete with native experiences as a result. Animation Worklet largely gets us where we want to go (in combination with lots of other improvements).

How will webassembly affect JavaScript and the web in general?

In general, it won't. WASM is likely to open up use-cases that weren't possible on the web before, however (CAD, some games use-cases, scientific computing, etc.).

HI Alex, How do you see the scope of Front End Developers in the coming years? Since there are many libraries, frameworks etc out there for javascript, what would you advice a person who wants to make a career as Front End Developer?

Taking that in reverse order, my advice is to learn the basics. Build some stuff without frameworks or libraries and get in touch with the platform below you. That background will always be valuable. It'll let you weigh frameworks and tradeoffs much more effectively, and will allow you to "punch out" when you realize you need to.

I'm excited that Web Components are (finally!) bringing web development up the stack a bit. There's going to be a fascinating world of interop and modern-assumption-only web development in the next few years. Rob Dodson's Web Components Everywhere gives you a flavour for that

If you get an opportunity to build a new blog in 2018, which tech stack you will use and why? How will you start?

Fascinating question! It's something I've been thinking about for a while. Now that we've got Streams and Service Workers in the platform, there are opportunities for super-high-performance content site, but they require some collaboration between the templates the server uses and what the client understands.

I've been impressed with Surma's work on WordPress PWA templates

The thing that seems to be missing from most content-oriented PWAs is a way to sync sections for offline reading, so starting from something static-site oriented might be my approach.

Hey Alex,

I was thinking what thoughts do you have about multithreading in javascript applications and should the developers gain a more direct access besides workers to it?

The next question would be do you think that we should finally introduce a standardized crypto engine to the javascript core?

And is there a specific reason why you guys picked a generational stop the world GC implementation in your engine?

Multithreading isn't ever really about the language, it's about the libraries. For JS, that's DOM. SharedArrayBuffer + atomics get us mutable shared memory for some applications, but that doesn't make the rest of the DOM or object model instantly threadable.

It does, however, open up threading as part of our design language. For instance, a few years back, we had a big design argument about some details of Web Audio. There was an incidental part of the design that happened to expose mutable shared memory between threads. Because JS had no way to "explain" that, it had to go. Now that we have SAB (once Spectre mitigations are in place, that is), we'll be able to address those lower-latency use-cases in a coherent way. That's pretty exciting, particularly for VR and AR which need peak performance.

What’s your very best word?

My superlative utterance? "Counterfactual", indubitably.

Hi Alex, thanks for doing this AMA! How do you see the future of Javascript? And will WebAssembly pose a danger to the language's popularity?

WASM is best thought of as a Math Co-Processor for web content. You have to structure your program in a new (not easy to approach) way, but for certain workloads it can be transformative.

I think people will try WASM for many, many things. Some of them will pan out. I'm particularly excited about the potential for moving new classes of applications that were perviously compute-bound in JS to the web; e.g.: CAD, many types of games, scientific computing, etc.

As for JS, it's going to continue to be used for basically all UI development for as far as I can see. There will be exceptions, but I don't think it's going anywhere.

Why can't programmers program? 🤔

Program what? And who's giving out "programmer" badges? There's tons of stuff I can't program and there are many reasons, but they mostly come down to motivation and opportunity.

Hello What is the software/tools/libraries that you like and use often ?

How do you see HTML/CSS evolving over the next 5 years? As we move from 2d into 3d, (AR/VR) in order for the web to remain relevant I predict we will need new declarative abstractions for creating UIs (similar to AFrame). Do you think blink will ever support rendering to a WebGL texture?

What is that one thing that you would like to tell people, which you haven't told before?

What is your opinion on http://ampletter.org/ ?

I know, and respect, many of the authors. As a W3C TAG member, I helped write our Distributed and Syndicated Content Finding (see also the blog post), so some of the points raised there are things I care a great deal about.

Specifically, I think it's important for federation not to break origins and URLs. Apple and Facebook do this implicitly with their news products, which stinks. AMP has too, but they've stayed cloer to the web. I'm hugely excited to see their commitment to the emerging Web Packaging spec to heal the URL problem: https://amphtml.wordpress.com/2018/01/09/improving-urls-for-amp-pages/

I'm also excited by the changes that Search announced regarding page speed as a ranking signal

Taken together, I think those get us a lot closer to the world we want to be in: faster first-party content delivering better experiences to users.

Why does google dont have any call or chat support for their products?

This is starting to change. The support lines for our more recent hardware offerings are pretty good (we had cause to use them for Frances' Pixel having issues).

Historically, I'd say "optimism". The hope has been that we can learn at scale what problems people have and their solutions, automating answers along the way. Even if it didn't pan out 100%, I still like the dream; talking to another human in a support capacity (and thereby imposing myself and my needs on them) is pretty much my least favourite thing.

if i have multiple tabs opened in multiple windows ...is there any way to merge back and disperse too

Yep! You can drag tabs between windows. For windows with only one tab, create a second, and you'll be able to rip off the first and place it wherever you like. I know folks that have keystrokes set up for this (with extensions, I think?), but I don't do it often enough to bother (or have learned them).

What are the few things according to you one should never say to a Googler? 😄

IDK, I mean, we're human. So maybe don't treat fellow humans badly and it'll all be cool?

  • If you could start over, what steps would you take to get where you are today? (Most efficient way to get to where you are today)

Nothing about my journey through life has been "efficient"...but I honestly have no idea how I'd have gotten where I am if I hadn't done the same set of things I've done.

I can pretty easily reflect on places where I'd wish I'd learned faster, but that's perhaps different.

In terms of big perspective shifts, I think the questioning I did in my mid-20's (anchored on the question "is what I do for a living good?") could have been done earlier. I left religion, along with many other beliefs, as a result of pulling on that thread and I think I could have done that in my late teens instead. It would have saved me (and a lot of other people) a lot of pain.

Which is your 2nd favourite browser (apart from chrome) and why?

Hard to chose! On desktop I love what Opera Neon was exploring for navigation. Haven't used Brave much, but I'm glad they ditched Electron for something more secure; blocking tracking content and replacing it with an alternative way to monetize seems like a good step forward (although I'm not sure about their mechanism).

On mobile, Samsung Internet has been pushing a bunch of things forward that I really love (desktop PWAs via DeX, e.g.).

Did you have a chance to work with the V8 engine? Would love to hear your experience with it, if yes. :)

I've not work on V8 directly, but I've been a consumer of it's API.

V8 is an incredible piece of engineering. What's perhaps most inspiring to me is how it has radically changed internally in the ~10 years since the project started without breaking the world. I'm particularly impressed with how the current team has continued to improve real-world performance with Turbo Fan and better GC without overly burdening consumers of the API (like Chrome).

Another question; what are the most pressing issues the JS community and the TC39 should address in your opinion? Thanks

The single most pressing issue for the JS community is the near-universally poor performance of web apps built with popular frameworks and approaches. We've been working on this problem for a few years, and it seems most developers aren't even testing their code on real-world devices. This led to us write up some of our findings

TC39 can help out by giving us more opportunities to get work off the main thread. An async version of JSON.parse() would go a long way, e.g.

What's your favorite part of JavaScript?

The fact that it's everywhere. As a language, it definitely needs improvement. That's perhaps the odd thing about TC39 members: you don't deal with that sort of pain unless there's something you really think is broken.

How do I get to work with groups like TC39 or W3C? Seems pretty exclusive...

Standards bodies have historically been "exclusive" for all the wrong reasons -- mostly to do with anti-trust law and intellectual property licensing. Part of my work on Chrome has been to lead our standards efforts over the past few years (along with Chris Wilson and Shruthi Sreekanta), and as part of that we've been intently focused on moving design work out of standards committees.

A bug in our collective understanding of standards is that progress "comes from" the W3C or IETF or ECMA ("Standards Development Organizations", or "SDOs"). It's pretty much the opposite: those organizations function as amplifiers. Committees they host might round off sharp edges of existing designs, but it's the participants (from companies or organisations with successful products) that bring the designs and do the design work -- and most of that design work happens outside of the committee.

If it was just a simple misunderstanding, that'd be one thing, but the persistent misconception about where progress comes from creates some large, related problems:

  • Once people begin to think that progress happens in committee, people do try to do design work there (ugghhhhh), and sometimes the legitimate political pressure to "become standards compliant" even leads products to implement bad designs
  • Because of the legal concerns that give rise to SDOs, the participants in committees are often the wrong group to do design...often wildly so

So the key insight is that we need to separate standardizing an existing solution from designing a new solution to a problem.

This has led to similar processes being put in place across the various forums where we do work. At TC39, this is the Stages process. At W3C/WHATWG, we're now using the Web Incubation Community Group to do design in the open. We're also looking to do design-via-incubation in all the other standards fora we participate in. A common feature amongst these processes is that they're much lighter weight. Anyone (roughly) can participate, and I'd encourage you to check out the various WICG proposals to get involved. That's not an answer about how to get involved at W3C/TC39, but hopefully it answers a related question: "how can I make a difference in the future of the web's evolution without working at Google/Apple/MSFT/etc.?"

There's a last consideration that this brings up: standards work takes money. Even if it's just time, that still takes money, but often it's more than that: travel, SDO membership fees, etc. Travel is frequently necessary for design work, even if it happens in a lighter-weight incubation forum. I don't have any great answers here. Face-to-face time is important. It does yield higher-bandwidth collaboration, and that does mean that folks who can afford to travel to do this work have an advantage. It isn't possible to level this playing field entirely, but I can say that here on the Chrome Standards Team we're aware of the problem. Our best solution thus far has been a willingness to use Google's considerable resources to travel and host meetings closer to those who can't do so as easily.

I care deeply about inclusion in the Standards process, so if you've got other ideas about how we can do better here, I'd love to hear them. Please don't hesitate to reach out. My DMs are open!

What's the current status of Blink and where do you see it in next 2 years?

How does open source approval process work at Google? Can you come up with any OSS idea and publish from the Google's team repository?

There's a structured process for starting new Open Source projects and/or making existing work OSS. That does involve a proposal and review, so it's not "throw anything you like out of the pram".

For most code developed inside our primary code repository, lots of changes are needed to make things build/deploy in a "regular" environment anyway, so the additional overhead isn't that noticeable given the scale of the work to convert/adapt.

Hi Alex, What's the best and worst part about being at Google?

The best part is the calibre of the people I get to work with. It's incredible to work in a place where, in every conversation or meeting, you can count on the people around you to individually and collectively be expert -- and I don't mean in the sense of self-proclaimed "thought leader" expertise, I mean the legitimate kind that's humble in the face of the the enormity of what one person can never learn. That's common at Google -- in all job roles -- and it's incredible.

The worst part? It's a big company. Big companies are worlds unto themselves and getting important things done is orders of magnitude more effort than it seems from the outside. But the pay's good, so it's hard to complain = )

The cover photo used in this AMA has been taken from this source.