It’s amazing to look back over the past seven years. When I first stared this blog, I was a CS student at UT. 99 blog posts later, I’m a software engineer and tech lead at Google. I don’t have everything figured out, but I love showing people earlier in their career how to advance even farther.
Since this is my 100th blog post, here are 100 things I’ve learned while working as a software engineer at Google.
Doing Interviews
- No one has the exact set of skills listed in the job posting. The hiring manager is forced to go with the best candidate that shows up.
- The interviewer wants you to do well.
- The worst interviews are when the candidate struggles hard and can’t make progress.
- The best interviews are when the candidate performs exceptionally well.
- The hardest interviews are when the candidate is a borderline case, and you lean towards rejecting them.
- Structured interviews are necessary, but not sufficient, to remove bias from the process.
- Crafting good interview questions is hard.
Coding
- Code reviews are magic. I’ve learned so much from my code being reviewed.
- Small code changes are better than large ones.
- Lines of code written is not a good metric. You might as well judge an airplane by how much it weighs.
- Dependency injection is magical. Sometimes it is scary.
- Everything takes longer than you expect it to.
- If you have two dashboards for the same metric, at least one of them must be wrong. Probably both. You’ll try to deprecate one and end up creating a third dashboard.
- Don’t look at a dashboard unless you have to. You’ll likely find a “false positive” and waste time trying to debug it.
- Nothing is more permanent than a temporary solution (e.g. legacy code).
- Infrastructure teams exist so that they can transform O(n) units of work into O(1).
- Get an ergonomic keyboard and mouse to avoid wrist problems later.
- Programs function in strange ways. Sometimes they do not function in strange ways.
- Testing is more important than most people realize.
- At the same time, test flakiness is the bane of your existence.
- It’s better to prevent a bug at compile time, than runtime, than presubmit, than postsubmit, than in production.
- In system design, there is no right answer. This is completely unlike a unit test, which either passes or fails without ambiguity.
- Your job is to solve problems, not to write code.
- Sometimes a solution that involves no coding is the best solution.
Working at Google
- Everything at Google is medium-hard. Impossible tasks become possible, and trivial tasks become difficult. Want to change the color of a button? Medium hard. Want to launch to 1 billion users? Medium hard.
- Your experience at Google will heavily depend on what team you are on.
- Google’s systems interact in very weird ways.
- I do not envy the people who work on Android. They’re caught in a confusing network of partner teams, OEMs, and legal restrictions.
- Google has some of the most amazing software tools in the world.
- Google takes user data really seriously. Sometimes I have to wait weeks for access to anonymized logs, with all the personal data redacted. And all I wanted to do is was find common events that lead to application crashes…
- (Almost) all code lives in the same repository, known as “google3”. This has to be the largest code base in the world.
- The repo also is full of mysterious, unowned, untouchable pieces of code known as “haunted graveyards”.
- No one gets promoted for fixing haunted graveyards.
- UX is usually underfunded at Google. Meanwhile at Apple, people understand its importance and put their money where their mouth is.
- It’s hard to make a good UX design.
- iOS teams often have no UX designer, so they have to use Android mocks.
- (Almost) everyone at Google is highly competent.
- Everything must be measured.
- It is difficult to prove the value of your work if it cannot be measured. This discourages people from doing unmeasurable but necessary work.
- Most Googlers would like to help you, but their busy completing their OKRs. For the rest the quarter. And next quarter, too.
- Sundar Pichai is a complicated man. He seems extremely calm for someone at the helm of one the world’s largest companies.
Google’s Culture
- Getting a massage at work is pretty cool. I should probably fix my sitting posture.
- You stop being a Noogler when you start complaining about the free food in Google’s cafes.
- Google has changed in the past six years. Every year, there’s more bureaucracy.
- The quality of food at Google’s cafes has also declined over time.
- In my opinion, Google hired too quickly in 2020-2022. There wasn’t enough time for all the new hires to absorb Google’s culture.
- Memegen is one of the things that makes Google unique. It’s an internal website where employees post memes. If you post enough funny memes you will be invited into the secret Memeacademy.
- Google is slowly losing that magical feeling of Googliness present in its early days.
- When you have a company of over 170,000 people, just one idiot can make the rest of the employees look bad. Now HR has to institute new rules.
- No one understands everything at Google. Not even Jeff Dean.
- Jeff Dean is a genius, but even he makes mistakes (e.g. his conflict with Dr. Timnit Gebru)
- Dr. Timnit Gebru and Tanja Gupta did not deserve to be fired.
- Alphabet has a union.
- Peer bonuses are cool. You can give up to 5 to other employees each quarter to reward them for good work. The recipient gets $150.
- The perks really are great.
Career
- I used to think that technical skills alone are good enough to advance your career. I was wrong.
- Start thinking about promotion early. Ask your manager what you need to do. Then do it.
- 1:1s are an opportunity to advance your career. Use them to your advantage.
- Every job level is another layer of abstraction.
- At L3, you write code with help.
- At L4, you write code independently.
- At L5, you write design docs.
- At L6, you have meetings about design docs.
- At L7, you have meetings about meetings.
- At Google, you’re promoted based on your leadership, impact, and solving difficult problems. It is difficult to get promoted if your contributions are not measurable.
- Most of Google’s product problems can be traced to performance reviews (GRAD) and promo.
Management and Leadership
- You don’t have to be a manager to be a leader.
- Management is different from leadership. Management is about using resources efficiently. Leadership is about having a vision and followers.
- Being a good TL is hard. Being a good manager is also hard.
- Before starting a project, make sure all stakeholders are on board.
- Sometimes the best way to serve customers/clients/users is to make them do no work it all.
- Sometimes projects get canceled. It’s nothing personal.
- Managers want to see you succeed.
- Managers want to unblock you and move the project along.
- If a team looks like a well-oiled machine, it’s only by comparison.
- One of my favorite parts of my job is mentoring younger engineers.
- Crafting a good plan is hard.
- Also, nothing goes exactly according to plan.
Working with Others
- Scheduling a meeting is a great way to get someone to respond to your e-mail.
- Everyone needs to do their part to account for unconscious bias.
- I used to overvalue technical skills and disdain talk about team culture. I was wrong.
- You probably care more about your work than they do.
- A good program manager drives projects forward, proactively resolves dependencies, and and is a true leader.
- A mediocre program manager does little more than update spreadsheets.
- People (users, colleagues, stakeholders, etc.) will always complain.
- The type of complaint you get can tell you whether you’re doing good job. When your manager says the margins should be 4 pixels instead of 2 pixels, you’re doing great. When they complain that “the page is empty”, you have a serious bug to fix.
- Listening is an underutilized skill.
- Some people oppose DEI. I can understand not caring about it, but I do not understand actively opposing it.
- Antisocial programmers really need to improve their communication skills.
- Fortunately, you can Dale Carnegie your way through a lot of situations.
- Ask questions even when you feel embarrassed about asking. People are usually happy to explain the stuff they work on.
- It is important to give feedback regularly. You have to be humble enough to accept feedback, too.
- Googlers value feedback. They really want it.
Society
- We might be at or past “peak software”.
- Silicon Valley simultaneously understands very much and very little about its users.
- There’s a lot of money sloshing around in the world.
- Small is beautiful.
- Sometimes you have to slow down to go faster.
- It’s better to put out an MVP quickly than to delay a perfect launch forever.
- It is possible for a tiny group to drive huge changes. The path is often difficult and the chance of success usually low. But it is possible.