The climb to your next job. I have spent the last 3 years studying informatics at the University of Lugano where I recently graduated with a Bachelor degree in Science of Informatics. I also interned at different companies as an iOS engineer for the last four summers. In this post I am going to explain my process of finding my first full-time job as an iOS engineer, explaining it step by step. I will also give advice on what I learned by interviewing at some of the top tech companies, in order to help you prepare for your next interview.
⚠️ I’d like to highlight that what I am going to describe in this post is based on my personal experience. You may find some of my assumptions don’t apply to you or maybe a different approach would work better in your specific case. I really hope everyone will be able to get some interesting and useful points out of this post independently from their experience or location.
Table of Contents:
- Find Your Opportunity
- Your CV and Experience
- Use Your Network
- How to Prepare
- Dealing with Rejections
- Be Brave
- Interview Process
- My Personal Experience
Find Your Opportunity
Depending on the country and type of job you’re looking for, various resources exist to discover new positions. I usually start with a Google search for the name of the position and location and often end up on Glassdoor, Indeed, Angel or similar websites. This is a great starting point if you’re not really sure which companies are looking for a person with your skills or if you’re not really selecting your next job based on specific criteria.
What I usually do is focus on a few companies that I am really interested in. An important factor for me is to enjoy the product I am working on and to use myself every day, in order to maximize the personal reward of contributing to it. Focusing on a few companies gives you the chance to carefully manage your resources and adapt to their recruiting process. Interviewing is a very time-consuming task because you’re either writing or answering emails, building your portfolio, doing research or studying for your next interview.
In my opinion, you will have a greater chance of getting a job if the company sees passion in your application instead of just randomly sending your CV.
There are generally two ways to apply for a job:
- Apply to the job posting online, either on the company’s website or on an external website.
- Apply through a current company’s employee (aka as a referral). This is generally the best option if you see a job posting on Twitter or other social media.
The only difference between the two ways is that being referred usually leads to a secure first interview round. If you apply through the website, the company may receive hundreds or thousands of applications and a recruiter will have to select only a subset of the applicants to start the interview process. Knowing someone at the company allows you to ask for more information about the company culture and structure before applying to the job, which gives you a better idea of what to expect regarding the interview process and the company itself.
Attending conferences and meetups is a very effective way to meet new people and learn more about other companies and possible jobs. LinkedIn can also be useful to find jobs or get in touch with recruiters. You could search “recruiters who work at Google” and you should be able to get in touch with people who can help you. Recruiters use LinkedIn to try and fill their open positions, so you can help them and directly get in touch. Write a message to explain why you would like to work for the company and why you would be a great fit for them. If they think you could be a great fit, send them your CV and you should start your interview process soon.
Your CV and Experience
You should take some time to write a clean CV that showcases what you have done in the past and which technologies you have experience with. Build a simple and clean design with Pages if you don’t know where to start. It may take you multiple iterations to get it right, but it’s the content that really matters. Some people even A/B tested their CV to find the combination that makes the best impression. Feel free to take a look at my CV available here if you need some inspiration.
If it makes sense, think about customizing your CV for a specific company or team. If you’re applying for a position where maintaining open-source projects is important, you may want to list yours to show that you match their requirements. In the past, I have customized my CV for a position on a very specific team at Apple to show that I previously worked with the APIs they build.
To speed up the process of writing an efficient CV, you can ask for feedback to friends you trust. Before starting to apply for a full-time job, I asked for feedback to most of my previous experienced managers. If you don’t know anyone who is willing to review yours, you can join the HH Websites and Resumes Facebook group where almost 20,000 members review each other’s CV and websites before applying for jobs. If you don’t know where to start writing your own, this group is also a good place to get inspired. Feel free to email me with your CV if you need feedback and I will try my best to get back to you as soon as possible.
Let me also tell you a short story about the most random CV review I ever received: I was at a WWDC party in 2017 where I met an Apple engineer and we started talking. I told him I was soon looking for a job after graduating from university but I still had to improve my CV and website before applying for jobs. He gave me some tips on what to add to the CV since he knew what Apple recruiters look for. I showed him mine on my iPhone and he pointed out a few improvements I could make to increase my chances of being noticed by the recruiters. Always be open for feedback even in the most random situations!
Use Your Network
Your network can make a big difference while looking for a job. What helped me a lot in my job search is my presence in the community. I started a few years ago by being active on Twitter and contributing to the open-source community with a couple of projects. I’ve been involved in running two different conferences where I had the opportunity to meet a lot of speakers and attendees. Exposing yourself to the community will take some time and effort but it can definitely increase your chances of a successful career in my opinion. Please refer to the great talk by Peter Steinberger on how to build a personal brand for introverts if you want more information on the topic.
Companies receive a lot of applications every day through the application form online. It’s always difficult for the recruiter or engineer who will do the initial screening to notice the right people when just looking at their CV. For this reason, you should try your best to be noticed in a different way. Think outside the box. Send an email to the company or one of your friends who works there to demonstrate your interest in them. That shows that you’re willing to do much more than just send your CV online like everyone else does.
Check out Jessica Bain’s creative way of getting noticed by Spotify which landed her the job in exactly one month.
How to Prepare
Depending on the company and position you’re looking for, you will need to adjust your preparation based on their expectations. First of all, you can start by collecting information on the interview process of the company. Their recruiters will most likely give you all information you need, but if the company is big enough, you may be able to find more details online in blog posts or articles. Glassdoor collects interview reviews from past interviewees that can help you gain more insights on the process.
If your goal is to join a big company, you will definitely need to learn some computer science fundamental concepts. Depending on your previous experience and knowledge, you may want to start by reading the book Cracking the Coding Interview. It explains in more detail the processes and questions to expect in this kind of interviews. Reading the book is useful to get a general idea on what to expect. If there’s one thing you should remember from this post, it’s the following: interviewing is a skill. You can be the best engineer on the planet and still fail every whiteboard interview. This is because there are a lot of skills required to be successful in this specific interview set-up. Interviewing is a stress exercise where you are asked to solve an unknown problem by speaking loudly and code a solution at the same time with someone constantly looking at you for 45 minutes. What could be more stressful than that?
You should take every opportunity you have to practice your interviewing skills. First of all, start practicing on a website like LeetCode, InterviewBit, Interview Cake or GeeksforGeeks to practice solving exercises related to algorithms and data structures. I bought the LeetCode premium subscription for a month to be able to run my code faster and select questions based on the company who asked them. Do as many exercises as you can and spend at least 30 minutes thinking about each possible solution. If you can’t figure it out, look at the tips and discussions to understand a possible solution. Repeat this process for as many problems as you can to train your problem recognition skills. This is the part that allows you quickly find the most appropriate tool to solve a problem.
I would be lying if I said I didn’t hate studying this way. Every time I had some free time, I had to choose between studying algorithms or working on some cool side projects. I could have studied a lot more than I actually did, but looking for a job while simultaneously attending a university full-time with a part-time job really limited my free time. My advice would be to start studying a few months before your first interview or to take a few weeks off to completely focus on this project.
You can start practicing for interviews even before starting to apply for positions. The more techniques you know for solving problems, the better you’ll perform. After practicing for a while, you may be able to solve some problems efficiently. You should now make sure you can solve the same problems in a stressful environment. Pramp makes it very easy to practice by reproducing a similar scenario to the first interview round at Google, Facebook and Apple, just to name a few. Pramp is a free website that matches you with another developer who is practicing exactly like you are doing. After scheduling a time for your interview, you will receive the question to ask to your peer. They will also receive a question to ask to you. When the interview starts, a video call will start with a shared text editor and the question details all in one screen. You even have hints that you can give to your peer to perfectly simulate what a real interview looks like. This is great to practice talking to your interviewer through your solution while coding at the same time, which is a non-trivial skill to have. When I first started interviewing, I couldn’t think deeply about the problem while speaking. Again, this is a skill that you can train by practicing over time. There are other similar services that match you with a real experienced engineer that could give you better advice, but those are usually paid services and not available in all countries. Two examples are interviewing.io and career cup.
You would think that starting to interview with the companies that you like the most would be a good idea, but I would argue against it. Start with the companies that you like the least to gain some experience. After you feel more confident and with some interviews under your belt, you should be more comfortable to take on the companies that matter the most to you.
Everything I have described so far is very focused on algorithmic questions, which are very common in big companies. Smaller companies usually don’t require such knowledge and prefer to test candidates on domain-specific knowledge. If you’re interviewing for an iOS position, you will be asked about Swift and Objective-C features. I personally start by doing some research about common questions and pitfalls to avoid. I can then focus in specific areas by reading books or interesting blog posts.
Check out Andyy Hope’s great article on how he got his developer job at Facebook where he talks more about his preparation process for whiteboard interviews.
Dealing with Rejections
You will be rejected by companies during your career almost assuredly. I’ve been rejected countless times for jobs that I really wanted and I know how it feels. I really wanted to work for Spotify for a few years. I tried applying to their internship programs in 2016 and 2017 but I wasn’t even selected for the first round of interviews. Google, Facebook, Apple, and Twitter rejected me, some even multiple times. What matters is that I persisted and took those rejections as a learning opportunity. Interviewing is a skill that you have to train over time, exactly like programming. Continue to improve yourself by doing what you love every day. Each company has a different way of hiring and testing engineers, and it will take you some practice to understand what they expect to see in candidates. Take every chance you have to interview and improve yourself because very few people succeed on the first try.
It’s easy to forget all the failures and struggles that successful people encountered throughout their career. A great example is the resume of failures by Ji-Sung Kim which strikes the successes and highlights the failures and struggles to see what took him to get to the point where he is today. Take every failure as a learning opportunity and continue to improve.
There have been many discussions recently about companies not offering positions for junior developers, which in my experience is true. If you look at the careers page of most companies nowadays, very few mention jobs for junior engineers. Job titles are fictitious because they vary a lot between companies and countries. Internships may be your best bet in getting a pretty good job with low entry barriers and they look very good on your CV. If the company is happy with your work, they will most likely offer you a full-time job since it’s hard and expensive to find tech talent these days.
For example, last summer I wanted to work at N26 because I really liked the company’s app and I wanted to experience the fintech world. I didn’t know anyone working at the company and they didn’t have any internship positions listed on the website. I tried applying to the full-time iOS engineer position on their website and the recruiter immediately reached out to schedule the first call. At that point I explained my situation and asked if they would be able to hire me as a summer intern instead. They hadn’t yet internally discussed the idea of having an intern so that’s why the position wasn’t available. They liked the idea and after the interview process I was offered an internship position for the summer.
Depending on the company you’re interviewing at, the process may be very different. Here is a small list that tries to summarize the process by size of the company. Obviously, there are exceptions: I will soon describe how my interview process was at various companies to give you some real-world examples. The process may look like some variant and mix of one of the following:
- Medium-size company (< 500 employees): the interview process with these type of companies may consist of 3-4 steps. You first get introduced to the company with a recruiter call that doesn’t involve any technical questions and only describes the overall process. After that, the technical process starts with a 45-90 min call with an engineer. Depending on the company, you may be asked some quiz questions to check if you have the knowledge required for the specific position. A practical exercise to be solved in a shared code editor or by screen sharing is often employed in this interview. The next step is the onsite interview where the interviewers will ask more in-depth questions in regards to your experience. All companies of this size usually have the resources to fly you out to their office. This is an amazing opportunity to meet the team and impress them with your best skills during the last round of interviews.
- Big company (>500 employees): big companies interview candidates in many different ways. It’s also possible to see different interview processes inside the same company. This is why there’s usually an introductory call with the recruiter who illustrates the process. In my experience, there’s always at least an algorithmic coding problem to solve over a live call with an engineer to begin with. If that step goes well, you’re usually invited for the on-site interview at the company’s office. Since every big company has specific processes and resources allocated, they will usually book flights and a hotel and reimburse you a fixed amount per day of travel. The on-site interview consists of 4-5 interviews in a single day with different engineers and managers. Lunch is also provided to network with employees and ask as many questions as you’d like, to get to know the team or company in details. The interviews are most likely focused on algorithmic problems and computer science fundamentals. You could be asked to bring one of your projects to present to the team, so that they can see how you explain your code in a clear and concise way to other people. A cultural fit interview is also mandatory where one or two managers will ask about your previous experience in working with other people. This is usually the easiest part of the process where you just have to make sure that you can tell a few stories on how you performed by working in a team. If you don’t have such stories, the interviewers may ask you to imagine you’re in a situation they describe and explain how you would behave.
The recruiter should get back to you with the next steps a couple of days or weeks later. I received interviews feedback and offers both via phone call and email, so every company does it differently. Some companies will also refuse to give you feedback about your performance because of lack of time or possible lawsuits against them (especially in the U.S.). Other companies instead will give you a detailed feedback encouraging you to try again in a couple of months. In case of an offer, you can now proceed to negotiate your compensation and benefits or choose the exact team you will join. There are plenty of great resources online on how to properly negotiate the offer, so don’t underestimate this step and do some research before accepting the offer.
My Personal Experience
I will now describe what my process looked like in the first half of 2018 when I started looking for my first full-time job. My graduation was planned for June 2018 but I wanted to take the summer off and start the new job in September 2018. I began my process in October 2017 by updating my CV and website to make sure all my information was accurate and up-to-date. I knew it was still early to look for a job with my late starting date and a couple of companies specifically asked me to get back to them again in a couple of months. After taking note of each company’s requirements and policy, I was able to adapt my job hunting timeline.
I wanted to work in a big engineering team as my first full time job. I have already experienced the small and medium size companies at Scandit, N26 and BCG Digital Ventures, and I wanted to try something different this time. I also think that as a new graduate, the more people you get to work with, the more you may be able to learn. Bigger companies also have processes and resources in place to properly train new employees.
I started my job hunting process by creating a spreadsheet with the name of the companies I wanted to work for and some information regarding at which step of the process I was.
My initial job hunting spreadsheet quickly written in Numbers.
After the spreadsheet was done, it was time to get to work: reach out to the companies. I reached out to the companies by either applying on their website or by contacting a friend who worked there. By contacting someone on the inside, I was able to ask for more information about the position and culture of the company. After considering the details of each position and its location, I decided to apply by sending my CV to their recruiting team.
I will now describe the interview process for some of the companies I interviewed at in the last couple of months. For each of them, I will describe my personal experience along with some of my thoughts. The experience in interviewing is very personal and it really depends on your recruiter, interviewers and a lot of other factors.
I still wasn’t done with my internship last summer when I was offered a referral by a former friend who was a Facebook employee at the time. I was planning on starting to study and practice for algorithmic interviews a few months later, but I decided to still give it a try even though I wasn’t feeling confident. Since interviewing is all about practice, I took this opportunity as an exercise to learn more about the process and gain some insights on the type of questions asked. The first call was with a recruiter who explained me the process and asked for a few dates I was available to schedule the next step. It consisted of solving some algorithmic problems on CoderPad while talking to the interviewer over a phone call. In my case it consisted of two problems but depending on the time it takes to solve them, there could also be some follow-up questions to improve the efficiency or extend the solution to cover more use cases.
The important skill that I tried to put in practice in this first coding interview is the “think and explain” process. One of the most important things to do during an interview is to explain your thought process while coding at the same time. You have to be able to communicate your ideas clearly to allow your interviewer to understand your solution. I was able to correctly understand the problem and code a solution but I didn’t get to the most efficient solution in time. A few days later I received an automated rejection email which didn’t contain any explanation. This is pretty common especially if rejected in the first stages of the process.
A Google recruiter got in touch with me around September 2017 because the Zurich office was organizing a rather interesting event called Google Backstage in December 2017. Their intro email also mentioned where they found my contact which is something that recruiters usually don’t disclose. They used Git Awards to find out the most popular GitHub users in Switzerland to invite to this event. The event was very interesting and Google invited about 30 engineers to learn more about the interview process at Google. I think that that Google realized how hard it is to hire engineers with their current process and they’re trying to help candidates get familiar with it to make them feel more comfortable. There were a few talks during the morning explaining how to succeed in Google interviews. After having lunch with some engineers, the afternoon was spent conducting a mock interview. Each candidate was interviewed by a Google engineer for an hour as if it were a real interview. I tried to put in practice all the advice received and the interview went better than I expected. I was lucky enough to be invited for a real onsite interview a few weeks later. The day at the Zurich office consisted of 4 interviews: 2 about algorithms and data structures and 2 about iOS skills, which where specific to my experience. All Google recruiters were incredibly helpful and supportive and I felt encouraged to succeed at all times. Two interviews were conducted remotely because of some last-minute unavailability so they took place over Google Hangouts. I later had lunch with an engineer who answered all my questions about the culture and benefits of the company. I enjoyed the interviews but the difficulty was definitely the hardest I ever encountered in a tech interview.
A couple of days later, the recruiter reached out via email to schedule a call to discuss the feedback of the interviewers. She explained for each interview what the interviewers liked and what I should do next time in order to give a better impression. It was the best and most accurate feedback I ever received and I loved that they took the time to provide it to me. Every interviewer writes their own feedback and sends it to the final committee which makes the “hire” or “no hire” decision. In some cases, more interviews may be required to make a final decision. All companies obviously gather detailed feedback regarding the performance of each candidate, but very few make the effort to let the candidate know about it. Receiving feedback is definitely one of the advantages that may persuade a candidate to re-apply to the same company a couple of months later. Don’t leave your candidates clueless about their performance results. Treat them with the due respect by providing feedback for the time they have invested in your process. Props to Google for their great process.
Apple Park in Cupertino. Apple hires in a very different way compared to other companies. You interview for each specific team which would like to hire you. Interviewing with two different teams at the same time is completely normal. Instead, most other tech companies have a single hiring process and the candidate can discuss which team to join towards the end of the process. Because of this difference, each team at Apple can have a different hiring process. I was referred by a friend I met at a conference a couple of years ago. The first call was the usual introductory call with the recruiter. It was followed by a technical interview over the phone with an engineer on the team. Various technical questions about my previous iOS experience were asked but no coding was involved. I found this a great way to actually assess the knowledge required for the job I was being considered for. I was flown out to Cupertino in all-expenses paid trip a couple of weeks later, including Lyft vouchers to make the trip as smooth as possible. I spent 5 days in Cupertino including a full day consisting of 4 interviews and lunch at Apple Park. The building is incredible and something that you can experience only by walking inside yourself.
I was first welcomed by the recruiter who walked me through the schedule of the day and made sure she knew exactly my expectations such as location of work and other details in case of an offer. The interviews were very broad in topic and included iOS knowledge discussions, Objective-C pair-programming and two whiteboards interviews about computer science fundamentals and algorithmic questions. I found the algorithmic questions a little bit easier compared to Google and I was pretty happy with my performance. It felt good to see some progress on my interviewing skills after practicing for a while and failing the Google onsite. My recruiter unfortunately wasn’t very responsive during the whole process and after about a week of patiently waiting, I reached out asking for feedback about my onsite. She answered by saying that I wasn’t a good fit for the team but she would be happy to look into other teams at Apple. (Remember how their hiring process works.) I asked that I would be happy to receive some feedback if possible and learn more about the opportunities in other teams. The recruiter simply disappeared and, after sending 3 other emails over the following 3 weeks, I finally gave up. I spent 5 days and 30+ hours travelling for this job opportunity and to be ignored or forgotten was very disappointing.
The newest Spotify’s HQ in central Stockholm. Since the beginning of my job-hunting process, Spotify was the top choice as a place to work in Europe. I’ve been a huge fan of the company and its product for a long time and the company’s culture seemed amazing from what I learned by some previous employees I met.
A friend referred me for the position very early in my job hunting process and the recruiter was very nice, telling me to reach out in a couple of months to start the actual process. The initial call with the recruiter illustrated me the whole process. The first technical interview was a 90 min call with two engineers who asked about 20 quiz questions in the first part of the call. The second part consisted of a technical task to be completed by sharing my screen and coding directly in Xcode. Everything went well and I moved onto the next step which consisted in a 60 min cultural fit interview with two managers. I was then flown out for the on-site interview in Stockholm where my trip was paid for by the company. The onsite consisted of 3 interviews from 9:30 AM until 2 PM. Every interviewer was very friendly and I got the feeling that everyone really enjoyed their work there. The first interview consisted in me presenting the source code to one of my previous projects. It took me some time to prepare a presentation and practice how to best explain it. I really liked this format compared to that at other companies where completing a take-home project is mandatory to proceed to the next step. The company can also have a better idea of your coding skills by seeing how you maintained a non-trivial project over time. The second interview was again a cultural fit interview with a different manager this time. Lunch was brought into the office and I had the possibility to meet some employees to learn more about living in Sweden and their current work. After lunch, the last interview consisted in solving an algorithmic problem on the whiteboard. The question was of medium difficulty and I was able to solve it this time. After the interview was over, I realized that, thanks to my practice, I immediately recognized the data structure required to solve the problem in an efficient way. The interview process was very well organized and I had a lot of possibilities to ask questions and learn more about the company. I received an offer a few days later via email for a position in Stockholm.
Deliveroo is one of the very few companies that exactly describes their interview process on their engineering blog. This is great since the candidate has the chance to discover the process ahead of time and it avoids wasting everyone’s time. You can read their blog post to see in details what the interview process looks like, but I will summarize it for you since it’s a little bit different from the other companies I described so far. There is no phone screening or initial interview, just a recruiter call. The first task is to complete a take-home project and submit it to the team a few days before the onsite. The project isn’t used as a screening step like many other companies do. After agreeing to the completion of the project, the onsite interview is scheduled and the project has to be completed before the onsite at a time it best fits the candidate. Once completed, the interviewers will receive it and can then prepare the interview. During the onsite interview, the candidate is asked to make some improvements and explain the project. This is an amazing opportunity to better explain the choices face-to-face for the candidate. Take-home projects are often misjudged since a new developer has to look at the codebase for a short amount of time and decide if it’s good enough to proceed to the next step. This doesn’t give any possibility of interaction or explanation to the candidate. The on-site interview consisted of the following three interviews: a cultural fit interview with a manager, an interview focused on the take-home project and one testing the iOS knowledge. After the on-site, a call with the manager of a specific team was set up to further discuss the type of work they do. A couple of days later I received an official offer. The overall process was very smooth and fast. The fact that the coding challenge project isn’t a prerequisite to proceed to the onsite interview, makes it a lot more comfortable for candidates to spend time on the take-home.
While looking for a job has definitely been a very stressful process, I am happy that I took the time to prepare as much as I could. I did a lot of research for each company to better gain insights on the interview process which definitely helped me in preparing in an effective way.
Interviewing for a job may be one of the most nerve-racking tasks you will be faced with during your career, but it will get easier as you improve your interviewing skills and network hopefully.
I am excited to have accepted a job as an iOS Engineer at Spotify and I am moving to Stockholm in September. Working at Spotify is a dream come true for me. 🎶🚀✨
I hope that this post may be able to help you and make it a little bit easier to prepare for your next job.
If you got it here, thank you very much. Just so you know, this post was longer than my bachelor thesis. I would also like to thank all my friends who helped me proofread this article.