Disclaimer: This post is not endorsed by Google, and is not posted by an official Google Employee. At the time I'm posting this post, I am no longer with Google, and everything in this post is my personal belief, not representative of Google.
I interned as a Software Engineer (SWE) working in Chrome OS (Chromium) team at Google from April to August, 2017. This was my second attempt at landing an internship at Google, and the most fun of the two.
The first one, I tried in 2015, by doing three technical phone interviews, getting accepted, getting matched to a a team in Kirkland, WA, getting a job offer, accepting the job offer, all by March, and then waiting 6 months for an Export Control License (courtesy of being an Iranian) which failed by the end of the Summer because the job offer was no longer valid.
The next time, I redid everything, but in October 2016! Instead of three interviews, I originally was scheduled for 2 (perhaps because they already had my record from before?). The first one went very smoothly, a bunch of basic CS and Algorithms questions. The second one was somewhat rude, the interviewer was not professional, asked me a question I immediately told him "I do not know the answer to", and kept pressuring me to try to solve it, and ended up with him hanging up on me after 20 minutes. He also had children screaming and crying in the background. This experience resulted in a third interviewer being assigned to me, which went smoothly.
Google internships are competitive, as in, roughly 2-3% of applicants get in. However, keep in mind that many of these applicants are not properly qualified. I would say among coders who know what they are doing, and are pretty familiar with computer science, the chances of landing an internship with Google should be above 50%. The chances of converting that internship into a job offer is actually much higher. For interns that do not graduate in the next year, a returning internship is the best options, and for those who do, and didn't perform bad during their internship, a conversion process is provided by Google, where they assign you a new recruiter, do local interviews and evaluate your internship to provide you with a full-time job offer.
I got accepted about in about a couple weeks after the interviews. Now comes the team match process. I showed interest in many areas, and was told by my recruiter that my application will be passed along to different teams for matching, and the process usually takes up to 2 months, and if by then nobody shows interest, I am automatically disqualified.
Two months passed and I heard nothing. I was losing hope when I received a call from the recruiter telling me Chrome OS team is interested. Then I received a call from my future mentor and manager, and had a quick discussion about my capabilities. Then they confirmed me and I received an offer.
The job offer is usually comparable with an entry level software engineer at Google, with similar perks and pay (except long term ones). At the time, the salary was $103,000 annually, and health insurance and other benefits would cut about $300 from that per month. I accepted the offer by early December, and sent them a whole lot of paperwork to start the Export Control Licensing process. My start date was scheduled at Jan 8th.
The start date was postponed to Jan 20th, Feb 20th, March 20th and April 17th, every time because the license was not yet processed. Finally, I travelled to Mountain View, California on Apr 15th, 2017 with my wife, to start the internship!
Moving to Mountain View
I arrived a few days early to get comfortable in the new house and in Mountain View. I am generally lazy, so I wanted to reside in a place in close proximity to Googleplex, but housing was very hard and very expensive to come by in the Mountain View area. Fortunately, I found a sublet for the exact duration of my stay for $2300 a month inclusive. The original rent was reportedly $3000, and thus a big win for me!
We arrived at the house, signed the sublet agreement and handed over two checks (security deposit and first month rent). The house was alright, roughly 700 sqft (60 sqm), somewhat old and rusty, but relatively clean and empty! Then I rented a car from Hertz using Google's corporate coupon for a month, which reduced the cost from roughly $900 a month to $550-600 a month inclusive. Drove the car to Costco, got a bunch of basic stuff (picnic tables, chairs, etc.) and set up the house.
Fortunately, there are tons of Iranian as well as Halal restaurants in the Bay Area, so the next few days we had a good feast. They tell you that you gain 15 pounds by going to Google because of all the free food, so I was a little worried about my willpower and weight. Will talk about that more later.
We also transferred our Xfinity cable service from Virginia to California, and to do that we had to cancel that account and create a new one with Comcast. I had also shipped my iMac via Fedex for roughly $100, and it was supposed to arrive a few days later than us, but never did, so I had to track it down along Fedexes and physically locate the box to reclaim it.
The house was 30 minute walk, 10 minute drive, 10 minute bike ride to Googleplex, and I was supposed to receive a bike from Google for commuting purposes. Win win.
Arrived the first day at Building 46, stood in a long line, got my paperwork sorted and received a temporary (E) Google badge. All doors in all buildings in Google are locked and require a badge scan to unlock and open. Some doors (those to the lobbies, where guests sit and wait) are open during business hours.
Then we moved into a big room, with dozens of big tables all over it, where each one of us was allocated a chair, a laptop and a bunch of other swag. I conveniently swapped my spot with someone else, because I was early, and sat at a good location in the room. My laptop was unfortunately a corporate Chromebook. Later I figured out that it's not very unfortunate, because I'll be working on Chromebooks and also you can't really use your corporate laptop much. In fact, mine resided at home for the duration of my internship.
Initially I thought all these people are interns, but soon realized that the majority of them are new hirees! In fact, there were roughly 200 hirees and less than 20 interns. However, I later realized that the intern season had not started yet, and would start in two weeks, with more than 1800 interns flowing in!
For the entire duration of that day, we had presentation after presentation, in the same room, about different things at Google, from corporate culture, to security, to why Google matters, etc. Honestly I found 80% of it hype. It could all fit in a 30 minute presentation, but I guess it was supposed to cheer up the new hirees and make them feel special!
The only thing that kind of stood out, was that the privacy guy, whom was also the head of privacy at Google, responded vaguely to my question of "Why do you have X509 certificates for facebook and Microsoft and Apple domains install on your corporate computers?" as in, why do you spy on your employee activity especially from these companies, to which he responded "every company must protect its secrets". Not very open and trustworthy, are we?
But that's not the end of presentations. The same trend continued for a full week! Every day, from 8 to 5, presentation after presentation, lecture after lecture, workshop after workshop. It turned more technical the latter days, but unfortunately I came to use none of the knowledge gained from that, because most of it focused on Google's internal coding structure, which our team doesn't use, as we are an open source project (Android/Chrome).
We got to experience lunch and breakfast in many different cafes throughout Google, which was quite underwhelming for me. First, the cafes had very few options each, usually a couple types of salads and one or two main dishes. Second, they had huge lines! Lines everywhere, lines for forks, lines for plates, lines for trash, lines for bathroom, lines for food pickup. I hate lines. So you'd stand for 5-10 minutes in a line to pick up some weird Vegan food you've never heard of before, and thus you have to pick only a little to try it out before committing further. But then there's a 5-10 minute line, so you're kind of forced to pick much more than you can chew, and just throw out the excess if it's not good. Unfortunately, most of the food is healthy-like, and thus not very tasty to eat. I say healthy-like, because simple and delicious food can be healthy too, but no, Google wants to have complicated food, with a million ingredients, but still make it healthy. The good part is, they list all the ingredients above each food, so your dietary restrictions (e.g., Halal) can be accommodated pretty easily.
Another good news is eat.googleplex.com. You see, Google is large. Very large. We'll get to that later. But if you know about 30 Google apps and services that are available to the public, there are 300 that are only available to Googlers inside Google networks. One of them is eat. It lists all restaurants with all the available foods and options every meal! You can even compare.
Breakfasts are good though, because there is not much line, and I love breakfast! Later however, I figured out that Google also has many food trucks, aside from cafes (around 30-50 of which are available in the MTV campus). Food trucks usually provide more "sane" and unhealthy food! That's a plus. However, each food truck usually has 1-3 options, which is either vegan or very meaty, so a no-go for me.
The first week of Noogler experience was indeed painful. At the end, hosts were supposed to come pick up their hirees/interns and show them around as well as their workplace. My host Dylan, came and picked me up. I was relieved to realize that he's a cool guy, and doesn't buy too much into the hype. We clicked pretty good, and I immediately liked the environment a little more. He showed me around, giving me brief tour information while walking to the main building, Googleplex, aka the original main Google building, aka Google building 40 (to 43, all of which are interconnected).
I figured out that my desk is on the second floor in the original Google building! Nice. I also realized that the first floor is mostly occupied by the Charlie cafe, as well as a large seating area that usually hosts MTV's internal events as well as Google's famous TGIF. The first floor also has a fully equipped gym. The good thing about Charlie Cafe, is that it is actually several cafes mixed together, a pizza cafe, a sushi cafe, a street-food/Thai/Korean cafe, an Indian cafe (which has 2-3 times halal chicken every week!), a Mexican cafe, a Mexican deli, an American cafe with burgers and such, a salad bar, a desert bar and a deli bar! Unfortunately Charlie is the most crowded cafe of them all, because almost everyone who comes to visit Googleplex, visits Charlie and eats at Charlie, and since they are new, they usually mess things up a little. Fortunately for me, Charlie's menu is fairly consistent, so I immediately go to what I want to eat and get somewhere quiet to enjoy it.
The next week was mostly mandatory trainings, some of which were self-paced and online, such as diversity training and unbiasing training (thanks Patricia!). I skimmed through coding workshops, which were supposed to last 4-8 hours each, and got to do some work on my actual project.
Generally, the Noogler experience was forced for two weeks, and lasted a few more until we got used to everything. A lot of Nooglers left MTV after the 2-week period to return to their regional office and start their job. And I got to do some enticing, useful work, after doing nothing for two weeks and getting paid for it!
How large exactly is Google?
Google is large. If you have not worked at a huge corporation, such as Microsoft, Apple or Amazon, you probably have no idea how large Google is. Even if you have worked at these companies but not their main campus, you still have no idea how big they are. Google, at the time of this writing, has roughly 90,000 people working in it. Roughly 30,000 are software engineers creating products, 10,000 are infrastructure people providing infrastructure for Google's stuff, 20,000 are infrastructure for the outside world, and the rest are business, marketing, management, etc.
Roughly 30,000 people work in the Mountain View campus, with another 15,000 working in the nearby Sunnyvale office. To put how big Google is into perspective, instead of comparing it with a large company, compare it with a country. Google is pretty much like a country's government, it has the same operational budget (and revenue), it has the same number of people (think of 90,000 as the government employees), and it serves 1-3 billion people! A pretty big country at that.
I compare Google to a country because it is like one. Nobody in Google knows about everything that is going on at Google, and it is the culture and unity that binds people and goals together, not the managerial staff. Everyone is part of the country, and nobody is controlling everything.
That's why they need so many staff and internal systems just to keep track of their own progress, to be able to organize a coherent effort to serve 1 to 3 billion people. Fortunately, Google is a relatively open company, mainly because its revenue is based on openness, and thus almost every employee has access to almost everything, except a few things such as private user data, CEO office, all the food, etc.
The Mountain View campus on itself has several dozen buildings, and it is very easy to get lost there. There is a 1.5 mile distance from one edge of the campus to the other, and that's why Google provides gBikes, the colored bikes that are kinda crappy, but are a great alternative for walking 1.5 miles around the campus, particularly when you want to go to a far cafe just for lunch.
The atmosphere is also not very corporate, you barely recognize your boss from their attire or attitude, and have to check up on one of the internal apps to figure out the organizational structure. It might as well be that your boss and his boss are both sitting besides you on your floor!
One great thing at Google is, because you do not see the organization structure every day, and because your boss and his boss sit beside you at work and at lunch, and because you have access to almost everything, you become Google. You start talking about Google as you are part of it "Our products are great" when talking to your friends, rather than "Their/Google's products are great". You start to belong.
Delving into the work
To delve into coding, I had to first setup my environment. Fortunately, since most of my work was and is open source, you can easily check how much effort and progress I've made during my Google internship via my Chromium CLs. The Chromium Developer guide is quite painful, available at https://www.chromium.org/chromium-os/developer-guide. It takes a few days to go through it and get started on everything, and a few weeks to get comfortable with it. Fortunately since I've already had experience with large open source projects, I got bootstrapped pretty quickly (1 to 2 days) and started coding.
My first task was to debug ARC++ (a project that lets Android apps run on Chromebooks) 64bit syscal filter, which took me a couple days to do. Then I had to push my CL and have it reviewed, before getting it landed.
What does all that mean? Well, at Google, someone writes the code, then commits it locally under version control, then cleans up, writes a short descriptive text and pushes the change as a CL (changelist). The CL is usually managed through a review system, which is Gerrit for Chromium (based on Git). The review system allows other coders and administrators of the system to review your changes, provide you with feedback and go through an iterative process to "Code Review" your CL. It usually takes a few backs and forth, each of which you need to return your working system to the state of the CL, fix the issue, recommit and repush, and write something on Gerrit explaining what changes you did. Once you receive a Code Review +2 (which can be done by one person or by two people), you're good to go. Mind that this is all long before Github PRs and code review process.
Since nobody has full command of the code, you have to add reviewers and CCs to each of your CLs that you think are familiar with what you are doing, and keep your CLs civilized and organized. They also can add reviewers, comments and other information if needed. Once a CL is reviewed +2, you can tick it for Commit Queue, which picks it up every once in a while and merges it with the actual code base, which then gets automatically integrated into the environment (after passing all automated tests).
The code base is relatively huge, roughly 100GB for Chromium and roughly 100GB for Android. They each also have their own build environments and tools, and you really need a very powerful machine for working with them. I was unable to build them on a VM at home long before coming to Google, and even my mighty workstation at Google was not a good fit, so they gave me another workstation (HP Z840), which was a powerhouse with 256 GB of memory and 2 TB of SSD storage.
They also gave me a two (one early and one later) Chromebook devices for testing and development purposes, aside from my corporate Chromebook, which doesn't let me install anything on it and thus is pretty useless. Since I had access to everything corporate through the workstation, and since interns are not allowed remote access to Google, making me sit in front of my workstation at all times, I had no use for the corporate Chromebook.
My host was actually quite vague and confusing as to what he wanted me to do, partly because my start date had shifted so many times that he had to think of ten different projects for me. Finally, he decided that I should add NFS support to Chrome OS Termina project, which allows running native apps on Chromebooks securely. The project required me to integrate nfs-ganesha, a user-land open-source NFS server into the Termina environment, with all its security implications.
From the docs on the project, I could figure out that this task was scheduled for 10-20 days of one of the permanent team members, and was assigned to an intern for 3 months. Delving into the environment and getting comfortable there was very cumbersome, fortunately folks at the team were very friendly and helped me a lot when I kept asking them the same question over and over and over (particularly Stephen).
Now I did that project long before my scheduled midterm evaluation, which would be in roughly 1.5 month, but it hadn't fully landed yet (one CL is was under review and everything else had a dependency to it).
Along the way, after about one month of staying at Google, Ramadan hit me. On June 8th, Ramadan hit me hard. This was the longest Ramadan in 33 years, with Summer Solstice right in the middle of it. I usually take vacation through the entire month, and do not work much, except for when I feel like it. It is already a huge burden on my intellectual capacity, which is very food dependent. However, since I was an intern for only 4 months, I couldn't take one month off! So I had a quick talk with my manager letting him know that my performance will be degraded throughout the next month. The first 10-15 days were brutal, I lost roughly a pound a day, totaling 20 pounds in the first 20 days, but then got used to it and the remainder went smoothly, and I even regained my intellectual capacity back.
Twenty Percent Culture
Google has a culture of 20% time for other work. There are so many activities all around Google, and Googlers are encouraged to partake in them, from Yoga classes, to teaching at Google, to interviewing new candidates, to playing Volleyball in the sand court in the middle of the campus, etc. Googlers are generally recommended to spend 20% of their time doing activities or helping other teams, as well as dogfooding!
Because Google is so large, most (if not all) Google products are first launched internally at Google. Then people dogfood it, as in, test it inside the company and provide feedback, and then the product/service matures enough to go for a beta or public release. Dogfooding is vital at Google, and everyone receives several dogfood emails every week, from testing the new hardware to performing health studies.
Google also has an event called TGIF (Thanks God It's Friday) which is ironically held at Thursdays 4:30 to 5:30 PM, in Mountain View Googleplex (Building 40), right under my working floor, in the Charlie Cafe seating area. Usually both Sergey Brin and Larry Page attend the TGIF, as well as Sundar (CEO) and other high level managerial and administrative staff. The major theme of TGIF is announcement of new cool products/projects, and responding to community concerns and questions. Questions are taken both from the live audience as well as the broadcasted audience (all over Google offices), and also from one of the local apps which allows questions to be posted and upvoted.
Since there was an inflow of interns and new hirees a couple weeks after I joined Google, I was only able to physically attend 3-4 TGIFs. The rest were so crowded you could barely breathe! Fortunately I could watch it from above at my office. Roughly 1800 new interns as well as 1200 new hirees arrived in that Summer at Google.
Unfortunately, my team was not a big fan of 20% culture, as they work on tight schedules and on an open source project somewhat secluded from internal Google stuff.
So that's how it went, instead of gaining 15 pounds, I lost 20 working at Google as an intern! In the middle of Ramadan, I had my midterm evaluations. The feedback was generally positive, and I was assigned a new task, to add VSOCK support to the Linux Kernel 4.4 as well as NFS-UTILS and NFS-GANESHA projects, and was told that if I did that by the end of my stay, I'd "exceed expectations". I also received a little criticism about minimal social interaction with the team, which was expected during Ramadan (no team lunch, no extra activities, no nothing).
Ramadan was particularly hard because Mountain View is considered a suburb, so everything closes at 9 PM, and before 9 you are fasting, and you don't really get to go out and enjoy the weather, do any activities, enjoy Google cafes, do exercises, or basically anything.
Once midterm evaluations were over, I had a much better idea of what exactly I was supposed to do and how much is expected of me, which relieves a lot of stress. I understand that people are not usually temporary at Google, so their objectives are flexible and and not restricted to a certain set of things, but for an intern, having perspective is vital, because he wants to spend time exploring other aspects of Google, as well as time preparing for conversion process.
Stress Piling up
Mind that I had 1:1 meetings with my manager every Tuesday at 11:30, and the meeting was pretty casual. Unfortunately the new task seemed too daunting and impossible to do. Fortunately someone else in the Red Hat open-source community had done something similar and I could use much of his work, however, it wasn't well documented, had plenty of bugs and issues, and generally didn't work. When I was about to lose hope and let it go, I was finally able to get it to work, and was relieved.
In the meantime, since I had started on the conversion process (i.e., getting a full time job offer from Google), and had informed my recruiter that I am interested in a security role, she was checking with the security team to find a suitable position, and I hadn't heard back anything until the last couple weeks, when a meeting was scheduled with a security manager, and further interviews were scheduled for after that. I also scheduled mock interviews with my team, to practice and relieve some of the stress from the actual conversion interviews.
I was also scheduled to present my intern work to a group of 20-50 people working on the same project. Handling all these things in parallel, as well as some personal issues, made me a little stressed in the last few weeks of my internship at Google.
Ending the internship
You receive an email mid-week the week prior to the end asking for final self-evaluation, providing full report of what you've done, what you've accomplished and what you are going to do with regards to Google later. Once you submit that, your manager/host also submits a part on their behalf, which serves as the main evaluation for your performance, used for returning as an intern or for the conversion process.
I finally had meetings with the security team, had my interviews scheduled for conversion, and had my internship presentation scheduled. I prepared a 15-20 minute high-level presentation for the team (20-50 people) explaining what I did and what sort of impact it had on the overall project.
The last week starts feeling like you are drifting away from Google. You know you will no longer belong, and will not have access to Google's infrastructure in a few days, and it makes you cautions, and thus feel no more belonging to the corporation.
Overall, the internship was a great experience. You see things, realize options and figure out a corporate culture which is very very very rare. It really helped me thrive as a person, and have a much clearer vision of the future I would like to have.