I was inclined towards working with Ruby because I already had some experience working with it. Next, I passively started looking for Ruby/Python jobs. Job-hunt mode: activated!
Two minute version
- Having worked with PHP for ~10 years I was looking for a change.
- I started experimenting with technologies like Ruby and Python.
- I found Shopify’s careers page and learnt that they work with Ruby.
- I visited Shopify’s office in Montréal for an open house.
- I liked the employee reviews that I read about them on the Internet.
- I liked their office and the reviews that I got from Shopifolk.
- I sent them my résumé and started going through their interview process.
- A 20 minute screening phone call.
- A 1 hour life story interview.
- A 1 hour basic coding challenge.
- 4 more hours of more technical interviews and coding challenges.
- The interview and selection process took around 3-4 weeks.
- Finally, I received a job offer!
- Shopify did the necessary paperwork to help me start working with them.
In no specific order, I started doing some research about the following:
- Top 10 companies that hire Ruby developers.
- Ruby developer jobs in the province of Québec, esp. Montréal.
- Average Ruby developer salaries in major Canadian cities.
Needless to mention, I also polished my LinkedIn profile and updated my résumé to reflect my current skills, experiences and projects. Since I was planning to work with Ruby, I spent a substantial amount of time to read Ruby’s official docs, solved several HackerRank challenges with Ruby and even created some small Ruby projects to have work samples.
As an immigrant, my job choices were limited because changing employers in the Province of Québec can be quite difficult unless you are a PR or a citizen of Canada.
One evening, I heard about a React JS meetup that was taking place at Shopify. During this event I got a chance to meet several members of Shopify’s team in Montréal and in turn I was interested in working with them. Coincidentally, the very next day, they had an open house where I got a tour of their office and got to speak with more Shopifolk. Next, I sent them my résumé along with a cover letter explaining why I wanted to work with them.
Interview and selection
After sending my CV to Shopify, I heard back from them in a week or two. A 20 minute call was scheduled. During the call, the recruiter and I talked about the following (usual) topics:
- Types and scale of projects that I had worked on.
- Role(s) that I usually play in projects.
- Sizes of teams that I had worked with.
- Why I was looking for a new job.
- When I could start working with them.
I was also asked about my immigration status and possible paperwork that might be involved in case I were to get selected for the position.
This 1 hour interview is quite simple, however, it is the trickiest to understand. All I had to do in this round was to talk about my life. I mostly talked about things like:
- How I got into software development.
- Important projects I’ve worked on.
- Special events in my personal/professional life.
- Why I wanted to work at Shopify.
I believe that this interview helps the recruiter understand you better as a person and to determine what motivates you and how passionate you are about what you do. After this round, I moved on to the basic coding challenge.
Basic coding challenge
The basic coding challenge was indeed fun and it was about 1 hour long. I had to write a simple function to solve an easy problem using a programming language of my choice. I was thinking about solving the problem with Ruby because Shopify mostly works with Ruby. But I decided to play safe and wrote my code in PHP with which I was more confident.
Learning a programming language is much easier than learning to code in general.
I think the objective of this round was to filter out candidates who cannot solve basic problems with code.
I got the desired output to the interviewer’s satisfaction in ~40 minutes. I wanted to write the program again in Ruby, however, the interviewer made me realize that I didn’t have enough time. Besides, it was not necessary because the programming language didn’t matter 😀
Advanced coding challenge
After the basic coding challenge, it was time for something more complex. I was invited to the Shopify office in Montréal for 4.5 hours of interaction with the team, lunch and interviews. The schedule was roughly as follows:
- Pair programming with a senior developer (75 min): A senior developer assigned me a medium-difficulty problem. We brainstormed and agreed upon a solution. Next, I had to write code to get the desired output. During the process, I had to think aloud so that the interviewer would know what I was trying to do. They would occasionally jump in and give me hints if something was not going on the right track.
- Lunch with a team lead (60 min): Shopify usually provides catered breakfast and lunch at their offices. Awesome! In this round, I got to have lunch with a team lead and we talked about various topics, not necessarily related to work. During this round, I learnt more about Shopify’s work culture and I was very excited for the next round.
- Technical deep dive (60 min): In this round, I had to present a project of my choice to a semi-technical personnel from Shopify. Unfortunately, I didn’t have a fairly complex project to present so I presented a simple one named Toggl 2 Redmine – a plugin I wrote for the Redmine project management system. During the presentation, we went into the details of why I built the application, how it evolved into what it is today and the challenges I faced during its development.
- Pair programming with a senior developer (75 min): Another pair programming session similar to the one mentioned above. In this one, I reached very close to the solution, but I couldn’t get it to pass all the test cases. However, I strongly dislike leaving problems unsolved. Since I was curious, I solved the problem after I went back home and mailed it to them, mostly for my own mental satisfaction.
- Check-in with the recruiter (15 min): To conclude the day, I spoke with the recruiter about my experience with their selection process and possible terms of employment.
I think the main objective of this round was to evaluate my technical knowledge, programming skills and problem solving skills. Secondly, all this interaction gave them a chance to evaluate my social skills and most importantly, my behavior. Usually, nobody likes to work with people who are rude, uncooperative, not receptive to feedback. Through these interactions, my potential team members got a preview of what it’s like working with Jigarius 😉
Basic coding challenge
Say, an organization issues ID cards to its employees with unique ID codes. The ID code for an employee named Jigarius Caesar looks as follows: CAJI202002196.
Here’s how the ID code is derived:
- CA: First 2 characters of the employee’s last name.
- JI: First 2 characters of the employee’s first name.
- 2020: Full year of joining.
- 02: 2 digit representation of the month of joining.
- 19: Indicates that this is the 19th employee who joined in Feb 2020.
- This will have at least 2 digits, starting with 01, 02, and so on.
- 6: The last digit is a verification digit which is computed as follows:
- Take the numeric part of the ID code (without the verification digit).
- Sum all digits in odd positions. Say this is O.
- Sum all digits in even positions. Say this is E.
- Difference between O & E. Say this is V.
- If V is negative, ignore the sign, e.g., -6 is treated as 6. Say this is V.
- If V is greater than 9, divide it by 10 and take the reminder. Say this is V.
- V is the verification code.
For the above ID card, here’s how you‘ll test the verification digit.
CAJI202002196 # ID code 202002196 # Numeric part 20200219 # Ignoring verification digit 2 + 2 + 0 + 1 = 5 # Sum of odd position digits, i.e. O 0 + 0 + 2 + 9 = 11 # Sum of even position digits, i.e. E 5 - 11 = -6 # V = O - E 6 # Verification digit, ignoring sign
An ID code is considered valid if:
- The first 4 characters of the card are correct, i.e. CAJI.
- The verification digit is correct, i.e. 6.
- Write a command-line program in your preferred coding language that:
- Allows the user to enter their First name, Last name and ID code.
PASSif the ID code seems valid.
- Write relevant tests.
- It is not necessary to use a testing library.
- You can use your custom implementation of tests.
Advanced coding challenge
Say, the Canadian Space Agency is building an unmanned spacecraft that’ll go to the moon.
Here’s some more info about the project.
- The ship’s starting coordinates are (0, 0), which is on Earth.
- The ship’s destination is (0, 250), which is on the moon.
The ship will be controlled over a CLI using a standard keyboard as follows:
- The ship starts at (0, 0) at 0 speed, i.e. at complete rest.
- The ship only moves when a valid key is pressed.
Wincreases the ship’s speed and then moves it forward by speed units.
- The ship’s maximum speed is 5.
Sdecreases the ship’s speed and then moves it forward by speed units.
- The ship’s minimum speed is 0.
- After launch, the ship cannot go below speed 1, i.e. it always moves forward until it reaches the moon.
Dmove the ship left and right by one unit respectively.
- The ship also moves forward by speed units.
Write a CLI program in your preferred language to simulate the above spacecraft. Display output as follows:
- Begin with
(0, 0) ready for launch.
- After every movement, display the updated position.
- If the ship goes more than 5 points to the left/right, display
- If the ship tries to decrease the speed below 1, display
- If the ship tries to increase the speed over 5, display
- When the ship reaches
on the moon.
- If the ship goes beyond
250on the y-axis, display
(0, 0) # Begin with original position. (0, 1) # W increases the speed to 1 and moves forward. (0, 3) # W increases the speed to 2 and moves forward. (-1, 5) # A moves the ship left and forward. (0, 7) # D moves the ship right and forward. (0, 8) # S decreases the speed to 1 and moves forward. ... (0, 250) on the moon # Ship reaches the moon.
One evening in December 2019 when I was getting ready for my vacation, I finally received a call from my recruitment coordinator. I was told that I had successfully passed the selection process and I soon received an email with an offer of employment.
Due to my immigration status in Canada, I had one final round of struggle left: paperwork. Shopify helped me get a new work permit allowing me to work at their office in Montréal for which I’m very thankful.
The primary reason for which I had joined Shopify was to improve my programming skills by working with some of the coolest devs in the industry. I wanted to venture beyond using PHP and JS frameworks to build medium-sized websites and applications. I wanted to do something challenging.
If you only do what you can do, you will never be more than who you are.
A part of me didn’t want to join Shopify because I never had formal training in programming, so I doubted if I was ready to join a big software shop. I wanted to read and learn things for 2-3 months before joining, but given my immigration situation, it would’ve been difficult for me to do so. But I was told that Shopify had a growth mindset and that if I could do my tasks and keep improving, I would be allowed to continue working.
Continuous improvement is better than delayed perfection.
After joining, it seemed that the team wanted someone with more hands-on Ruby on Rails experience. In my role, I was expected to write code and not make architectural decisions, however, in practice, I had to make architectural decisions quite often. Also, code that is considered completely normal in PHP surprisingly seemed to be frowned upon in this new Ruby environment. In general, I just wished I knew everything.
I realized that I was, in a way, considered weaker than other team members because I didn’t have in-depth theoretical knowledge on certain topics like database replication, principles of software testing, code complexity, design patterns, etc. I tried to fix this by reading articles and books, watching YouTube videos, and by writing as much code as possible for practice, but I failed. Alas! I was defeated.
Long story short, I was put on probation around my 10th month. I was given a task that I was to finish within a period of 4 weeks to keep my job. I finished this task within 2 weeks, and it took a week more to get all my pull requests approved and merged. However, it was decided that I was to be removed.
I requested to be given a chance in the frontend team, but unfortunately that wasn’t possible because “if [they] see that you cannot do well in one team, [they] assume that you won’t do well in other teams.” Thus, my time at Shopify had ended.
On the positive side, I learned many things and made a list of things that I need to learn and improve in order to survive at a software giant like Shopify. Also, I’m glad that I could successfully finish all my tasks despite being the “lesser programmer” in the team. I even got a Pull Request of the Month a week before I was terminated.
Having a good memory, I can write a hundred details about my time at Shopify, however, I won’t. In an attempt to forget this chapter of my life, I’ve decided to not think about it for a few years. As a matter of fact, it is not allowed to talk about Shopify at my place after 4:00 pm lest I might have a sleepless night 😅.
- Shopify is a commerce powerhouse that’s revolutionizing the industry.
- Getting a software development job at Shopify involves a lengthy selection process, but the process is not very difficult if you have the right skills.
- You must’ve heard the saying, “no pain, no gain”.
- Shopify provides competitive compensation packages with several perks.
- At Shopify you get delicious breakfast and lunch for free!
- The work schedule is flexible. One can work from home when need be.
- In general, I found that fellow Shopifolk are talented, friendly, respectful and passionate about what they do!
- Looking for jobs? You’re welcome to check out the current openings at Shopify.