Live data from Hacker News

Ask HN: What Have You Learned at Google as a Software Engineer?

news.ycombinator.com

41–50 of 157 posts

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#41
At Google for 9 years, startup before that. Roughly half my time at Google I worked on individual products, and the other half on open source infrastructure (common libraries, compilers, linters, IDE plugins, etc).

The biggest thing I've learned is how software changes over time. Previously I thought of a good program as like a crystal. Write it correctly the first time, and it doesn't need to change much, if at all. Sure you might want to add features or fix bugs, but otherwise you write it once and it's good forever, right?

Most programs are closer to organisms than crystals. They're adapted to specific niche, and when the world changes around them they need to either adapt or die. This is the biggest gap I notice between senior devs and strong junior devs. Junior devs have mostly built things, released them or turned them in for credit, and then moved on. It's rare to find a junior dev that has maintained an app for the long haul, and it accounts for so much of the advice that I found strange when I was junior:

* code is read many more times than it is written

* be very mindful of your dependencies, if push comes to shove you could end up owning them

* commenting why is often more important than commenting how. it's good to comment about both, but it's much more important to comment why. the source code explains how, but it has nothing about why

* it's ok to love your code, but delete it the first chance you get. it will save you and the people around you a lot of time

Do you think I'm overselling things? Maybe that's a problem for people who write code in $cursed_language on $bad_platform but your tools favor writing True and Long Lasting Solutions That Stand the Test of Time!

Let me give a handful of real world examples:

* A major security vulnerability is found in an API that previously seemed safe. Refactor your code not to use it.

* Turning on a certain compiler optimization breaks a pattern common in your code. After some experimentation, you discover an ugly fix that you then need to apply to everywhere in the code that uses that pattern.

* A compiler/browser/hardware update adds support for a feature that your code has been using a bunch of ugly workarounds to cope without. Do you use the new feature? Do you still support running without the feature? Is it a breaking change to users downstream of your code? How much does it improve things, how hard will it be for your users to update, and how many users do you have?

* You need to migrate to the new version of one of your dependencies. Maybe this is just a version bump, maybe you end up needing to review every single line of your app.

* Your app for phones and desktops is working great! We want to run it on TVs as well! This means a brand new (and super weird) matrix of features that are and aren't supported, from hardware to OS to UI.

In short, the only constant is change. Write your code so that you can go away for six months and forget just about everything about it and still be able to maintain it. Lots of tests, document why decisions were made, and it's like Bruce Lee said, be like water.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#42

Everybody comments about how there are all these amazing tools that help your productivity (which is true), but they don't talk about how the opposing force of organizational complexity ultimately results in "just normal" levels of productivity. They don't cancel each other out exactly though, so some things are way easier (spinning up a huge computation), while some things are way harder (making a small change to sh…

I thought the monorepo setup made cross-project dependency changes easy?

Well, it depends. If you have an API with only a few direct usages, you might do it in a single commit. Changing API's that have many usages is difficult to do atomically even if you have a monorepo, due to the difficulty of getting approvals and the risk you'll have to roll it back.

Often it's better to introduce a new function and migrate usages to it across multiple commits.

Either way, it's on you to fix everyone else's code, which is a different mindset from releasing a library and letting downstream users do the migration themselves when they feel like it.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#43

Earlier quoted context omitted.

Yes they do. In all these places except Amazon, the engineering culture is essentially identical. I’ve worked at 2 FAANG companies and a few startups that had a big influx of ex-Google engineers. In fact it’s a whole process that startups go through to copy Google: monorepo + misguided in-house tooling for it, homebrewed canary deployment strategies, naming things “mon” like “altermon” or “datamon”, etc. It’s a very…

The engineering culture among FAANG companies is pretty much the same because of the industry that they operating in and the location of the HQ. Expand that to military or automotive, aerospace, in non-US companies and you might start seeing different engineering cultures.

Engineering culture at Google is vastly different than Amazon. Even Facebook which is more product oriented and iterates faster than focusing on the "right engineering design" first.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#44

I spent 9 years at Google, just left at the end of July. The biggest thing I grew to appreciate was that for iterating large scale production systems, rollout plans are as important as anything else. A very large change may be cost or risk prohibitive to release at once, but with thought you can subdivide the release into easier to rollout and verify subcomponents, you can usually perform the same work as a series of…

(Hi Danny!)

Yeah Google has a lot to teach about building and maintaining reliable systems.

I noticed that a lot of that, including the name SRE, gets cargo-culted by other companies without really understanding what it is.

I also guess that there might be people within Google that don't end up working in projects that invest in reliability (for whatever reason) and so might have had different experience.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#45
post #29
post #25

Earlier quoted context omitted.

What does "promoted" look like for an software engineer at large tech companies? In my company you're either an individual contributor or tech lead. There aren't really any other rungs on the ladder without going to manager.

At Google there’s an IC ladder from level 3 (new grads) to 11 (Jeff and Sanjay). Basically it’s a pay scale. Half of engineers are below 5, and 90% are below 6. Edit: pretty sure I was off by one originally. But you get the idea: it’s a triangular organization with a lot of people at the base.

For pay ranges check out some charts we’ve compiled at http://levels.fyi/charts.html

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#46
post #25

Not Google, but another Big Tech company. Visibility is very important to getting a promotion at a large company. Selling your work is important. To move up, you must be playing the "choose a good project or team" game for at least 6 months before you try to get promoted. Preferably for a year or more to hit the right checkboxes for multiple cycles. If you fail to do so, you can do absolutely amazing work but rigid p…

What does "promoted" look like for an software engineer at large tech companies? In my company you're either an individual contributor or tech lead. There aren't really any other rungs on the ladder without going to manager.

It's very common to have a range of titles like: engineer, senior engineer, principal engineer, senior principal engineer, technical director.

This obviously goes hand in hand with higher pay and increased role and input. In general you might lead others from principal engineer upwards.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#47
post #39

I've been at Google for almost 4 years, mostly working at startups before that. First and foremost, there's nothing special about Google (compared to any other tech company) and it's best not to evangelize any one company. Learning comes from experience, which means trying things (even if you end up making mistakes) and figuring out the shortcomings of a particular solution. I've seen a lot of bad (and a lot of good)…

Regarding API inputs here is what my manager said that's stuck with me. Imagine your API entry points as the surface of the ocean, you've got to keep the garbage out. From then on all internal functions can make reasonable assumptions about the inputs they're getting.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#48

Not Google, but another Big Tech company. Visibility is very important to getting a promotion at a large company. Selling your work is important. To move up, you must be playing the "choose a good project or team" game for at least 6 months before you try to get promoted. Preferably for a year or more to hit the right checkboxes for multiple cycles. If you fail to do so, you can do absolutely amazing work but rigid p…

Personally that sounds like barf ... politics, stress, insecurities, backstabbing, stress, burn out.

I am much happier working in boring government where working hard for family and with mature/secure with themselves (older) adults is paramount & prevalent. Thankfully not an enticing environment for douchebags.

Re: Ask HN: What Have You Learned at Google as a Software Engineer?

#49

Not Google, but another Big Tech company. Visibility is very important to getting a promotion at a large company. Selling your work is important. To move up, you must be playing the "choose a good project or team" game for at least 6 months before you try to get promoted. Preferably for a year or more to hit the right checkboxes for multiple cycles. If you fail to do so, you can do absolutely amazing work but rigid p…

This is all very applicable to Google. I was at Google for 2 years and I got promoted L5 to L6. The key (I think) was working across teams with people who were already L6 or higher, and who were willing to write for my promo packet.

In terms of what I learned? I think the most important lesson was: Don't get bogged down in details that are irrelevant to you & count on others to do their jobs. I came from a small (~15 engineer) company where we all knew the entire product from top to bottom. At Google, that was impossible.

Post reply on HN