“An interview for a large company is always a free career advice.”

There is a lot of information over the internet about how to prepare for a technical interview, what one should know and how one should behave. But this knowledge is TOO abstract. It’s like… imagine if you had to learn every university subject before an exam because you don’t know what exam it was.

What’s more valuable are real stories and experience of people passed these examsinterviews. Was it Google or Microsoft, or maybe Zynga. What questions were asked (and what questions were not), what was the overall atmosphere of an interview, how long it was.

In this post I want to tell you about Zynga recruiting event in Moscow, about my personal experience, mistakes and what I learned.

This interview gave me a lot of experience, made me think about who I am and where I am going. No article about how to pass an interview can substitute real experience of going to an interview.

Here’s an image to keep you interested.

During the spring of 2011 there had been a Zynga’s banner at Russian game development resource — DTF. The banner had said that Zynga consumed all the US resources and was hunting for Russian PHP and C++ developers. I’ve worked for a year in social games industry as a Flash Developer and AFAIK most of Zynga’s game clients were flash-based. So I sent my résumé anyway, though I don’t know C++ and hate PHP.

Here I want to clarify that I didn’t plan to join Zynga, I rather wanted to know how far I can advance. First of all, look at the image above. WTF?! The guy has all these Red Bull cans for a reason. Second, I hate dogs.

What’s funny, at that time if you googled “work at zynga” the third result would be a link to this blog with that image (now available only in Google cache). I was worried a bit about it (8

The first interview

The chief recruiter was Mathias Connot (he even created a profile on russian LinkedIn clone). During the process I was in contact only with him. I remember I read somewhere that prior to Zynga he had hunted Russians to Microsoft.

I guess they liked my résumé and Mat arranged me a Skype interview. Prior to that he sent me some info about the company and Zynga’s promo video (once again, lol at 1:57). At the specified time I was contacted by Luke Rajlich, FarmVille CTO.

Mistake #1 — if EnglishAmerican is not your native tongue, even if you think that you know it very good, before taking a Skype call practice a bit with a mirror, watch a movie in English — try to get used to the foreign speech.

I had worked in New York for some time. Unlike the majority of Russian developers I had real experience talking to US citizens. But anyway about 70% of my brain power was used to process what Luke was talking about. Lack of speaking practice, background noise and I was a bit nervous.

Luke glanced at my résumé and started asking questions:

  • He asked to tell him about myself and projects I’d been working on.
  • Several questions about Flash and AS3: multi-threading, socket connections, flash drawing pipeline, manual mouse events handling with transparent bitmaps — mostly standard knowledge for Flash game development.
  • He asked about differences between Java and AS3 type systems, what was the difference between Strong Typing and Static Typing, what Duck typing was.
  • Asked about C++ and Templates. I don’t know C++ but heard about Templates, so I told him what I knew.
  • There were several questions about MVC, patterns and Abstract Factory pattern.
  • Also he was curious if I had any experience with SQL and MySQL.

25 minutes passed instantly. I had like 5 minutes to ask him a couple of questions. Not every day you have a chance to ask the FarmVille CTO anything you want. So we talked a bit. During these 5 minutes I found out that Zynga mostly uses Linux + Apache + MySQL + PHP; that Erlang and Scala are interesting languages but it’s hard to find good developers; that they don’t protect their games at all. He laughed when I told him about 3 identical clones of one of their games launched on Russian social networks.

Mistake #2 — stop being nervous FFS! In my long life I passed lots of exams, attended many job interviews, spoke at conferences and got a podcast. But still…

Mistake #3 — don’t answer immediately. You got time to think. Being nervous it’s easy even to mistake Static typing with Strong typing. Don’t be scared to correct yourself. Even when if you spot an error which was a couple of questions before.

Mistake #4 — read the damn GoF book about software patterns. People say that it is useless, most of the patterns are obvious, others are features of an advanced language. But anyway I didn’t know exactly what an Abstract Factory was. Of course I know what a factory is and why it is needed (mostly empirically) but I’ve never needed the exact definition from the book. Apparently, Luke wanted to hear it.

I would say I wasn’t proud of myself. And I was surprised to see Matt’s email that they wanted to see me at the final interview in Moscow.

Preparation

I had a month ahead of me which I spent googling about Zynga and possible interview questions. According to the internet programming interviews are only for C developers who must know every data structure and sorting algorithm in the universe. So I had absolutely no idea what to expect.

I would lie if I deny that at that time I had thought about working in the US again. According to the internet Zynga wasn’t the best place to work, but I was eager to go to the next step.

The next step

Matt told me that the plan was the following: after the first interviews they select 40-50 people and fly to Moscow where they interview in person 10 people a day (5 in the morning, 5 during afternoon).

The interviews took place in a 5-star hotel Marriott Royal Aurora in the center of Moscow. There were 5 or 6 of us. Several C++ and PHP developers. The overall mood was that “it’s better to be a PHP developer in Zynga than a C++ developer here”…

Matt accompanied us to a room where we had waited for other crew members to join us. That’s where the last interviewee came in and had stared at us for 10 seconds…

— Mai ai seet hir? — he asked and moved a chair.
— Sure, why not? — I answered in English and we continued to stare at each other before I understood what was going on.
— А что это мы по-английски говорим? (But why are we talking in English?) — I asked.
— Ой, а вы что, тоже на интервью? А я думал вы меня сейчас спрашивать тут будете. (Damn, you are here for the interview too? I thought you’d start interviewing me altogether right now.)

We laughed. But, damn, should have started asking him. Would have been even funnier.

Mat joined us. He told us about the company and how to behave during the interviews. I think it will be helpful for everyone:

  1. Do not hurry. Listen the question carefully. Make sure that it is 100% clear. Start solving a problem only if you are sure that this is the problem interviewer asked to solve.
  2. Do not try to impress an interviewer with complexity of your solution. Start with the simplest one.
  3. Do not just sit there silently if you can’t solve a problem.
  4. Show the process of thinking, say what you are thinking. An interviewer is not interested in a particular solution, he is interested in a way you came up with this solution.

Every interviewee had his own room. There were 5 interviewers who visited each room for 20-30 minutes talking to candidates, after that followed a 10-15 minutes break. You had pen and paper to write programs in your favorite language, draw diagrams and pretty pictures. There should have been 3 to 5 interviews. Matt said that it did not mean much if you got kicked out after the 3rd interview, but everyone knew…

There were illustrated albums in the room about different cities where Zynga had its offices. Checked those out between interviews.

Mistake #5 — try to find out more about the interview process, what types of developers are needed and who will be interviewing you.

I was really surprised by the fact that I got 0 (zero) questions about Flash or ActionScript. What’s more, there were no language or framework related questions at all. I wouldn’t think that I would be interviewed for C++ developer position. Do you see me as a C++ developer? Hell no. But my brain was filled with Flash/AS3 related information. If I knew I would throw all this garbage out and stockpiled some more algorithms instead.

The first interview

Mistake #6 — I can not do anything when a person looks at my paper/display. I… just… can’t. This little fad of mine backfired so many times in my life I can’t even count. I absolutely must do something about it because nobody knows that you can solve that problem on a piece of paper in seconds… but only after the guy stops staring at you (or leaves the room).

The first guy (sorry, I don’t remember names) said that he was a jack of all trades: a bit client developer, a bit server developer, also he makes web interfaces, etc. He started with server-side AI optimization for a huge amount of autonomous agents. In other words: here lots of mobs are spawned and start following the player, and we need to calculate their paths in an efficient way.

I recalled from memory everything remotely similar to the problem: A* implementation, how to cache its result for other mobs, connect mobs into self-organizing clusters, move some calculations to the client, etc.

The guy looked satisfied with my answers and after that he asked me to solve a breadth-first search problem on a tree. That’s where I hit the mistake #6 and there were only several minutes left. The guy told me to think about the algorithm during the break and send a solution with the next interviewer.

Mistake #7 — DO NOT HURRY, DAMN IT!!!!1 Think, think, think. Write the simpest algorithm possible. You will have time to improve THE WORKING algorithm later.

The second interview

The next interviewer was interested in the projects I took part in. I told him about games and social games I developed (Zynga is about social games after all). During the second part of the interview he had asked me about data structures, asked to find a loop in a linked list. Going back to the mistake #7, I wrote more or less advanced algorithm instead of the one with a dictionary. Shouldn’t really have done that. The next problems were trivial with a trivial algorithm but kind of hard with the one I came up with. Adding the mistake #6 and I was left once again with an unsolved problem for break time.

Needless to say that I came up with an elegant solution during the first half of that break.

The third interview

After the break I met the CTO of Zynga, Cadir Lee. If the first two guys were young and funny, Cadir looked like a real CTO — a middle-aged wise man. Like a university professor. At that moment I felt like being a freshman again.

Not sure why but he was interested in the solution of the earlier problem, the one I solved during the last break. After that he asked a question I wasn’t ready to at all… He asked me to tell him about a framework we use at our daily work like he was a new guy in our company. I panicked and decided to tell him about mmo/social games AS3 framework we used at my previous job. Who knows what I am talking about probably started laughing already. It was a huge, complicated, bloated with old useless code Flex-like framework for games. You had to use the whole whiteboard to write a diagram of how all these damn components are related/connected to each other. Anyway, I failed.

Next, he asked me to map database tables for an app like Jira. I mentally went back to the beginning of 2000s where I was a bit a PHP coder (who wasn’t, seriously?) and started laying out fields, tables and joining them with relations. It wasn’t a success either.

Seeing that I’m a bad PHP coder, he asked me to architect a Rubik’s Cube game. I guess I did a decent job considering all the pressure and lack of time.

Mistake #8 — try to abstract from the interviewer, don’t think about him as a person, don’t be frightened by his prominence or intent look. This will let you make fewer mistakes and the interviewer will not see how dumb you are in fact.

Waiting

In 20-25 minutes after Cadir left I met Alex (his parents are from Russia but this was his first visit here, he could speak decent Russian though). He said that I wouldn’t have more interviews. Damn, was I that bad? I though the first 2 interviews went OK.

Alex presented me a Zynga bag with presents and a 10$ CityVille card which is still somewhere on my desk. In a week or two I got a standard automated email that I was good but Zynga didn’t have a position for me at that time.

Conclusion

I (almost) wasn’t upset. But I came to some conclusions.

I was surprised by the general mood of interviewees — “it’s better to be there a PHP coder than a C++ developer here”. It’s like there they will live in a pink marmalade castle or something. It looked that people would have to work really hard. In small cubicles with cheap chairs. Dogs running around. Also, have you already forgot the Red Bull cans collection?

And have you heard the news recently? Zynga to employees: Give back our stock or you’ll be fired. Ouch! That might be actually good I didn’t pass the interview after all.

Also, I still don’t get what people they were looking for. It seems that they needed language independent engineers which could be used to solve any problem. Learn a language in a day, framework or two in a week and here we go — one can become a PHP backend developer, C++ developer to work on a parallel database or an AS3 developer to code a game client in Flash. I can’t be sure about these days but in my time there was no such CS education in Russia. Mostly everyone learned from practice.

Several questions I didn’t expect at all. Like the one to tell an interviewer about a framework we use.

Of course this experience allowed me to evaluate my knowledge. This whole quest let me understand that there’s a lot more I have to learn, there are lots of ways to improve. Too bad I can’t grow as a Flash Developer these days, but I started looking at other technologies. Soon I hope to drop Flash and become a Software Engineer.

That’s actually great that I read tech books. Even the ones I never have opportunities to use in practice. The knowledge was useful after all. I bet that 90% of Flash developers never used non-standard data structures and are unable to implement an advanced algorithm on these structures. Same thing with PHP and Java developers. Of course one can ask “What for?” and he will be right.

An email from Mat Connot shared by another interviewee

Hi <my real name>,

In my years as a technical recruiter for a couple different world-class software organizations I can tell you that the single most important skill will be a great understanding of computer science fundamentals. Having a solid grasp of the fundamentals and maintaining it for yourself throughout your entire career will always serve you well. It’s not as much about language or tech, it’s about having the algorithms and knowing complexity etc.

So many developers fall back on libraries and stop paying attention to the underlying math, complexity, etc. and that’s always a big mistake…