Interview season for 2018 summer internships has ended. After more than a month of interviews, tests and testing at various companies, I have been hired by Shopify to be a Back-end Development Intern.
This article will show you how I apply, prepare, and interview at Shopify. You will also find some helpful tips when you apply for jobs and are interviewed.
I am currently an undergraduate student at Concordia University, Montreal, Canada. I am currently finishing my third year in Software Engineering, my BEng.
My final internship will be this summer. I will be working for Shopify in Montreal.
What is Shopify?
Shopify’s platform allows individuals and businesses to sell merchandise online.
Shopify will guide you through setting up your storefront, managing inventory, accepting payment methods, shipping, and more. You can even use the point-of-sale (POS) system in-store
Shopify has been awarded the Best Workplace in Canada 2017 by Glassdoor. They are also known for having brilliant people in their industry.
The Application Process
Shopify offers a unique process for recruiting interns. This is evident starting with the application process.
Three tasks were required to submit my application
1. Create a Shopify Store
First, I had to create a Shopify store. This was my first step in getting to know Shopify and the process of creating an online storefront.
I started a Japanese Sweets and Pastries shop. I wanted to create something a little different than the typical electronics, fashion, or beauty store.
My secret to this step is to make a story about your store. Next, you can design the store and the inventory naturally.
2. Completing the Technical Challenge
There was a technical problem associated with the Back-end Developer Intern job.
It was a challenge to create a validator that could be used with a graph data structure. To accomplish this, I used Python.
It was a great idea that the challenge was tied to Shopify, or at least it seemed like it was.
It is essential to find a simple solution for this part. There are many solutions to the problem. It is important to be clear and concise in your solution. To accomplish this, I used Python Docstrings.
If you are trying to solve a more complicated problem, don’t go beyond the scope of the problem. You’ll only regret it.
3. Answering the Application Question
Answering some questions was the last step in the application process.
I described the type of work I would like to do during my internship and how I felt about the application process. Hack Days, Shopify’s quarterly hackathon, was also an idea of mine.
These questions were very difficult to answer. Like any application, how much effort you put into it will show how interested and passionate you are about working there.
It is important to be truthful about what you write, and to express your passion through your answers.
Hack Days is about identifying something you could have done to improve your work life during previous internships or experiences. You should think beyond work. Have fun with it!
The Interview Process
After waiting for a few weeks, I received an email to begin the interview process.
My interview process consisted of a video chat about my life and an on-site technical interview.
The Story of Life
The video chat with me about my life was approximately 45 minutes long and was conducted by a recruiter from Talent Acquisition.
According to my understanding, the purpose for the life story is to allow the recruiter get to know you better. They are interested in what your resume does not contain. I spoke about my interests, travels, hobbies, past experiences, and how I found my programming passion.
This was my favorite part of the whole process. It was casual, and it felt like you were sharing your life story with someone else.
Although there wasn’t much to prepare for, I did make a list of topics that I wanted to discuss. To make sure that I did not forget any important points, I had it printed and kept it on my screen.
The most important aspects of the life story are honesty, casuality, and a genuine understanding of your own life. It’s like a conversation.
Technical Support on-site
Two weeks later, I received an email inviting me to schedule my interview at the onsite. The interview would be divided into two parts: a personal problem analysis and a technical problem. Two developers were going to interview me.
The first part required me to bring in a project that I had done significant work on.
That was when I decided to launch a project to solve a problem in my daily life, which was spending too much on food at restaurants.
I created an Alexa app for my Amazon Echo. It’s able to recognize the ingredients I have and suggest recipes based on them. This was the perfect way to kill two birds with one.
But I also wanted to catch a third bird. Ruby on Rails was something I had wanted to learn for a long time. Shopify’s platform is built upon Rails so I thought it would be a good idea to use Rails for my Alexa app.
In this section of the interview, I was asked about my project and how it was implemented. I reviewed the code and demonstrated how I implemented different elements. I was also asked about my design decisions.
This is obvious, but it’s important to know everything about your project in order to answer any questions. You can prepare documentation (especially diagrams) in advance to illustrate different aspects, such as your infrastructure, database schema or how you used an API.
It’s great if you have a demo of your project. If you don’t have a tangible example of the results, it’s difficult to understand the importance of your work.
The second part of my interview was onsite. I had to resolve a technical issue.
This was not an algorithm that I could write on a whiteboard. It was actually a problem I had to design solutions to.
This is where system design comes in handy. It is important to have a basic understanding of how to organize mobile and web applications, how to create a database schema, and how to authenticate.
While some of these topics can be learned in a Software Engineering degree program, others cannot. Hired In Tech’s Software Design training camp or High Scalability are both worth checking out. These are great resources to learn more about system design and see how large companies build their applications. Be aware of the trade-offs involved in every design decision.
Make sure you clearly define your assumptions when you are working on system design issues. Also, ensure you understand the requirements.
Don’t be afraid to ask questions when you need them! Two developers are in the room, and you can ask for help from them occasionally. It is just as important to ask the right question as to answer them. Google has that covered.
Always think loud. Interviewers need to understand how you think.
During these types of situations, I try to speak loudly even if it isn’t the best idea. If it’s not right, I need to recognize it and rectify it.
Shopify Internship Experience
This blog post will discuss my internship highlights and projects I worked on. Tips for internship applications. I was a Software Engineering Intern at the Data Infrastructure team in Ottawa from January through August 2018.
I enjoyed the work I did and the technology that I was using so I was happy to go to work every day.
Your team and your roadmaps will determine the type of work you do, but it is likely that you will be working with mentorship to tackle difficult and important problems.
Shopify’s Ottawa office is located at 150 Elgin Street. It boasts around 10 floors. Each floor has its own theme and offers a variety of places to relax, work, eat, or drink. A tour of the office is a must if you are ever in Ottawa.
It was great that my work was flexible. The important thing is making an impact and getting the work done. After work, I would play foosball or table tennis, Mario Kart or Zelda, or other games when I needed a break.
The Ottawa office’s amazing culinary team deserves a shout out! They make delicious food every day. They offer breakfast and lunch, as well as treats at random times. You can also find snacks and beverages in the offices.
I attended 3 company-wide summits, one for RnD, one for production engineering and one for interns. There were also 2 intern retreats, two hackathons in which my team won one, as well as other team building/celebrating activities. There are many ways to learn, have fun and see what’s going on in the company. You can also meet new people and enjoy good food.
The life outside of the office
Being by myself and being near other interns
Vancouver BC is where I grew up and this was my first experience living alone. It was great to be independent, and I had plenty of time for myself. The building was home to all the interns from the city. It made it easy to meet up to play video games, board games, and just chill. I learned many new board game skills, was able to play foosball well, but wasn’t very good at table tennis.
These are my favorite hackathons! Those who know me will know that I love them! There are more hackathons on the east coast than there is in Vancouver.
What I did
This section is semi-technical.
- To visualize deployments, resources and access permissions for data project under Shopify’s Google Cloud infrastructure, I created a Ruby on Rails app. The app runs health checks to ensure good practices. It also provides an interface to request permissions and create service accounts.
- A process was created to make it easier to analyze audit logs in the event of security breaches. It was designed to answer questions like “who accessed this resource?” in less than an hour for more than 1000+ TB event logs.
- Scala service was developed to reproduce production SQL queries against the data cluster onto a test cluster. This enabled us to “test” the SQL query engine versions (PrestoDB), in case they break backward compatibility, or cause performance degradations.
- To abstract away the use of the command line to connect to data services, I created a macOS app. This is useful for people who are not familiar with the command-line, but it’s probably not very practical at the moment.
- To leverage the monitoring/alerting capabilities of Google’s ecosystem, I tried Google Stackdriver. My exploration, including pros and cons as well as some quirks of Stackdriver, was documented.
- A command line interface was developed to view the current status of services and deploy services. It can also be used to scale up or down as needed.
- Optimized Dockerfiles for faster build times and higher developer productivity
I used Python (Rails), Swift, macOS, Scala, Java, Scala, a little bit of Java, systems and Google Cloud Platform. This was my first experience using many of these technologies, as I had only previously used Python, Go and Java, AWS. It was a great job and I learned so much!