1. Call with recruiter to establish baseline and ask common recruiter questions.
2. Coding challenge with 2 software engineering members.
3. System Design question (whiteboarding) - how did you design a previous application? Looking back, would you do anything differently? They asked specific questions regarding this. After this step, many questions regarding caching and distributed caching were asked.
4. Meeting with manager I will work with. Asked core Java concepts such as polymorphism and the benefits and use cases.
5. Meeting with Product Manager. Much more high level and personal. My background, what I enjoy doing, etc.
Overall, every step of the process was challenging (outside of the meeting with the pm, which was a nice conversation). Every step of the process left me with specific ideas and concepts that I knew I could research more and improve on. The coding challenge and system design are definitely meant to start you off with a challenge and the interviewers will extend helping hands or guidance as needed.
I was very happy to have been extended an offer. Every engineer I spoke with was clearly extremely talented and I could tell there's a lot of growth to gain by working with them.