Engineering Interview

Our interviews are all about realistic challenges - we want to see how people solve problems using the core tools provided with the language, to gauge understanding of fundamentals. Be prepared to demonstrate your abilities without the assistance of frameworks or plugins.

Format of the Interview

With your own laptop, you’ll be working alongside Canva engineers, tackling tasks related directly to the role you’re applying for. You will also be in conversations about methodology, best-practices, and theory along the way.

Before your interview

Learn the programming language

The interview will require writing real code, not just pseudocode — Java for backend and Android, JS for frontend, and Swift for iOS. Not much experience? It’s not over yet, we have hired great people because they were able to demonstrate their ability and passion to learn.

Before your interview

Warm up your knowledge

Brush up on your computer science principles, keeping in mind performance, concurrency, scalability and resiliency. It’s not a closed book exam, you’ll have the web at your disposal - just explain yourself along the way.

Engage with your interviewers

Explain your approach to the problem and verbalise your thinking. More important than solving every problem completely is demonstrating good reasoning and logic. We’re looking for people who will work well in teams.

Ask for clarification

If you don’t understand the question, just let us know. Ask what the requirements are, and ask questions along the way. Ask “does that answer the question?”. None of this makes you look silly, it’s just part of communicating around a task.

Think high level, then get specific

Think first about how your solution will work at a high level. Define abstractions, classes and functions, and work out a structure for your code. Then move onto the implementation.

Dig up

It’s not hard to go down the wrong path sometimes as you solve problems. We understand that. If it happens, the most important thing you can do is realise it, communicate that with us and start to dig your way out of it. Don’t persist down the wrong track! We will make some effort to keep you on track - so if we tell you something, make sure you understand or clarify it.

Don’t deviate from the task

We want to know that you can solve problems, so stay on the track of the main question we’ve asked. Sometimes if a particular small detail isn’t working, it’s best to explain how you might start tackling it, work around it and move on.

Explain the flaws in your code

We want to know that you can write production quality code, but quality code takes time. Try to follow best practices, but if you have to take shortcuts or leave things out, just explain that to us. That way, we know that you know. If there are edge cases you haven’t handled, don’t hope that we haven’t seen them - let us know that you’re aware of them, and ideally how you would handle them given more time.

Role-specific preparation

Demonstrate your ability to create clean and modular JavaScript, building user-friendly UIs, maximising browser performance, solid understanding of asynchronous concepts, and how to troubleshoot unexpected results and behaviour. For additional reading, check out the book ‘You Don’t Know JS’ by Kyle Simpson (available on GitHub).

Demonstrate familiarity with the standard Java libraries and SOLID development principles - we want to see how people solve problems using the core tools provided with the language, to gauge understanding of fundamentals. Common data structures such as arrays, lists and maps. Check out the book ‘Effective Java’ by Joshua Bloch.

In the final interview you can choose between Java and Kotlin. Make you know about RxJava and Android testing, including jUnit and Mockito. Joshua Bloch’s book ‘Effective Java’ will also be useful here.

Aim to be able to make UI features quickly, meet a designers requirements, and fill in the gaps. Make sure you’re familiar with idiomatic Swift coding, as well as common software architectural patterns and where you would use them.