First contact was a phone call with the recruiter. The usual why you want to change, information about the position I've applied to, etc. Then also a set of technical questions on the lines of "would you say this call is using UDP or TCP." The call lasted around an hour.
After that there was a take-home practical exercise to be delivered in approximately 24 hours. The exercise demanded working python code and it was rather simple.
The third step consisted of a sort of research of a piece of code (Ubuntu's Juju in my case) aiming at you explaining it in a call to a group of engineers. For this task there was no hard requirement of time, but one week was a good baseline. The call itself lasted a bit over an hour, with screen sharing where I was asked to explain what the code was doing as I showed it on the screen, and also how I had generally tackled the activity.
The final step was what they called a "panel interview." It consisted of another one hour call with several engineers and non engineers. Very high level managers were present, and the questions were among the weirdest I've ever been asked. One particular example is "you can live a parallel, fictional Universe, how would you describe it?" They took turns to ask a set of questions each, and the nature of the questions varied a lot from individual to individual. Some were more technical, like "if you're given a big set of requirements for a very big project, would you read them all before starting development or not?"