Navigating the iOS Interview
- The Interview
- The Practical Interview
- A Practical Challenge
- The Practical Approach
- Practical Resources
- The Computer Science Fundamentals Interview
- Preparing for the CS Fundamentals Review
- Learning CS Fundamentals
- Practicing CS fundamentals
- Your Approach to the CS Fundamental Interview
- 1. Understand the Problem
- 2. Think Through the Solution Aloud
- 3. Propose and Discuss Solution in Code
- 4. Write and Test Code
- 5. Optimize and Improve
- 6. Additional Tips
- The Higher Level Interview
- Preparing for the Higher Level Interview
- Resources for the Higher Level Interview
- The iOS Specific Interview
- Resources for the iOS Specific Interview
- The Behavioral Interview
- Motivation for the Job
- Your Competencies
- Your Approach to the Behavioral Interview
- Resources for the Behavioral Interview
- Other Job-Finding Tips
- Finding Remote Job Leads
- Reaching Out
- Ask Questions!
- Your Portfolio
- Where to Go From Here?
Looking for an iOS job? This article gives you the best advice, tools and interview questions to prepare you for a successful iOS interview process.
We’re going through some uncertain and turbulent times. The COVID-19 situation has flipped our plans and expectations upside down. Many people have lost their jobs because companies can’t keep afloat. On top of that, students graduating right now are facing a very confusing job market and hiring process. If any of this describes your situation, or you’re just looking for an iOS job and want to prepare for an iOS interview, this article is for you!
At raywenderlich.com, we want to do what we can to support our community. This article aims to equip you with the best advice and tools to prepare you for a successful interview process.
The iOS interview is conceptually similar to other interviews for software engineering roles, but differs when it comes to specifics around implementation and frameworks. As such, an iOS interview will typically consist of a combination the following interviews:
- Computer Science Fundamentals
- Higher Level
- Framework Specific
In this article, we’re going to go through each of them to learn what they’re like and what the interviewer expects. For each type, I’ll give you some example questions, answers, tips for preparing and resources for further reading.
Before we start, though, here’s the best piece of advice I can give you: No one single list of questions will prepare you for everything. Reading this article will give you many great tools to prepare, but it’s on you to do the work. Practice makes perfect. Time to dive in!
- Take a deep breath and slow down as you start to answer a question.
- Ask clarifying questions whenever you feel a shred of doubt or ambiguity.
- Practice speaking your thoughts out loud, coding on a whiteboard and using a text-editor without autocomplete.
- Think of the interviewer as a colleague and ask for their opinion as you answer their questions.
- Go through all the resource links in this article; they’re top notch, especially Cracking the Coding Interview!
- Remember that getting the answers right is great, but your thought process behind them is way more important.
- Recognize that the hiring process is annoying for everyone; the interviewer is on your side and wants you to succeed.
- Believe in yourself and act confident. You’ve got this!
The Practical Interview
Let’s kick this off with one of my favorite types of interviews: the practical one. This interview can either be a take-home project or a pair-programming assignment on the spot. I like these interviews because the tasks truly mimic what you’d be doing on the job. Many technical interviews fail in this regard.
I’m particularly in favor of take-home tests, because they remove the stress of an on-site interview and ensure that everyone gets evaluated objectively. Also, practical interviews can be fun because they tend to be open-ended and allow you to express your skills, creativity and way of working.
Some of the most common examples of tasks to do are:
- Fetch some JSON and display the results.
- Add a new feature to an existing code base.
- Find a bug in an existing project.
- Implement a specific, core company feature.
A Practical Challenge
Instead of providing you with an example we’ve come up with, we want to give you the chance to get some practice in and receive real feedback! Your challenge, if you choose to accept it, is to create an iOS app that beautifully displays the raywenderlich.com articles in all their glory.
For this purpose, we’ve created a raywenderlich take-home project challenge.
You can take some visual inspiration from the official raywenderlich.com app.
Once you’re done, submit a PR to the main repository. You can also compare your work to others who have submitted results so far, such as these two which we recently reviewed live:
The Practical Approach
With an open-ended, project-based task, ask clarifying questions first to ensure that you understand what the company is looking for. They might expect you to follow a certain coding style, see how you’d implement a particular architectural pattern or want you to use certain iOS-specific frameworks. Make sure you understand the requirements first; but once they’re clear, it’s off to the races!
For success in your take-home project, make sure it:
- Has good documentation and use of comments.
- Has a clear and well-defined architecture.
- Is easy to build and run.
- Does not have warnings, errors or crashes.
- Is easy to understand.
- Is tested, if appropriate.
- Includes a brief description of how it addresses the brief.
If the project has a time limit, try not to dramatically exceed it! It will definitely show if you spend twenty hours on a project that was supposed to take only two. Also, try to avoid third-party libraries, because they’ll undermine your abilities. If you must use them, make sure to explain why.
- Good Swift documentation at NSHipster.
- Official raywenderlich.com Swift Style Guide.
- List of companies that use practical interviews only: No Whiteboards website or Hiring without whiteboards GitHub page.
Well-explained take-home challenges for practice:
Fun APIs to get some practice with:
The Computer Science Fundamentals Interview
You may find that the computer science fundamentals interview quite challenging. To prepare for it, you’ll need to practice and memorize solutions to arbitrary logical riddles that will hardly ever appear in your day-to-day work life. Alas, many companies employ it, because it produces an outcome that’s easy to objectively evaluate.
With the right mindset, solving these problems can also be quite fun and addictive!
The general topics that this interview covers are:
- Data Structures
- Time and Space Complexity (Big-O)
Preparing for the CS Fundamentals Review
You will undoubtedly have to spend significant time studying and preparing for this type of interview, no matter your skill level. I suggest you divide your time between learning and practicing. If you get bored with one, switch to the other.
Learning CS Fundamentals
If you don’t have a traditional computer science background or need a refresher, take a look at these resources covering the three main topics above: data structures, algorithms and complexity analysis:
- Our Data Structures & Algorithms in Swift or our Swift Algorithm Club
- YouTube course on data structures by mycodeschool
- Intro to Algorithms CS Course (free course by MIT)
- Our GitHub page on Big-O Notation and the Big-O Cheatsheet
Practicing CS fundamentals
Once you feel like you’ve nailed down a certain topic, you’ll need to practice it. Learning by doing beats learning by reading any day! For this interview, you’ll either have to do it online in a text-editor or in-person on a whiteboard. That’s probably not how you spend your days, so put yourself in these unnatural scenarios as much as possible to get comfortable.
It might sound silly, but the physical activity of whiteboarding is more difficult than it sounds. Get yourself a whiteboard, stand up and write the solutions out. The financial investment is negligible compared to the financial gain you’re about to get if you do well!
If your interview is happening online, make sure to practice coding in a text-editor without autocomplete like CoderPad. You’ll be surprised at how challenging and time-consuming this is until you’ve done it a number of times.
The last tip is to record yourself as you go through the problems. Watching yourself go through a problem will give you great insight into what you’re doing well and what you can improve. This is particularly useful for improving how you communicate your thought process.
Ready to work on this? Here are some resources to help you:
- Interview Cake: One of my personal favorites, because it intertwines just-in-time theory, many practice problems and hints along the way. It a wonderful learning experience!
- Leetcode: The leading interview preparation platform with over 1500 questions ranging from easy to hard, and forums to discuss solutions.
- HackerRank: A website similar to Leetcode but with more real-world questions.
- Cracking the Coding Interview: An incredible resource covering nearly every aspect of the interview process.
- Swift Coding Challenges: Paul Hudson’s book for Swift specific questions.
- Our iOS community’s favorite questions: A GitHub page listing.
Other resources for preparation include:
- CoderPad: The industry standard IDE for technical interviews.
- Google’s coding interview video.
- Interviewing.io: Practice interviewing anonymously. If you do well, you’ll get invitations to interview with top companies right on their platform.
Your Approach to the CS Fundamental Interview
While there are many questions and answers to look at, getting the answer “right” is only about 10-20% of your assessment. It’s more about your thought process and the path you take to get there. We’ll break it down into five steps, so buckle down!
1. Understand the Problem
- Repeat the problem to yourself out loud.
- State your assumptions, if you have any.
- Ask questions if you feel like something is unclear or ambiguous.
- Repeat the problem back to the interviewer, in your words.
- Ask them if your interpretation is correct.
- Rinse and repeat, as needed.
Here’s a link to the full example questions and answers.
2. Think Through the Solution Aloud
When you feel like you have a good grasp on the problem, start thinking about how to solve it. Take a little breath to consolidate your thoughts in silence, and then start sharing them with the interviewer. It’s essential that they understand your thought process. They’ll get a glimpse into how you work and think. They’ll also help you along the way if you get stuck. Engage them and regularly ask for their opinion at decision points!
3. Propose and Discuss Solution in Code
Once the interviewer has given you the go-ahead on your direction, start laying out the solution in pseudo-code.
4. Write and Test Code
Now that you have the structure of what you want to build, it’s time to translate what you described into proper code. Continue speaking out loud as you write out the code.
Once you’re happy with the outcome, go through the test cases they gave you to check if your algorithm checks out. Try out a couple of edge cases as well, to show that you’re thinking beyond what you were given. Fix your code before ultimately putting it up for tribute!
5. Optimize and Improve
Once everything checks out and your interviewer is pleased with the result, it’s likely you’ll be asked to analyze the runtime of your code. This means Big-O analysis. Once you’ve finished this, you’ll move on to the next question!
6. Additional Tips
Here are a few additional tips for performing well in these types of interviews:
- Use clear names for variables and functions.
- Stop if you know you won’t have enough time to actually write everything out. Don’t try to rush. Instead, take the interviewer through the steps you would have taken, if you had more time.
- Don’t get distracted if your interviewer isn’t showing any emotions. They’re supposed to look indifferent to avoid any sway in your decisions.
- Ask if they want your code to compile at the end. When writing pseudo-code, we don’t necessarily adhere to the syntactic rules of the language, even though the interviewer might be expecting it.
To see these principles applied to an actual problem, check out this GitHub repository: CS Fundamentals Example.
The Higher Level Interview
Besides the Practical and CS Fundamentals interviews, you also need to be prepared for a higher level interview. This type of interview aims to understand your level of experience across a broad set of iOS and software development topics. It includes open-ended questions conducted in a conversational style.
Although it usually doesn’t include implementation details, you might have to draw a diagram or two to visualize certain concepts. It broadly covers topics on software development, architecture, the Swift language and the iOS community. You can probably expect a higher level interview at the start or end of the interview process as the interview that decides your seniority.
Preparing for the Higher Level Interview
This type of interview is difficult to prepare for because the best answers tend to come from experience. While you can read about these topics online, it’s hard to truly create a strong opinion if you haven’t tried them out yourself. In general, the best and most insightful answers to these questions come from describing how you handled real-life situations.
My recommendation to prepare for these is to:
- Fundamentally understand the concepts for a particular topic.
- Think of stories from previous jobs and projects where you dealt with these topics and write them down.
- Cross-check your answer with documentation and online resources to close knowledge gaps and polish how you speak about the topic. Remember to use industry terms to express yourself as clearly and professionally as possible.
- Practice answering out loud and take notes when you get stuck.
- Focus on YOUR strengths. There are multiple ways to answer these questions, so make sure to highlight your skills and specialties.
Resources for the Higher Level Interview
For an idea of the kinds of questions you’ll find in this type of interview, check out our GitHub repo: Higher level discussion topics and questions.
There’s rarely a single correct answer to these questions, so my best recommendation is to stay current. Carve out some time during the week to read up on blog posts, tutorials or listen to some podcasts like:
The iOS Specific Interview
All of the interviews above test your knowledge of concepts applicable to a wide range of software engineering stacks while using an iOS lens. The iOS specific interview is different from these in that it covers questions that deal with truly specialized knowledge only an iOS developer would know.
Check out our repo for the Top iOS specific interview questions.
Resources for the iOS Specific Interview
Apple’s documentation is your best resource for questions pertaining to the Swift Language or some of the more widely used Apple Frameworks.
I suggest you brush up on at least these five:
- Core Data
- Core Graphics
- Core Animation
On top of that, I’d recommend checking out Alex Bush’s post on: 22 great iOS specific interview questions, answers and expectations. He also has a whole book, the iOS Interview Guide, which is full of great questions and general advice.
The Behavioral Interview
While the other interviews tend to focus mostly on specific skills, knowledge or experiences, behavioral interviews try to holistically assess you as a person and employee and how you would fit into their team. That means they’re targeting your competencies, personal goals and motivation for this particular job and company.
The three main questions the interviewer is trying to answer here are:
- Why do you want to work here?
- Do we want to work with you?
- Can you do the job?
Motivation for the Job
First and foremost, make sure that you actually want to work for this company. This means doing a fair amount of research on their products and the company itself.
- Spend time on the company website.
- Look at reviews on Glassdoor.
- Talk to people in your network who have worked there.
- Download and play with their apps!
As you do your research, keep a running document of things you like, things you don’t like, things you would improve and how your experience can benefit the company. Take screenshots, record links, make some bullet points. It doesn’t have to be perfectly structured, but it’s super important to record these thoughts because your memory will fail you.
Keeping a document on a company you’re interviewing with is particularly important as you progress through the interview rounds. Each round will give you another data point to add. If you have everything captured in a document at the end, you can leverage it when making your final decision.
Here’s a job interview template with an example to get you started.
Doing this will allow you to successfully answer questions interviewers will undoubtedly ask you like:
- Why do you want to work here?
- Why are you leaving your current role?
- What do you think about our product and how would you improve it?
- Why should we hire you?
One key thing to keep in mind, especially if you’re interviewing at multiple companies, is to never give a generic response. Back up your answers with company-specific, personal examples.
The other core criteria of a behavioral interview are your competencies like critical thinking, delegation and mentoring. These determine how you behave in different work scenarios, based on your knowledge, skills, personality and experience. The questions you’ll get asked here will be based on the required competencies your interviewer has identified as essential for this role.
The best way to address these types of questions is to give examples from your past and then relate them to the work you’d be doing in this role. In fact, many of these questions will be structured in a way to prompt such a response:
“Tell me about a time when you had to deal with multiple deadlines. What did you do and how did it turn out?”
That might sound cliché but there’s a very good reason why interviewers often ask these questions. They lead the candidate to use their experiences to answer the questions according to the STAR method:
- (S)ituation: Briefly describe the situation.
- (T)ask: State what you had to accomplish.
- (A)ction: Describe what you did to accomplish it with details.
- (R)esult: Explain the outcomes and benefits.
Even if you don’t get these particular questions, use the STAR method to clearly communicate your competencies and reassure your interviewer that you’ve got what it takes. Imagine that an interviewer simply asks if you think you’re a good leader. Your answer could be a short yes or no, but that answer on its own holds no real merit. You need to back it up with proof, and the only proof at your disposal is your past experience.
Here are some questions to practice with:
- Describe a time when you had to convince people to agree with you.
- Has a junior team member ever sought advice from you?
- What’s the most difficult project you’ve worked on thus far?
- 30 Behavioral Interview Questions.
Now, take a look at our full behavioral question and answer example.
Your Approach to the Behavioral Interview
It can be quite difficult and stressful to try to come up with these examples at the interview itself, so here are some ways to prepare:
- Create a document of some bigger projects you’re proud of.
- Write short descriptions of the projects following the STAR method.
- Take a look at our list of competencies on the interview repo.
- Think about and write down the story you’d tell to address each competency through your projects.
To do well in this interview, you need to get comfortable telling your stories in a compelling way. This means practicing out loud. It will help you understand where you get stuck, what you forget and how you can improve. But don’t memorize them; that will definitely backfire. Instead, become comfortable discussing them from multiple angles!
One last word of wisdom on this topic is that not all examples have to be related to your previous employment. They can also be examples from your personal projects, family life or community engagement. Pick the examples that best represent you!
Resources for the Behavioral Interview
Other Job-Finding Tips
Of course, getting a job involves more than interviewing. We didn’t cover these things in this article but here are some links and quick tips to help you out:
Finding Remote Job Leads
Apart from your traditional job posts on company websites and LinkedIn, several other websites now cater specifically to remote workers:
- iOS Dev Jobs
- Product Hunt Remote Job List
- Hire Tech Ladies
- Unicorn Hunt
- Work With Us
- Working Nomads
- We Work Remotely
- Upstream App: Grow your professional network.
If you’re passionate about a job or a company, my number one suggestion is to NOT apply through their site. Instead, try to reach out to a hiring manager or someone you know at that company. Genuine interest goes a long way and getting someone to vouch for you is worth 100 times more than the most brilliant resume. On top of that, most big and medium-sized companies offer referral bonuses for their employees to bring people in. So, if you can, get that referral; you might actually be doing them a favor!
Normally, there’s some time reserved for questions at the end of the interview. This is the time for you to be the interviewer! Start by asking some baseline questions about the company and their processes. Then ask them more specific questions that you have from your research and the interview process. You can ask about their tech stack, test coverage, code review practices or anything you need to know before making a decision.
Since iOS development is a skill that we can easily show off, it follows that companies will often expect a portfolio of projects you’ve worked on. If you’re just starting out, that might sound intimidating, but here’s a list of App Ideas by Florin Pop to get you started.
Another way to approach this is to look at some conceptual designs and actually make them a reality in code at websites like UI Movement or Dribbble. Who knows, you might actually end up collaborating on a real app?
No one likes it, but networking is an essential part of any job search process. In fact, a significant portion of the job search is just getting that interview. If you have a strong network, that’s much easier to do than if you don’t. I strongly recommend that you connect with your local iOS meet-up group, go to conferences, speak at meet-ups or submit your own talks to to conferences and contribute to open source to participate in the iOS community.
Where to Go From Here?
We truly hope you found this article helpful and that you can use it as a tool to prepare for your next job interview. Interviewing is tough, especially in these times of uncertainty, so don’t be discouraged if you get rejected. It can happen for a number of reasons you can’t predict or explain, so just keep trying, believe in yourself, and you’ll get there!
Once you land that dream job, I suggest you take a peek at:
- Living By the Code, to take a broader look at your career and learn from our experts.
- Review salary expectations with the Blind platform. On Blind you can anonymously connect with other professionals in your field to candidly discuss all career-related matters.
We’ve shared an abundance of resources throughout the article, so now it’s our turn to ask you to share your thoughts, experiences, tips and advice!
What are some things you like or dislike about the interview process? What would you want to improve? What are your strategies?
Join us in the forums to discuss further, and help us grow our repository of questions by submitting your favorites here: Favorite iOS question form. Thank you and good luck!