1. Phone Screening: very general, about where I had worked, what I had done there, projects I was involved, etc.
2. Technical Phone Interview: after 2 weeks, technical questions (OOP, language paradigms, design patterns, OOP pillars, etc).
3. Personality Assessment and general problem solving: after 4 days, online survey about personality traits (the most boring thing I've done for a company), and some hard and time-limited problems (3 minutes each). The problems were like "if person A arrives to work before B, C arrives before D, and D arrives before B, then which of the following is not possible ...."
4. On-site interview: after 7 more days, very nice people, nice facilities, and I got to know a lot about satellite technology on the tour. They had a whiteboard where I programmed pseudocode, they made a requirement and I designed and implemented it, then they kept elaborating on the requirement over and over. Also some questions about my CV.
5. Request for references: after 4 more days, I got an email asking for work references before sending the offer letter.