I’m writing this series because I get a lot of questions about the interview process. Here’s a quick example I received just a couple of days ago.
I’ve gone through several courses – one by Angela Yu on Udemy, then 100 days of Swift and Take Home Project by Sean Allen. So basically I know some things now. I’d like to apply for a junior dev position obviously. I’ve tried to apply for some but it’s hard to even get an interview.
What’s the best thing to do now?A junior dev trying to make it
Do I need to complete a whole project?
If so, how complex does it need to be?
Does it need to end up on the App Store?
Or maybe several projects?
What’s the best strategy?
As you all know, I’ve been a developer for more than 10 years. Throughout all this time, I’ve been lucky enough to interview with dozens of companies including heavy hitters like Facebook and Microsoft to smaller startups that you may have heard of like 1 Second Everyday. Interviewing in different contexts has helped me understand all types of interview processes and has allowed me to accept some amazing positions. What each company is expecting from you depends on factors such as company size, culture or their main product’s focus.
I want to help you understand the process too, so let’s get some FAQs out of the way first.
Do I need to [complete a whole project / publish an app to the App Store / have a portfolio]?
Need? No. Is it useful? Yes. What you need is a solid piece of code you can show interviewers to prove you know how to code. You could show a pull request, or code you’ve contributed to an open source project, or a project of your own that goes to the App Store. So if you want to do a full-fledged app and publish it to the App Store, go for it! You’ll learn a lot. It’s not necessary, though. You want to show good fundamentals and coding hygiene and that can be shown either with a small app or with a smaller code sample.
Should I learn CS fundamentals?
Yes, but how much time you spend learning them depends heavily on where you’re going to be focusing your job search.
FAANG-level companies love to hire extremely bright people that have strong CS-foundations and are at the top of their class. As we’ll see in our next email, their interview process is centered around CS fundamentals.
Other companies are hit-or-miss, especially if they’re smaller. In that case, it all depends on the hiring manager. If they are part of “the club”, they’ll want you to prove yourself with CS problems. If they are not, a pair programming interview or a take home test are more likely to happen, in which case, CS fundamentals will only help you slightly.
Do I need to know [MVVM/VIPER/MVP]?
No, you do not.
Regardless of size, companies will often value OOP principles much, much more than architecture knowledge. Knowing and explaining the single responsibility principle or concurrency are bound to be more valuable during your interview.
Do I need to know [Core Data/Realm/Firebase]?
Yes, you should know at least one of them. You should be able to explain how you would persist data on disk and why it’s important to do so. At the very least, you should know how Codable works and how it’s related to persisting data on disk.
What do managers want?
When hiring, I’m looking for people with good communication skills, since I expect them to be willing to ask questions and be explicit enough to describe any blockers. I usually ask them to explain something they learned recently about Swift or iOS and keep prodding them until they can’t answer anymore. This allows me to see how passionate they are about learning new stuff and explaining stuff they know.
Also I would look for people with minimum git knowledge (pushing commit, creating branches, making a pull request), AutoLayout, experience with basic UIKit classes and experience making HTTP requests. I don’t ever expect expert-level for entry and mid-level positions, but at least enough to explain networking concepts in a basic API request.
I also always ask about the classic copy by value and reference knowledge.David Mar, Lead iOS Developer @ Kinedu
David is a friend of mine and I asked him to contribute by telling me what he’s looking for when hiring developers. The company he works for, Kinedu, has an app that gives daily personalized playtime activities for babies. They have 4.5 stars and over 2.7k reviews. I don’t need to tell you that 4.5 stars with that many reviews is insane.
As you can see, there’s a lot to unpack in his comment, but the important parts are: strong communication skills and good iOS foundations (AutoLayout, Networking, UIKit).
How do I get the interview?
This is the tough pill to swallow: it’s mostly luck and very few companies want junior devs.
Don’t fret, there’s still a lot you can do to improve your odds and not all of it involves coding.
First, know that your strength in being a junior is that other people want to help you. The community is amazing and you should be putting yourself out there. Open a Twitter account and start tweeting. Write Medium posts about your learning experiences. Start being active on LinkedIn. The more you do to help the community, the easier it will be for others to help you. There’s a lot of groups that are dedicated to supporting allkinds of devs. Look for one that fits and contact them!
Second, be strong mentally. You’re likely trying to make it in this industry because you heard that there’s a lot of developer jobs. That is true, but it’s hard getting a job. It doesn’t matter if you tick all the boxes, getting the offer letter will be very difficult. Prepare yourself mentally for applying to hundreds of jobs. Yes, hundreds.
Let me give you an example, during my last search, I had to apply for dozens of jobs before I got a decent offer and my résumé is stacked. I am fluent in Objective-C and Swift, I was part of the team that won Best of 2019 from Apple and I have a lot of experience. Meanwhile, some of my students got their offers from their second or third application. Getting a job is so much more than technical and soft skills: it requires luck. How do you beat luck? You apply to as many jobs as possible and you do not relent.
Third and final point, you practice. You practice a lot – coding, code reviewing, agile, people skills, interview skills, everything. You find material to practice and practice and practice and you ask for feedback. It is very important to get feedback from others who are better than you.
There’s many, many great resources to help you practice. Paul Hudson (of Hacking with Swift fame) has a LOT of material on his webpage. I’m a huge, huge fan of Objc.io and I can’t recommend them enough; their book on functional programming really helped me level up.
And this is where I come in, I also have a book that will help you understand how I code.
I also send interesting iOS-related news and interviews from members of our community. Subscribe to improve your coding skills! Follow me on my weekly mailing list and I’ll keep you posted!