Live data from Hacker News

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

news.ycombinator.com

31–40 of 157 posts

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

#31
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.

Which sucks. Having a technical ladder is important to retain talent and ensure that you maximize the skills your talent pool has.

Pure engineering skills (even the thought leadership aspect of it) doesn't directly translate in management skills and often people get "rewarded" by promoting them to a position where they can no longer use the very skills they have been promoted for.

Related concept / good read: https://en.m.wikipedia.org/wiki/Peter_principle

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

#32
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.

Ah, okay. Pay scale, got it. Yea we have similar. Just no actual titles.

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

#33

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?

Not a googler, but at my company this has not been the case. We use several programming languages and some of the people driven choices (rather than technical necessities) have lead to all the languages being twisted into an odd hybrid of the dependency management style of each other. Things are very complicated to manage and some teams are trying to leave their current and best known language for a language with internal champions/leaders that are louder, more opinionated, and better positioned politically. A lot of this is due to a lack of wide familiarity with intermediate git skills and a fear of learning the tool. So many of our solutions to this problem are to automate things under the rug, which is why every language ends up being handled generically using medium grade internal tooling instead of best of class industry standard tooling. Most of these issues can be boiled down to an avoidance of pain rather than a championing of the best technical choice.

Ultimately no decrease in dependencies have been made. Projects are barely bundled together any more than before. The only thing that’s made that possible has been Docker and Docker Compose, and our monorepo strategy makes it more difficult to build images due to its size and our topical file systen layout making it almost impossible to check out only the parts of the repo you need.

The monorepo itself may be a good idea but it’s no silver bullet. I’d say it’s one of the worst choices we’ve made due to the cultural impact it’s had. In our case I think we’d be better off with small monolithic repos due to a lack of proper training around how to manage either many small repos or a large monorepo.

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

#34

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…

[deleted]

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

#35
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.

Check out levels.fyi to get an idea per company. At Google, we have "standardized" levels starting at L3 to L10, each with their own compensation range. Google allows you to climb this ladder while remaining an IC. Going to manager has a different progression and it's not an expectation.

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

#36

Google showed me the fine engineering at large scale. And the key is the people as they are behind everything. That’s why I changed my view on who was the key person for google success. I used to believe Larry and Sergei, then urs, now I put on Laszlo Bock.

honorable mention: Guidooo!

Really? One thing I learned at Google is that even having Guido on staff can’t make Python work.

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

#37

Google showed me the fine engineering at large scale. And the key is the people as they are behind everything. That’s why I changed my view on who was the key person for google success. I used to believe Larry and Sergei, then urs, now I put on Laszlo Bock.

Can you share more details? What advice would you give to people to engineer things at scale?

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

#38
post #32
post #29

Earlier quoted context omitted.

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.

Ah, okay. Pay scale, got it. Yea we have similar. Just no actual titles.

It's not just about pay, it's also about scope and expectations.

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

#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) code at Google.

What I learned, design-wise, came from a coworker. They planned everything out in advance and would draw out components on a whiteboard and define what they'd do. A few weeks would pass before they'd write any code. In contrast, I would start with writing skeleton classes and intuit the breakpoints for building a new class. We ended up with similar code structure at the end of the day, since we were both designing the architecture (even if our methods were different). But in code reviews, I would focus on if the new code made sense within the scope of the change; are there any clear bugs, code duplication, is there a more simple approach, etc. My coworker always went back to the whiteboard and drew up the components again, making sure the new code fit within the originally defined scope or if a larger change would make more sense. Because my skeleton classes were quickly replaced with implementations, I lost my original frame of reference and only focused on what was in front of me. I could still tell when something was obviously wrong (stop sending me CLs with global state to cross talk between components!), but there was creep in the CLs I approved and the code would slowly get more complicated until I realized it needed to be refactored.

There's a tradeoff (like in anything). You can't design your own solution for every code review, as it takes too much time and removes autonomy from your peers. But remembering to step back and look at the big picture was something I needed.

There were other things I learned, like structuring code in ways that it's hard to write bugs. For example, you could write a method like...

  void foo(Callback callback) {
    if (error1) {
      callback.onError();
      return;
    }
    if (error2) {
      callback.onError();
      return;
    }
    if (error3) {
      callback.onError();
      return;
    }

    doWork();
    callback.onSuccess();
  }
but it's easy to forget to call 'callback.onError()' in a future CL. A small refactor, like...

  void foo(Callback callback) {
    if (bar()) {
      callback.onSuccess();
    } else {
      callback.onError();
    }
  }

  boolean bar() {
    if (error1) {
      return false;
    }
    if (error2) {
      return false;
    }
    if (error3) {
      return false;
    }

    doWork();
    return true;
  }
has the compiler help you catch mistakes. Unit tests obviously help too, but doing both reduces the number of bugs that slip through. Similar tricks include annotating methods as @Nullable so you don't forget to nullcheck, annotating which thread is calling a method (eg. @FooManagerThread, @UiThread, etc), and doing all the if checks as close to the top of a method as possible so that you only do work if you're in a good state.

Oh, and here's one last tip that I only realized needs to be reiterated because most of my coworkers forget it. Validate incoming data! Every API needs a wrapper around the entry point that...

  * Verifies the caller is allowed to call that method
  * Verifies the method can be called at this point in time (eg. hackerNewsApi.postComment(threadId, msg) only works if the threadId is valid)
  * Verifies that the arguments make sense (eg. 'msg' is not empty/null/above the max comment size).
And this is needed at every layer (application, server, etc). Trust no one, even if the only caller is supposed to be yourself.

Glossary: CL = changelist ~= pull request

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

#40

Other than having “Google” on my resume there is nothing special or applicable outside of Google. Most tools are internal, isolated and the choices are restrictive. Management is shitty - micro-management is in full bloom, display lack of management knowledge, skills and there’s plenty of abuse of power. They don’t show their appreciation to what we do. All developers are very competitive. My entire time of over a ye…

We’re you a TVC or a full time employee?
Post reply on HN