It’s been 3 years since I started teaching myself coding and then graduated from a full-stack coding bootcamp. In that time, I’ve worked mostly as an iOS engineer with some experience in Android development.
Spotify is a product that I’ve used and loved for years, I love music so it's an app that I use almost every day and so I was really honoured when this opportunity became a prospect. Besides the stress of interviewing, I did enjoy the interview process and I'm so happy to be joining them as an iOS engineer within the Design Systems team in Sweden.
Overall, it felt like a humane and thoughtful interview process. They communicated their expectations, made the process as convenient as possible, and they provided clear feedback during and after my interviews.
In this post, I will talk about my interview process with Spotify; how I prepared for the interviews and resources that might be useful for anyone preparing for an iOS interview.
So how did I apply for the job?
A bit of networking can go a long way, especially in tech. I know LinkedIn can seem spammy to some people but it was through the platform that those initial conversations with an engineering manager at Spotify happened. I think it's a good platform to make connections with people at different companies and it's a good way to put yourself on their radar when roles become available.
So my application process was a mix of initial casual conversations with a few people at Spotify and me applying directly through their website. After the initial conversations I had, I was able to get a better understanding of the opportunity and how the team worked, then I sent in my tailored application through their website. I was then contacted by a recruiter after a few days to begin the interview process.
I always recommend that people take this approach if possible — networking and creating some kind of connection instead of just sending an application — even though it may feel uncomfortable or awkward, it gives a higher chance of an application being reviewed. Especially when applying to a large company with potentially 100s of applicants, knowing that someone is looking out for your application reduces some stress and lets you focus on getting ready for the interviews instead of wondering if anyone even saw your application. Try to reach out to someone and get a referral, it's all about putting yourself out there.
The whole process, from my first interview to getting my offer for the role, took about 1.5 months. The interview process was split into the following stages:
- iOS and computer science questions
- Coding exercise
- Show & Tell
- System design interview
- Fika ☕️
- Design systems interview
- Behavioural and values interview
Before I go into each stage of the process in detail, I wanted to share some general practices that I found valuable during this interview process. I like to think of these as the admin work around getting ready for job applications and interviews.
1). Create or update your brag document
A brag document is a document listing all your accomplishments and it is a great document to maintain even if you're not interviewing.
Instead of trying to remember everything you did with your brain, maintain a “brag document” that lists everything so you can refer to it when you get to performance review season! - Julia Evans, https://jvns.ca/blog/brag-documents/
Julia explains in the article that a brag document isn't just useful when looking to get a raise or promotion — it helps you to reflect on the themes of your work, what's important to you and what you'd like to do differently. Since I heard about this practice, I've always tried to maintain a brag doc and update it every few months.
This document becomes useful when interviewing because it feeds into your job search, your job application process, talking about your work in interviews and, building confidence in your experiences and the value you bring with you.
2). Create a question bank
At each stage of an interview process, you’ll usually get some time to ask the interviewer some questions, this is a good opportunity to learn more about role or company and this is your time to also try to figure out if they are a good fit for you.
A question bank is simply a prepared list of questions — any questions that you may have for anyone that you interact with during the interview process, e.g. about the team or role or company. Whenever I thought of a question, I would add it to my list then for each interview stage I would pick the most relevant questions for my interviewers.
For me, the key benefit here is that doing this in advance throughout the process meant having one less thing to prepare for each stage and It also allowed me to refine my questions as I progressed through the process.
3). Document the process
Lastly, documentation and reflection. This is simply taking notes and reflecting as you progress through an interview process.
Documenting my interview processes is something I wish I had started doing earlier in my career because — How did I prepare for my last 2 roles?, What did I learn during the process?, What did I learn about myself? — I certainly couldn’t recall these things in detail so for this interview I knew I had to document the process for my future self.
This was especially useful when practising technical and behavioural interview questions, It usually takes time to prepare the answers for these stages so it can be helpful to recall how I’ve approached them in the past.
Then to reflect, after each stage I try to note down what went well and what I could have done better.
All the interviews happened remotely via Google Hangouts due to the COVID pandemic, this was the safest way to interview and it turned out to be very efficient and convenient. I will now go over what each stage entailed, along with tips and resources that I used to prepare for them.
The first interview was a call with a recruiter. In this call I learned more about the role, what they were looking for, the different teams that were hiring and I was given an overview of the whole interview process. This was like an introductory interview for me to share my interests, what I was looking for and why I applied for the job. Then I was asked some general questions about iOS development, my skills and my experience from previous roles.
In this interview, I think it's important to talk about why you applied, what interests you, what kind of work you care about and share your skills that are relevant to the role. At the end of the call, the recruiter confirmed that I would be getting through to the next stage.
I was interviewed by two iOS engineers, this stage involved about 10 iOS trivia questions and a coding challenge to build an iOS app from scratch in Xcode.
The coding challenge was done via Hangouts where I shared my screen with the interviewers and talked them through my process as I built out the requirements. After I finished the exercise, the interviewers asked some more questions about my implementation and then I discussed any other improvements that I could make to the code. In this part of the interview, it's important to clarify the requirements and make sure you understand them before jumping straight into coding, you're also encouraged to ask questions if anything isn't clear. Keep communicating whatever solutions you have in mind to help them understand your thought process. Then try to mention any other improvements to your solution even if you don't finish the exercise within the given time.
For the coding challenge, I prepared by building simple apps involving e.g. table views, collection views, networking, working with storyboards and building views programmatically e.t.c I tried to cover the fundamentals to ensure that I would be confident when I needed to do some live coding during the interview. I also practised any other exercises that I could find online and brushed up on my problem-solving skills.
To prepare for the trivia questions, I spent time studying and refreshing my knowledge on different iOS concepts from fundamentals to more advanced concepts. I practised with sets of interview prep questions that I could find online. When studying, I would prepare an answer for each question in my own words so that I could confidently explain during the interview.
After a few days, I heard back from the recruiter that I did well and I would be moving on to the final interviews. We discussed my feedback from the coding interviews and I was given a clearer idea of what to expect in the next interview stages.
The final interviews usually happen at Spotify's office, it would have been cool to get a trip to the Stockholm office but due to the COVID pandemic, they happened remotely like the first two stages. I think the team made it work, they were flexible with scheduling and they made it a convenient process for me.
There were four interviews in this stage.
The show & tell was with an iOS engineer and a product designer. This is similar to a take-home assignment which is given during some interviews, except here you're presenting some of your own work that wasn't defined by the company.
I presented one of my personal iOS projects in this interview. I talked about my process when building the app, the decisions I made, the design patterns, architecture and technologies used. I tailored my presentation and I tried to make it accessible for both a designer and an engineer.
To prepare for this interview I focused on certain areas that I felt were most high-value and would showcase the experience and skills that I had to bring to the role. I believe this approach really paid-off because I received great feedback on my presentation and the areas of the app that I chose to focus on. I particularly enjoyed preparing for this interview because I got to show the kind of work that I find rewarding which also overlapped with some requirements of the role I was interviewing for.
For the system design stage, I was interviewed by 2 iOS engineers. Typically this kind of interview would happen in-person with a whiteboard to discuss the design of the system but because it was a remote interview, we used a virtual white-boarding tool called Miro. This tool was shared with me in advance so I could get familiar with it before the interview.
This interview was focused on mobile system design and architecture patterns. I was given a simple mock-up of an app similar to Spotify, then focusing on specific screens and given some requirements, I was asked to design an architecture and implementation for the screens.
I found this stage tricky because I wasn't used to describing my ideas in real-time using a tool like Miro. I had to strike the right balance between clearly explaining what I was thinking and also drawing clear diagrams to show my solution. My interviewers were really helpful here, they engaged with me during the exercise and they gave clear signals to show when they understood my solution or when I needed to explain something further.
When I was preparing for this stage, I noticed that most of the resources available on systems design are tailored towards web, full-stack or back-end developers and not many cover what mobile systems design involves. I ended up studying quite broadly because I had never done an iOS systems design interview and so I had no point of reference.
Upon doing more research I did find a few resources related to iOS or mobile and I realised that I had already been exposed to the systems design process in my daily work. So I tried to think of how I usually approached building features, all the steps involved — from the initial feature requirements to getting an API spec, to deciding on which architecture & design patterns to use, to defining how data will be structured —are all part of system design. Working in an organisation where you're involved in the design process of features is beneficial in gaining experience here or if you have side-projects then you can use those to practice some systems design.
To prepare for this interview, it's important to get comfortable with talking about architecture and explaining the decisions you make when building out a feature. Get comfortable with drawing out clear diagrams to convey your ideas, doing this exercise a couple of times should help in getting you prepared especially if you'll be using a whiteboard.
When preparing, you can pick a screen from any well-known app and try to come up with a systems design for it. Start with a high-level design then go into more detailed design of each component. Some example prompts that I would use when preparing:
How would you define the different components needed to provide all the required functionality?
What architecture pattern would you use & why?
What would you name your different objects/models?
How would you pass data around different screens?
How would you store the data?
How would you ensure testability of your code and how would you test it?
If I were to prepare for this stage again, I would spend less time learning about system design from the perspective of web developer and focus on refining my ideas on the architecture of an iOS app. I did learn a ton from preparing for this stage and I felt like I got a refresher on a lot of web-dev concepts but yeah focus on what you're more likely to need on the job.
Fika is Swedish for a coffee break that’s more about socialising than drinking coffee. Fika is much more than having a coffee. It is a social phenomenon, a legitimate reason to set aside a moment for quality time. - https://sweden.se/culture-traditions/fika/
I found the concept of Fika quite cool when I first heard of it, I do like a good social/coffee break and I think it's nice that Spotify has incorporated this into their interview process.
So this wasn't an interview and they made that clear, this stage was a casual conversation with two other engineers from the design systems team where I could ask them anything. This allowed to me find out more about the team, their experiences at Spotify and about life in Stockholm.
This interview is specific to the role because I was interviewing to join as a Design System Engineer for their iOS platform.
I was interviewed by a design program manager and a product designer.
Here I talked about collaboration with designers and my experience with design systems — how to evolve and maintain them, their challenges and possible ways to solve them. This was one of my favourite interviews because it gave me a lot of insight into the team I would be joining and into Spotify's design system operations.
To prepare for this stage, I went over my resources on design systems and I went through all the information I could find on Spotify's design systems to build a better understanding of their approach and challenges.
The values interview is a behavioural interview. I was interviewed by 2 engineering managers for the designs systems team. Like most behavioural interviews this interview covered — questions relating to the company values, talking about myself, how I handled specific situations at work and how I work with other people.
After about two weeks, I got an email from my recruiter saying that I had passed and they wanted to make me an offer. My recruiter had also collected and shared the feedback from all the interviews. We discussed the compensation, relocation e.t.c and I accepted the offer after a few days 🎉🎊.
It's important to always do some research and gather data when evaluating an offer so I've created a list of resources to prepare for discussing compensation here.
Glassdoor and Google search is your friend when interviewing, use it for additional research when preparing for an interview and use it to gather more details on the interview process.
Having at least 1 personal project to showcase your skills can help you land a job. I don’t think it needs to be overly complex but something that shows how you structure code and what you care about when building an app goes a long way. Working on your own app and maintaining it can also be quite rewarding to see how your skills progress over time, especially if you use version control.
Having a good understanding of the fundamentals will always help and you should also be able to explain them to someone else.
Try to practice interviewing at least once a year to feel less rusty when you’re eventually looking for your next role, through real or mock interviews. This one is a piece of advice that I’ve heard a lot over my career, as it helps to keep up with the industry. It's not something I've done but I can see how it helps. I think finding some way to incorporate interview prep materials into my personal development is a way to try to keep my knowledge fresh even when I'm not looking for a new job.
I hope this has been helpful, If you have any other questions about my role at Spotify or relocating to Sweden, you can leave a comment here or reach out to me on twitter @funmmi.