For six days, from August 13 to August 20, 2018, I interviewed six Silicon Valley companies (LinkedIn, Yelp, Apple, Amazon, Facebook and Google) and received a job offer from each.
In the process of preparation, which I describe below, I strongly relied on this
last year’s post — it was he who at one time made me think about whether it was time to move to another company. I didn’t want to constantly dangle to the other end of the country and back in search of a perfect job, so it was clear: I’d have to gather my will into a fist and plan all interviews so that they would go one after another. I aimed at job openings that are related to mobile development, but the described approach to learning, tips and tricks are suitable for other cases.
I hope my story will inspire someone who is now in the same position (not quite happy with the current work, dreams of moving to the Gulf region, but somewhat under-fit in terms of preparation), dare - who knows what the future holds for them.
Introduction and Statistics
I firmly decided that I want to work in the Bay area, where I can get a job in a large company and grow seriously as a mobile developer. I used to work in startups, and it was a good experience, but this time I was looking for bigger fish for a number of reasons (I mean not only the size of the team, but also the capital). I also knew that I didn’t have a particular company yet, as well as I didn’t understand what kind of salary needed to be paid in order not to lose money compared to what I had. Finally, I had no desire to send out a whole hundred resumes, as I did right after university.
Taking all this into account, I sent a resume to twenty companies. Four of them (Reddit, Nest, Stripe, Uber) refused me immediately after receiving the letter. Of the remaining sixteen ten (Lyft, Airbnb, Dropbox, Instagram, YouTube, Square, Robinhood, Twitter, Snap, Slack) did not give any feedback at all. Simple arithmetic suggests that six companies responded and asked me to talk with a recruiter. In the end, I received six invitations for a telephone interview, six - for an interview in the office and six job offers.
After reviewing my calendar on Google, I estimate that it was all distributed like this:
- 7 meetings with recruiters in 10 days
- 7 technical interviews in 11 days
- 29 interviews in the office in 8 days
- 3 telephone interviews in the wake of interviews
Adding these numbers, you can calculate: I completed 46 interviews in 73 days (if we count the intervals between the stages). It was hard, and I had to spend all my lunch breaks on meetings for many weeks. I began to come to work early in order to be able to leave early and spend the evenings having telephone conversations. Difficulties were created by the fact that it was necessary to continue to properly fulfill my duties in current work - however, I always tried to give priority to her and endured meetings if circumstances so required. Shirking so that it was more convenient to interview, I was not going to. This is unethical, leaves a bad impression, and besides, it may end up being impossible to find a new place, and ruin your reputation on the old one.
Companies (in chronological order)
LinkedIn (Sunnyvale, California)LinkedIn, in fact, develops quite nice applications, and in the open source community they
make a considerable contribution . All the time of our interaction, I was impressed - from corporate culture and engineering solutions. If you compare the position in the ranking of prestige in the iOS market at the beginning and at the end of the whole process, it is this company that rose most strongly in my eyes.
Yelp (San Francisco, California)The Yelp application looks great: you can feel the subtlety of the production, speaking about a thorough knowledge of the iOS platform. I liked the atmosphere in their office. The building itself is very beautiful, and I would be happy to work as a team with any of the people who conducted the interviews. Compared to other companies on my list, this one is quite small, and this affects everything - but it has a positive effect. The team seems to have worked very well, and the workflows unfold extremely quickly.
Apple (Cupertino, CA)Apple has long been an integral part of the iOS market (ha ha). I am their mad fan since childhood (well, from the age of twelve for sure). It is thanks to their Mac computers that I generally became interested in programming. The iPhone SDK helped me to create and roll out my first application. When they invited me to have an interview at the office, and then become part of the team - it was like in a dream. I do not even know what else to say about them.
Amazon (Palo Alto, CA)I would not call Amazon a company focused primarily on mobile development, rather the opposite. However, the position and the team met the criteria that I set for myself at the beginning. The interview in Palo Alto where I was interviewed did not impress me, but this is a temporary shelter and soon they have to move to some building more suited to the style of Amazon. So in this regard, I just had no luck with time. The people with whom I spoke, seemed to me very passionate about their projects. Literally from each company, I heard: “We have an atmosphere here just like startups!”, But at Amazon it really seems to be true.
Facebook (Menlo Park, California)I was interviewed in their newest building. In general and in general, everything seemed to be cool, but I remember the details of the meeting rather vaguely: it was my fifth day in a row of interviews and the lack of sleep made itself felt. I only remember that I got a lot of pleasure from communicating with employees and that the meeting at dinner turned out to be very informative.
Google (Mountain View, California)In Google, as I understand it, interviews for a particular position are conducted more or less as a template. I was able to talk with many members of the team working on one of the largest iOS products of the company, but I applied for a position not related specifically to their activities. After the recruitment committee gave the go-ahead, they moved me to the next stage, where they selected the right team, and finally found a suitable option. This is an ooo-oh-very long process, when compared with the pace of negotiations of other teams with whom I spoke. We had to constantly keep other employers informed about how things are going with Google, and Google, respectively, what we came up with with other companies.
Preparation plan
I’ll make it clear: when I started, I was theoretically able to solve most of the tasks from the “Simple” section on Leetcode in thirty minutes and about 25% of the tasks from the “Average difficulty” section, if not set time limits. Solving the tasks from the “Complicated” section for me then was like trying to prove the equality of classes NP and P. In a word, I had a lot of work to do.
To tighten the algorithms, I first turned to the book
Cracking the Coding Interview . On Sundays, I got up in the morning, went to a cafe and solved problems for Objective-C there. Having worked a decent amount of tasks from the book (about thirty-five somewhere), I switched to Leetcode and revised the tasks that corresponded to the completed chapters. After several weeks of such studies, I felt that I had already learned the basics quite well, and moved on to the next stage.
Armed with my basic knowledge, I took on the
Elements of Programming Interviews . This book is much more complicated than the previous one. There are recommended lesson plans, and I tried not to deviate too much from them. If I remember correctly, one was designed for four weeks of study, and I completed it almost completely. In my opinion, it is critically important to practice solving tasks on a blackboard or to rehearse a telephone interview with someone. Moreover, by “critically important” I mean not only “useful”, but the fact that it should be considered as a mandatory element of the curriculum. I have no doubt that someone will be able to get a job without it, but for myself I have not found a better way to work out the skills.
If someone needs a partner for rehearsal interviews for posts related to iOS, I will be happy to help. You can find me at
CS Career Hackers - contact, you see, somehow we will agree, if I am not very busy. And if not, there are other people who are willing to support you. Of course, you will be embarrassed. That's the whole point. If everything worked out by itself, then there was no sense in practicing, right? If during rehearsals at the blackboard or on the phone, you are very embarrassed or feel ill at ease, then you are doing exactly what you need - you will train yourself in advance. Personally, at first I felt very constrained, and then at some point it passed, so the training more than paid off.
After a month of daily review of assignments (two to three hours on weekdays, more weekends), I focused on the “
Popular Interviewing Questions ” section on Leetcode. I did not go through all of them, but went over enough. To prepare for an interview on algorithms, the main thing is to get to the point where you can find a solution right along the interview. Striving to memorize all the solutions is not worth it, it is impossible. Practically all the tasks I encountered during that week of interviews were new for me - but at the same time, they looked like what I had already seen. After all, the development process itself takes place along the same lines. Many tasks repeat each other in general terms, but each case is distinguished by a specific set of restrictions.
What i learned
Below, I will list the conclusions I have drawn for myself, in no particular order. All these recommendations would be very useful to me if I knew them in advance - both those related to the preparation for technical interviews, and those that deal with planning and other nuances that are not related to programming. There is nothing in them that applies only and exclusively to iOS, so I think they are generally suitable for all interviewers in our industry.
- Do not throw. When I was looking for my first serious job after college, I was only enough for a week or two classes. I reasoned this way: apparently, it just isn't given to me. After all, more than a week has passed, and practically no progress has been observed, so what's the point of wasting time further? But this time I decided that I had no choice. After some time, the picture began to take shape. Labor will have to invest a lot, but it is the desire to learn that distinguishes successful applicants against the background of others.
- Training is our (almost) everything. Of course, a certain level of innate abilities is also needed here, but practice (that is, training) is capable of changing very, very much. People are not hired for what they were born with. They are hired for the fact that they are able to perform certain duties successfully, and where and when they received the necessary knowledge does not matter.
- Training with friends is our rest. It doesn't matter if you are rehearsing at the blackboard or using something like Codeshare , the bottom line is that when you go into the atmosphere of an interview for a long time with someone's help, it is far from scary. If during the interview the brain suddenly fails and you give out some nonsense, it will not knock you off track. Well, if you manage to find a person who knows solutions even for those tasks that you do not understand, and can push you in the right direction - it will be generally perfect. Seriously, such training is worth its weight in gold.
- Coverage decides. You can train to stupefying (and even productively) - and still not get a job, because your resume did not get to the right person, or you were stunned by the blackboard and you did not solve the problem on time. The best guarantee is to secure maximum chances. That is, send a resume to everyone who suits you and who you fit the requirements, and not just the best option. I've selected a whole top twenty companies!
- A decision is a process, not a result. Learning will not achieve anything. During the week I was offered about twenty tasks on algorithms, and only one of them was familiar to me (which I immediately informed, although many would consider it superfluous). But I learned how to identify patterns, and so I was able to find solutions right away.
- Do not give up. Not once or twice did I get stuck, and the interviewer had to lead me to the correct answer. This did not prevent me from getting job offers from all companies. There was one interview, which I felt was hopelessly overwhelming (four out of five sessions, in my opinion, were only for an unambiguous “no”), but in fact, they eventually invited me to the team. In short, what just does not happen in life.
- Do not rush to dismiss tasks. When I studied with a friend, he often dismissed the most difficult tasks, saying that it would not be useful to me. What is interesting, of those four types of tasks that, in his words, “definitely will not be caught,” two have fallen. Not quite in the form in which we have them, but in very similar. If in the process of learning you regularly encounter some kind of concept, work it out.
- Do not underestimate the importance of "soft skills." I think most of my success I owe to the fact that my (quite honest) answers to questions corresponded to the policy of the company. I have a theory that very strong developers sometimes have difficulty finding a decent place to work simply because they behave rudely, lie, or don’t know how to hold on in situations that are not related to programming. In my opinion, all this is a good reason to refuse the candidate. Therefore, practice your behavior in the same way as technical skills.
- Show your knowledge. At interviews, there were often situations when, in response to a question, I mentioned some of my other skills with the proviso that, due to lack of time, I cannot tell in detail about the implementation of this solution. Talk about strings? Show in your decision that you can work with Unicode, or tell us how to support it. Calling a private method? Explain how things are with methods in Objective-C. Update the data in the table view? List animations that you can support. If you understand something weakly, you should not raise this topic, of course. But if you have something to say, use the opportunity to go beyond the narrow framework into which the original question drives you, and show your advantage over those who do not step off the beaten track.
- Try not to reach the bar, and raise it. The impression you make at the interview depends not only on whether you are offered a job, but also on what conditions it will be offered to you. If at some point confidence comes to you that your knowledge for this job is enough - great! But do not forget: there is a huge difference between “more or less falls short” and “exactly fits”. Your goal should be the second. The conditions that were initially offered to me (that is, before the negotiations) were very, very good, and I think the interviews played a significant role here.
Finally
Well that's all! The marathon was one more, but I do not regret anything. I sincerely hope that everything I have written here will help someone to get off the ground in the pursuit of dream work. If someone is interested in tips that are relevant specifically for the iOS segment, I can share, so write
in the comments .
If you find this reassuring: this is my second job after college, I have about two and a half years of work experience, no high-profile names in my resumes, I graduated from a very modest college, which didn’t have big companies at the job fair, I started the process training in late April, and the resume began to send in June and July, and finally, in just a few months, I got a job I could only dream of.
Finally, I want to once again advertise the
CS Career Hackers community. If you are looking for a place to practice, or just want to communicate with people who are in your position (or are familiar with it from any angle), please do not pass by. It came across to me only a few months after signing the contract, but still, it's great there. Good luck with your preparations!