The hiring process was split into multiple parts. The first involved an online HackerRank test to be completed in 2 hours. 5 questions were provided, with a minimum of 2 needing to be completed to advance to the next round. The questions involved filling out function signatures (no I/O handling requirements) and were either common or similar to common problems. These ranged from problems involving graphs, regular expressions, and recursion.
The next stage involved a brief ~40 minute conversation with a recruiter. This felt less like an interview and more like a general conversation. It involved going over some of the experience listed on my resume and going into some depth about them. This included questions about languages I used, what I like and dislike about them, and my general strengths and weaknesses in my software development skills. I was asked about the company's values and which I resonated with most and why. I'd recommend reading about them beforehand to have an answer prepared. I was also asked about Atlassian products and my familiarity with them. Details about the role, such as the format for the graduate program, company culture, office amenities were also discussed.
The final round involved three lots of 50 minute interviews back to back in one day (i.e. a 3 hour block of time with about 10 minutes between interviews). This involved Skype interviews with three different engineers, each with their own interview format.
One was what can be best described as a general knowledge test. About 10 different questions were asked, ranging from data structures, systems programming, networks, to software engineering practises (think Agile and its nuances, git workflows, how to develop software as a team). Each of these questions would start simple, with opportunity to delve deeper into each question with followups until I either gave a satisfying amount of detail or was unable to answer.
One of the others involved a screenshare with the interviewer. It involved pair programming an implementation to a variety of Java functions. This was what felt closest to a classic programming interview, and followed a similar flow and format. JUnit tests were given in the skeleton code provided and the idea was to make as many pass as possible in the time limit.
The third interview involved explaining a previous project to the engineer. This started with a general overview of the project, then went into technical detail about challenges faced in it, how they were overcome, design choices I was proud of, etc. An intimate knowledge and memory of the project was expected, as technical explanations were valued over high level generalisations.
Up until that point the turnaround time for receiving feedback from previous interviews and being invited for the next stage was 1-2 days. After completing the final round, it took about a week and a half to receive a phone call extending an offer.