I was contacted by a recruiter who was really friendly and helpful. He explained I'd get a 15 minutes call with him first, then a longer HR interview about 45 minutes - about my past experience and future plans etc, - and then the online coding interview which was two short (10-15 min) and uncomplicated codility tasks and a range of short questions from very different IT topics probing the extent of my knowledge. They have a prepared sheet with those and I suppose the questions are similar for all candidates, for example - what is TTL in a data packet, how database TRUNCATE differs from simply deleting all records from the table, etc.
After that, they didn't contact me for a week or so and though the interview wasn't difficult, I thought that I probably didn't make it. I wrote to the HR to confirm that, and unexpectedly she responded that no in fact I didn't fail and it was their fault for not contacting me, but they are excited to invite me to the last stage, the onsite interview.
The onsite interview contains four parts which Spotify describes as follows.
Culture interview: This is an opportunity for us to learn more about the engineering cultures you’ve been exposed to, and how you see yourself growing at Spotify. Topics may include agile practices, your approach to conflict & resolution, details about Spotify’s organizational and engineering structure, and communication and teamwork skills. The focus is on your real life examples from your experiences, so try to be specific.
Coding interview: Writing a program to solve a problem, by devising an algorithm and/or using common algorithms and data structures to aid you. You'll be asked to code solutions to problems, discuss their complexity, optimize them, and so on. We'll evaluate you on your thought process and your communication skills, as well as the correctness of your answer. You can code in the language of your choice - we'd prefer Java or Python. Please note that the interview will be done on whiteboard.
Case interview: You'll be asked to diagnose and fix a problem with a backend system. We'll give you an outline of the system and an alert telling you what's failed. You then ask your interviewer questions about the state of the system, isolate the problem, and formulate a solution based on their answers. We’re more concerned with your thought process and approach, rather than getting to the exactly correct answer.
System design interview: An interview about designing, building, and scaling systems. You should be prepared to talk about load balancing, system availability, caching, choice of database, and similar topics.
I think I probably didn't do too well in system design. The case interview was really interesting and I did get it, but after a few hints and nudges in the right direction. The coding task didn't contain any complicated algorithms but was still a little challenging because of the whiteboard. However much you practice with online tools like Leetcode, Hackerrank etc, it doesn't really help much with a whiteboard interview, so be warned.