First step was an initial chat with a higher up for fit and interest.
Second step was a "bug squash" - you clone a repo which has a bug in it represented by a failing unit test and you have to fix the bug. This is meant to highlight your thought process, communication, and debugging skills.
Third step is the meatiest - three one hour sessions with a half hour wrap-up at the end.
The first one hour session is app design: you put together a rudimentary traffic light system. This is meant to highlight your design and collaboration skills.
The second session was a comp sci / algorithm exercise. This tests your Big O/sorting algorithms/data structures knowledge.
The third session was a system design question. It's open-ended: how would you design an event capture system? This exercise tests your knowledge about application architectures (e.g. client-server) as well as devops-y kind of stuff like load balancing, background jobs, and databases.
The last part was a 30 minute wrap-up with another higher up. This is a place to give feedback about the interview and ask any additional questions.