Working at Google
Ok, I think I already made it clear on this blog that I love California; at least from the running perspective. I also highly praised all the perks at work. But what about the work itself, some of you were asking?
Now, at first it was difficult for me to say anything reasonable on that topic, as I was just warming up at work and wasn’t quite sure whether I’ll like it or not nor what it really was about. And then the problem was simply lack of time -- between work, running and writing weekly reports for this blog I really was hard pressed for time.
But now I’m sitting on the plane from San Francisco to Amsterdam (1 week of vacations with my better half, yay!!), typing on my beautiful new Pixel (that subject probably deserves a post on its own) so I don’t have any good excuses anymore.
But before I tell you why I like working for Google let me answer the more obvious question that some of you were asking, which is: what exactly do I do there?
What do I do at Google?
When I was joining all I knew was that I’ll be in the “Search Infrastructure” group, which at that time meant to me as much as it probably does to you; which is not much at all. But some of the better informed people were claiming that this being one of the core groups is a good place to be. Ok, so far so good.
Shortly after I joined my manager gave me free room to explore and to choose the team that I’d like to join. Now, that was a very nice gesture on her part, which I appreciated very much. However, being clueless as I was, deciding where I want to be turned out to be very difficult. Which was scarry, as I knew that this was an important decision that would have a great impact on the many months to come.
In the end I decided to just follow her suggestion. And this is how I ended up in the image repository project.
Working on images.
Now, explaining what I do in my day to day tasks is almost impossible. The work of the project is not directly visible to users, although it powers many products that you may know, such as “Image search” or Picasa. Moreover, I’m a Software Engineer in Test (SET), which means that I’m helping on the testing side of things, hence being one more step removed from the results directly visible to the users.
In any case, the first weeks were pretty tough. The infrastructure at Google is absolutely amazing but, quite naturally, it’s also very complex so it takes time to learn the ropes. And the first few weeks I felt as if I wasn’t making much progress, which was pretty frustrating.
Things improved greatly since, but the project is very complex and my understanding of it is still very limited, which sometimes can be despiriting.
Working on diffs.
Things improved greatly when I joined another internal project with the goal of building a new system for diffing data. Now, for most technical people (myself included), I guess if you mention diffing data then the image that comes to mind is that of diffing text files, and possibly a tool such as diff or meld, if you’re of Linux affliction. And the next thought would be that this is not such a difficult problem. And the following one would be that it’s solved anyway.
Well, as is the case with so many other things at Google it’s a matter of scale. What if instead of diffing two files I restated the problem as diffing two hard drives? How about two copies of internet? (say, yesterday and today). Still easy? No, the project has nothing to do with diffing internet, but the scale and complexity of it is substantial enough to make it an interesting and challenging project. It’s also enough to ensure that there are many interesting architectural and design decisions involved.
Yet, despite the complexity, when I joined it was a relatively new project with only 3 people on it (myself included) so, before long, I could get myself up to speed and start contributing. And now the frontned part of the system become mostly my responsibility and this sense of “ownership” added greatly to my motivation and dedication to the project.
In short: I’m loving it. And I may follow up with some more technical posts, addressing the things that I’ve learned.
Why I like working for Google?
I love Google as a company. I always did. I never gave much thought to why that was, but I kinda assumed it was just because they made awesome products. Which indeed is part of the answer, I think.
However, it's more than that. I know there are tons of people who share this sentiment. Google is well known to put their users first. There's the famous Don't be evil mantra and then the number one item in Company's philosophy reads: Focus on the user user and all else will follow.
It's easy to dismiss this as a marketing yadda dadda and I would have probably done so if not for the time spent at Google. You can feel this principle in action every step of the way. Whenever new product or feature are discussed the first question is not: Will it give us profit?, but Will it make lives of our users better? This principle seems to be deeply woven into company's DNA. And it's awesome to work in a place that puts their users first.
Being at the heart of things.
I think there are few people who would dispute the fact that there are cool things happening at Google. Probably the two flagship examples are: Google Glass and the self-driving car. But there's plenty more.
Working at Google not only means that you are the first one to hear about those things, but oftentimes you can also be the first one to play with them and help test them.
And then there are TGIFs. Weekly meetings where current issues and development at the company are presented and discussed. It may not sound like lots of fun but believe me, it is. The open nature of those meetings is just amazing. So is the fact that anyone can ask about anything and expect to get an honest answer. And finally the fact that those meetings are hosted by Larry and Sergey kick ass (if not for the fact that he's a billionaire Sergey has an assured career as a stand-up comedian, if you ask me ;).
What about the daily work itself? Probably the on thing that mostly distinguishes Google from my previous workplaces are the code reviews. No code gets checked in without at least one other person looking at it, commenting and providing feedback.
At first I thought that I'd hate that. First, your work gets interrupted by the need to review other's code (by my estimate I spend over 10% of my time doing code reviews). Secondly, checking in your own code is largely delayed as someone needs to review it, then you need to react on the feedback... it's a fairly lengthy process.
Instead: I love them. I mean, sure, I not always feel great about having to do it, but the benefits are tremendous. I won't discuss them in detail here and instead will refer you to this post that nicely sums it up. But there is one particular benefit that works greatly for me. I always cared a great deal about code aesthetics; for me a good solution to a problem is not only one that works well but also one that looks great. It's not just a vanity thing, if you think about code maintenance such approach to coding actually makes a lot of sense. But in many it just doesn't pay off. At Google, with its code reviews, it most certainly does. And I love that.