by Radu Raicea

How I got an internship at Shopify

Xb38mzc0SlcMBkQXbbcGrtG2C0lexl9WcbD0

The interview season for the 2018 summer internships is finally over. After over a month of interviews and tests at multiple companies, I will be joining Shopify as a Back-end Developer Intern.

In this article, I want to take you through my process for applying, preparing, and interviewing at Shopify. I also want to share with you some tips that I use when I apply and get interviewed for jobs.

Quick Intro

I’m currently an undergraduate student at Concordia University in Montreal, Canada. I’m finishing the third year of my BEng in Software Engineering.

I’m also part of the COOP program, which requires me to complete three internships throughout my bachelor’s degree. My first two internships were at Ubisoft and Vigilant.

My last internship will take place this summer, and I will be working at Shopify in Montreal.

What is Shopify?

Simply put, Shopify’s platform allows businesses and individuals to easily sell merchandise online.

Shopify guides you through the process of setting up a store front, managing your inventory, accepting various payment methods, and shipping. There’s even a point of sale (POS) system to use in-store!

As far as working at Shopify goes, they’ve won Glassdoor’s Best Place to Work in Canada 2017. They’re also known to have brilliant people in their respective industry.

The Application Process

Shopify has an unique recruitment process for interns, and that’s clear starting with the application process.

To submit my application, I needed to complete three tasks.

1. Creating a Shopify Store

The first task was to create a fictional Shopify store. It was a way to familiarize myself with the platform and understand what merchants go through to create an online store front.

I created a Japanese Sweets and Pastries store. I wanted to make something that was a bit more original than a typical fashion, beauty, or electronics store.

I think that the secret for this step is to create a fictional story around your store. Then, the design of the store and its inventory should come naturally.

2. Completing the Technical Challenge

The Back-end Developer Intern position had a technical challenge associated with it.

The challenge was to create a validator for a graph data structure. I decided to use Python to do it.

I really liked how the challenge was linked to the Shopify platform (or at least it seemed to be), rather than being a meaningless algorithmic problem.

I believe that for this part, it’s extremely important to make a simple solution. Since there are so many ways to solve the problem, it’s also crucial to make your solution intuitive and well documented. I made great use of Python docstrings to accomplish that.

Lastly, do not go further than the requirements of the problem if it means to make your solution more complex. It’ll only hurt you.

3. Answering the Application Questions

The last step of the application process was answering some questions.

I wrote about the kind of work I’d like to do during the internship as well as how my experience was throughout the application process. I also wrote an idea for Hack Days (Shopify’s quarterly hackathon).

I put a lot of effort into answering those questions. As with any application, the amount of effort you put into it will clearly show how interested you are in working there.

It’s also important to be honest about what you write and to show your passion through your answers.

For the Hack Days idea, try to think of something that could have improved your life at work during your previous internships and experiences. Think about aspects other than work itself. Make it fun!

The Interview Process

After waiting a few weeks, I received an e-mail to start the interview process!

My interview process was split into two parts: a life story video call and an onsite technical interview.

Life Story

My life story video call lasted about 45 minutes and was with a recruiter from the Talent Acquisition team.

From my understanding, the purpose of the life story is for the recruiter to know you on a more personal level. They want to know what your resume doesn’t say. I talked about topics like my travels, interests, hobbies, past experiences (nothing technical), and how I developed my passion for programming.

This was one of my favorite parts of the process. It was very casual and it just felt like meeting someone new and sharing your, well, life story!

While there was nothing to prepare for in this part of the interview process, I made a list of all the different topics I wanted to talk about. I kept it on my screen to make sure I didn’t forget to mention anything I deemed important.

I think the most important elements during the life story are to be honest, stay casual, and actually know your life story. View it as a conversation!

Onsite Technical

A couple weeks later, I received an e-mail to schedule my onsite interview. It was going to be split into two parts: a personal project analysis and a technical problem. I was going to be interviewed by two developers.

For the first part, I needed to bring in a project in which I’d done a significant amount of work on.

At that time, I was planning to start a project to fix a problem I was having in my everyday life: spending too much money on food from restaurants.

I wanted to create an Alexa app on my Amazon Echo that’s aware of the ingredients I currently have and suggests recipes based on what I have in stock. It was the perfect opportunity to hit two birds with one stone.

However, I wanted to hit a third bird too. I’d wanted to learn Ruby on Rails for a very long time. Since Shopify’s platform is built on Rails, I thought it’d be a great idea to use Rails to make my Alexa app.

I quickly did the SoloLearn Ruby Course and learned the basics of Ruby on Rails from the official Getting Started Guide.

Then, I used my newly learned knowledge to make Alexa Fridge!

n4x8d0Y4D90F7K9orKAYX-jdRJCE3vgfToon
Credits to g-harel for making this awesome logo for my project

During this part of the interview, I was asked to present my project from every aspect. I went through the code and showed how I implemented various elements. I was also questioned on my design decisions.

It goes without saying, but you should really know your project inside and out to be able to answer any question about it. It can help to prepare some documentation beforehand (especially diagrams) to show different aspects like your infrastructure, database schema, or how an API you used works.

For example, I brought this diagram to show how my server communicates with my Amazon Echo:

cELL2TjStdg11o1S9s3nQ33gpktSLeKKp3sT

I think it’s also beneficial if you’re able to bring a project that you can demo. It’s hard to grasp the significance of your work if you can’t show the result.

For the second part of my onsite interview, I needed to solve a technical problem.

I was told beforehand that this would not be an algorithm to write on a whiteboard (yay!). Instead, it was a problem that I needed to make design decisions to solve.

For this part, I really recommend learning more about system design. You should have an idea of how to organize web and mobile applications, how to design a database schema, how to authenticate, and so on.

Some of these topics are learned during a Software Engineering degree, but some others are not. I recommend checking Hired In Tech’s System Design training camp and High Scalability. Both are excellent sources to learn about system design and to see how big companies architect their applications. Pay close attention to the trade-offs that come with every design decision.

When you work on system design problems, make sure that you always clearly state your assumptions and understand the requirements.

Also, don’t be shy to ask questions if you need to! You have two developers in the room with you, and you’re allowed to get some help from time to time. It’s as important to ask the right questions as it is to answer them (you have Google for that anyway).

Lastly, always think out loud. It’s very important for interviewers to know how you think.

I try to think out loud as much as possible during these kinds of problems, even if my train of thought is wrong. However, if it is wrong, it’s important that I realize it and correct myself.

The Offer

About a week later, Shopify contacted me with an offer and I accepted it!

Takeaways

I really enjoyed the uniqueness of both the application and the interview process. It allowed me to showcase more than just my technical skills!

Here’s a summary of the tips I shared throughout the article:

  • Put yourself in a merchant’s shoes when creating the online store, and immerse yourself in their fictional story
  • When doing the technical challenge, look for simplicity and document it well
  • When writing your answers for the application questions, put in a lot of effort, be honest, and show your passion
  • During the life story, be yourself and know your life story
  • For the onsite, bring a project that you know well, and know why you designed it the way you did
  • For the technical problem, state your assumptions and requirements, and think out loud

Thank you for reading my article!

For more updates, follow me on Twitter.