Congratulations on your potential new job! I know it's a super nerve-racking process, but this is a major opportunity for you to find a great fit. In the last few years I've helped juniors nonchalantly, and this question always seems to come up. Especially for those headed into a technical role for the first time. I hope to lay out the good and bad here, so you can go in ready to tackle it all.
When can I start interviewing?
As soon as you feel "ready"! There is no metric, no knowledge you can acquire that will get you there. It really is a gut feeling. Here's the secret: no one knows everything (we'll cover this more deeply below). When you feel confident enough and have some code under your belt - go for it!
Do I need a portfolio?
Absolutely not. As an interviewer - all I'm expecting is a resume in document form. Sometimes I'll look at code samples on Github if listed or a candidates website, but not all the time. I've found code on Github to generally be years old, and websites that don't highlight what I want to know about someone. Talk to me about what you know now, things you're doing to learn/grow, and where you wanna go in your career.
Should I wait to apply?
Nope! So many have waited until X happens, with X being "my website is ready", "my app is approved", "my app is recoded from the ground up because I don't like it (raises hand)" etc. If you're ready in your gut, then you're ready to hit that apply button.
What material should I cover before the interview?
This ones tricky because it's very dependent on the potential team you're interviewing with. So here's my advice - build a simple app in Swift with some UIKit controls, table, button, input. Then see if you can hook up to an API and understand the core components of that plumbing (Codeable / Decodable). This alone will give you great experience to show off and talk about. Observe pain points you had and how you overcame them, and talk about that in the interview if given a chance. You've proven that you're a self-learner and can debug a problem when you encounter it. Way to go!
What is the next step if I already have been coding?
That's great! I would encourage you to either publish an app or work on an open source project. Observe what people with more experience are doing, ask them why or research what maybe the reason. Example: Someone's using a guard statement, so you might look it up and notice it's a good way to unwrap an optional for use within a function. Growth, and you learned a fancy new way to flatten out some if statements.
What if they ask a question I don't know?
It's ok, and expected that you're not going to know everything! I wish I could get all the hours back that I crammed last minute knowledge, hoping to avoid this awkward scenario, but I've since learned to embrace it. Every year a new iOS version comes out - new features, deprecated code, new code, new architecture patterns, etc. Every year, and all year long I learn more and more. How can anyone keep up? You can't. So, you say "I'm not familiar with that - could you highlight it for me?" or "I'm not sure - but I'm going to jot it down and research it later" (then follow through).
What can I expect out of the interview process?
I've been in and a part of various interviews, and the process seems pretty similar among companies. My experience has been mostly corporate, where the start-up interviews have been more straightforward. Remember, you can and should always ask what the next step will be in their process.
- Phone Screen - Here you may talk with a manager, some team members, a recruiter, or a mix of all three. Usually this is a casual conversation around your experience (yes, side projects are experience) and what you're interested in from a tech stand point. You may get some high-level tech questions here. It will vary off your experience, but some examples: "What's your favorite app and why", "describe the parts of an if statement", "when would I use ______".
- Technical Screen - If your first screen is done without technical people on the call, sometimes this step will be there for a conversation with technical people. This can align with number 1, but include more tech-driven discussions.
- Take home assignment* - This one hasn't been done in every interview, so hard to say what will happen. But I've had it before and after in-persons also! It's a real wildcard. Anyway - for this step, you'll be given directions on creating an app at home. You'll have so many days/hours to do it, sometimes it's timed over commits to git.
- In Person / Virtual - Usually the last stage in an interview. With this new COVID world, results may vary. However, here you can expect to meet members of the team face-to-face, have some more discussions on your background, career aspirations, and get some questions around problem solving, coding, iOS as a platform, and more. This is often where white-boarding takes place and live-coding. Another post for another time - but if you find yourself in either a white-board or live-code session - Have a conversation with the people there about it. If you get stuck, ask for help or tips.
Unwritten rule of interviewing: Always have questions to ask. You can read more in another post of mine: Interview Questions You Should Ask
So there you have it! I hope this gives you a better idea of what to expect ahead of your new adventure and BEST OF LUCK in your interviews! You're going to rock it.