I inerviewed at Revolut in April 2024 first, and then in October as well. The interview process is unncessarily long at this company.
You have the first stage with the recruiter who asks you technical questions without having any underatanding of your responses. They are just after some buzz words. But if you’re working with Java you can get it right.
And then I cannot really recall now, but there were one or two rounds of core java interviews. Maybe just one… It was really in depth, lots of internal working of the Java concurrency and multithreading libraries. With 20 years of experience, it was hard for me. This round was designed more for someone just coming out of the university with lot of lexical knowledge. I am more like practical guy, and luckily there was a pair programming exercise as well, where I could shine. I had to write a simple money transfer class. Obviously, focusing on concurrency. If you write the simplest thing coming to your mind, you’ll get this right.
The next round was a database interview. They require in depth knowledge about indices and transaction isolation levels. If you use these things, and you know what are they, how and when to use them, that’s just the half of the job. You need to prepare for the “why”s… Just like the previous round, they need the theoretical knowledge and not the practical application of it. With my experience i’m better in practicalities, but after some learning and preparation, I got through this round as well.
And then here we are, I failed the system design. Actually, twice. There were similarities between how I failed in April and October. I went ahead with the design after clarifying the requirements and some basic estimations about the required storage both times. At the first interview in April, we agreed with the interviewer that the 3rd party API what I need to depend on, is a safe one, it produces consistent results all the time. This is important, because that made the solution more appealing to a synchronuous system, just becauae of simplicity and it was easier to reason about that. I started to design the system and explained what I do. But before I finished with every previously agreed requirements, maybe 20 minutes before the end of the interview, the interviewer told me this: “You know what, let’s make that 3rd party API not safe and not consistent in responses!” Well, that was a bit unexpected, because I put significant effort in covering every edge case, and it also put the whole sync solution out of context and I had to restart… But magically, I managed to finish to design for every requirements, but obviously not at the detail how I originally planned. You can guess what was the feedback… Something like this: The candidate spent too much time on clarifying the requirements and estimating the capacities, so he didn’t manage to finish with all the requirements in time. They also mentioned that I needed significant guidance to make the system async. Well, I answered to Revolut that I don’t think 5 minutes is too long for clarifying the requirements, and this is what the practice videos they send out for preparation suggest. I also mentioned to them, that everything was finished, however I must have admitted not at that detail what I’d be proud of. But that happened because the interviewer changed the previously agreed requirements 20 mins before the interview was finished.
No surprise, Revolut ghosted me. Until last October when they dropped me a message, obviously some template, saying they were amazed by my experience and performance in April and they’d like me to re-take the system design round. If I was that amazing why wasn't I let through to the next interview? I was a biz shocked at the first time. But based on my previous experience, I thought, I could do it, this time.
Oh boy, I couldn’t be more wrong on this. At this time, I didn’t spent 5 mins on requirements. But at the end, I asked the interviewer if he was happy with the features what I plan to cover or he wanted to add something else as well. He was happy with it. So, I designed the whole system in time. I had to use a 3rd party API again. I went for a simple, but reasonable solution, because I didn’t want surprises at the end. And yes, I covered everything, designed everything. But I didn't have a good feeling about it, because despite I communicated clearly, and always said it out loud what I was doing and why I was doing that, the interviewer always asked for explanation for basically, everything. I know that's their job, but he did it in a way, that he wanted to express his superiority over me. At least that's what I felt.
He was just a little bit more than half of my age (based on the looks), so I am sure, I've designed way more systems then he'd done, but, of course, I didn't mentioned it. And I was very polite even he wasn't and tried to reason about why I think my idea is the one what I should focus on. Or when he had a good point (yeah he had that once), then I made it part of my design. So, I hoped for his objectivity, because I covered everything what we agreed before and it looked to be OK.
What do you think about the feedback... Yeah, I needed significant guidance on how to design a system and focusing on the most important things. I haven't talked about anything else, just the previously agreed requirements. Not more and not less. In this design I had to do something similar like when you book a flight ticket or cinema ticket. You know, you chose your seat, and then pay. And between this time the seats are reserved for you, and other customers cannot book it, This guy might not have done any of these before, because he wasn't familiar with the concept of booking a seat in cinema or on a flight. I am not saying that was my task, it wasn't but the core of the problem was very similar to this. And this was another huge "mistake" from me. I don't want to mention more, because it looks like everything was wrong what I did and how I did it.
I thought the system design is an open ended interview questions. There are no right or wrong answers. But this guy only wanted to see his solution and wasn't opened for other approaches at all. So, I think, I've failed the interview before even starting it...