For those who may not know Stripe, it is a complete payments platform. It provides a suite of payments API that powers commerce for online businesses of all sizes.
I have used their website/api and to be completely honest it is by far the best I’ve seen. Therefore, I decided to interview with them a couple of months ago for a Software Engineer position in Dublin. They don’t have levels in their org, just Software Engineer.
The interview process started with the recruiter reaching out to me on LinkedIn. I had not applied there from my side but that doesn’t mean I didn’t want to work there. It’s just that I wasn’t aware they were hiring in Dublin. Anyway, I replied back to the recruiter saying that I am interested and he scheduled a call after 2-3 days to explain the interview process and to see whether I am a good fit for the role and company. It went well and soon he shared a link to book the first interview round that would happen over zoom and coderpad. He also shared a doc explaining stripe’s interview process and the different rounds involved.
I scheduled the first round, i.e, Phone Interview, after a week or two so that I could research and prepare myself. Prior to the interview, I had zoom and everything installed, checked my mic and camera, etc. I got the name of the interviewer in advance so I did a quick google search about him and learned that he was from MIT. I tried not to get nervous and use this energy in preparation. Finally, the day arrived and I was ready for the interview. The interviewer was extremely kind and friendly that helped me to be at ease. We started by introducing ourselves and then we moved to our first question. The question was composed of multiple parts and he moved to the next as I finished coding each part. I was able to reach the 4th part, not sure if there were more but I think if you reach the 3rd part and your code is readable then you should be good to go to the next round. He provided me a list of records and told me to write a function to fetch the record with the minimum value. After I was done with this, he asked me to modify the method to take an extra parameter and return the record with the minimum as well as the maximum value based on the passed parameter. Then we moved to the third part, where I have to use a comparator to do the above. Lastly, the fourth part was to handle ties which was easy to do. It was around 44-50 mins when I completed the 4th part so he said let’s move on to questions if you’ve any and I took this opportunity to ask a few questions about the team and the company’s culture. Please, do note that this is a very high-level overview of the question, in reality, the question was slightly more convoluted but not hard. Also, there would be boilerplate code already in place and you just have to code the meaty logic.
In a day or two, the recruiter called me and gave the feedback on the phone interview and was delighted to let me know that the round went very well and he is happy to schedule my onsite interview. He shared a link to goodtime.io and asked me to mark a couple of days for the onsite interview in Dublin. As I was already working in Dublin, they didn’t have to make any travel or hotel arrangements. I submitted my dates and the recruiter soon emailed me another doc explaining the onsite interview process at Stripe. I went through this doc, gleaned over glassdoor, google, blind, etc. and noted down some of the areas to prepare myself.
The day finally arrived and I was prepared for the long day. There were 5 rounds of 1 hour each and one more hour for lunch, so in total 6 hours. I do not mind this but for me, it was one round at first and then lunch and then all the rest of the rounds were back to back. This was a bit tiring for me and I wished to do at least 2 rounds before lunch as in my Spotify Interview in Stockholm. Anyway, I started my interview with full vigor, even after knowing the above schedule, as the first round was the most intense of all and you can’t prepare for such a round in a week or two. Doing well in such a round comes with practice. They named this round Bug Squash. I was asked to set up my laptop, my language of choice, and finally, I was asked to clone a famous open-source project in that language. After I cloned and imported the project onto my IDE, I was given an actual bug that was filed on GitHub on that project in the past. My task was to figure out the bug and fix it within one hour while the two engineers would be looking at the widescreen that mirrored my laptop. While you’re debugging, the two engineers may guide you if you’re going in the right direction or drifting away from the real issue. In my case, they added a unit test that caught this bug and I was supposed to fix this test. I managed to find the bug in the code at the last minute but the fix was an easy one.
After the intense first round, I went for lunch with an engineer, who was cordial and welcoming. He gave a short tour of the office and showed me some of the nice perks the office had, like a drawer full of chocolates, etc. We then headed towards the cafeteria to have our lunch. The cafeteria was okay and the lunch was decent, if not sumptuous. I took this time to ask a few questions about the culture here, as different locations of the same company have different cultures, and the project he was currently working on. I had light food but consumed a lot of natural sugar to give me the energy for the entire day. He brought me to the interview room after our lunch/chat and I made myself and my laptop ready for the next round.
This was the Integration round where again I had to choose a language and then I was asked to clone a project in that language. This project had existing code and my task was to understand the code and add some more code to it. I chose Java and my question was to read a file that had an array of request data and make HTTP POST calls with this data and print out the response. The expected output was 200 OK for all the requests. The method to read a file was already provided and I was expected to use it, I guess that’s why this round is called “Integration”. Regarding the HTTP calls and JSON parsing, they already had some good libraries added as dependencies in the project. I just had to read their documentation online and use the required APIs of theirs. I was able to complete all of it within 30 mins or so as I was comfortable with the language as well as the libraries this project used. I took the rest of the time to ask questions and chat.
Next was the Design round where I was given a very high-level requirement and my task was to cross-question, jot down specific requirements, and design the product end-to-end. In this interview, I was asked to design a monitoring service like Datadog or SignalFx. I kept asking questions until I was clear what the interviewer wanted from me. But do not extend beyond 5-7 mins as you have to manage the time too. You can ask questions as you design. In fact, I have a personal template for design questions which I use in all design interviews and the first step is to ask clarification questions. I may publish my design template on a separate post later.
The second last round was again coding called “Programming Exercise” where I was given an algorithmic question and I had to write code from scratch. To be clear, this was more like leetcode style question and I would categorize it as leetcode easy. You’re free to code in any language of your choice but make sure the language supports some data structures, if not all, out of the box to make your job easier. I completed this round within 15-20 mins and we had a lot of time left so I improved the code and made it generic. Even this was done in 5 mins so we spent the rest of the time chatting about the company’s culture, team, projects, etc.
The last round was the Managerial round. We started by introducing ourselves and then I was asked the banal, yet a very important, question––why stripe? Next, I was asked another platitude, where do you see yourself in the next 5 years or so? After this, he scanned my LinkedIn profile, he had it open in front of me in fact, and asked questions on it. He asked me why is there a gap of 3-4 months between passing out of college and joining your first job. I told him this is normal in India as companies like TCS and Infosys hire a large number of candidates and start their training in batches and my batch started 3-4 months later. However, I think he wasn’t happy with this answer. Next, he asked me another, somewhat strange, question from my LinkedIn profile, i.e, why I tend to leave companies after getting promoted. To be honest, I hadn’t realized this until this moment, however, I think I gave a good answer to this. We chatted for almost an hour discussing a gamut of topics but I wasn’t happy with this round for some reason. I thought this round could have been better. Maybe the long, strenuous, and continuous interview rounds had something to do with it, not sure. Having said that, I had a smile on my face until the very end, no matter how my interview went as after all it’s learning and experience for me. Moreover, my previous rounds had been great so I was a bit relaxed. Finally, the interview was over and the recruiter was waiting for me outside the interview room to accompany me to the exit door and also told me when to expect a callback from Stripe.
After a week or so I got an email from the recruiter saying that the interview went well but I didn’t match the manager’s requirements and therefore, they won’t be extending an offer at this time. My hunch was right. I was a tad sad but I had other interviews lined up so continued preparing for them. I was sad only because I am usually good at managerial rounds but for some reason, the managerial round didn’t go well that day. The good thing about this interview was that they even called me to give me the feedback verbally. I think it’s helpful to get proper feedback and closure.
That’s all I had to say about my experience interviewing with Stripe. I hope it helps you in your preparation. All the best!