Introduction
Hi everyone, my name is Aghilan Nathan. I am a business and computer science (BUCS) major, and I am excited to start my first internship at Intuit as a software engineering intern. I am wanted to share my journey to landing my first internship and what I learned along the way and how I received 6 interviews and 6 job offers from Intuit, Workday, SAP, Mainstream Labs, Blaise Transit, and Entrust with no prior experience. I hope this post will help you in your journey to landing your first internship.
Background
Before starting university, I had no programming experience. I wasn't a math prodigy and didn't cure cancer in my free time, but I was always interested in business. When I applied to university, I initially wanted to study finance, but I decided to try BUCS (Business and Computer Science) instead. It was the best decision I ever made, as I found that I really enjoy programming and learning about computer science. While I still find business interesting, it doesn't excite me as much as computer science does.
Managing the School
Managing the first year while grinding can be tough. If you're a UBC Science student, you have to meet a grade cutoff, so it's understandable if you feel overwhelmed in your first year. I know I did. In my first semester, I was just trying to get used to university life and didn't have time to focus on career prep. It took me a while to develop good study habits and time management skills, which are essential for students in challenging programs.
Positioning Yourself for the Future
If you want to get multiple job offers and position yourself well for the future, the most important thing is to have a growth mindset when it comes to your knowledge. Always ask yourself, "How can I do better?" or "What else can I learn today?" Even if you're not particularly passionate about programming, it's still possible to close the gap with enough time and practice. In fact, many people who come into university already knowing how to code still have a lot to learn, and with enough dedication (say, an hour a day for a few months) you can reach their level.
The Importance of Mentors
Having mentors to ask career-related questions can be incredibly useful, especially if you're new to the industry and don't know much about it. If you show people that you're willing to learn, they will often be happy to sacrifice their time to help you. It's a good idea to have mentors of various ages, as older mentors may have more life experience and less familiarity with current technology. Mentors don't have to be official, either - one of my oldest mentors is a family friend who I've known for over a decade, and he is someone I turn to for advice on high-level life issues.
Mentors who are software engineers (SWEs) can give you valuable advice on how to land your first internship. Upper-year students are also very helpful, as they have recently gone through the process of finding an internship and can provide firsthand knowledge and guidance. My first mentor, Louie Weng, was particularly instrumental in helping me get my first internship. He practiced interviews with me every week for months, reviewed my resume multiple times, and provided general guidance. Without the help of mentors like Louie and many others, I wouldn't be where I am today.
The Projects
All the projects I'm going to mention are related to web development, but you can certainly create mobile development or machine learning projects as well. Just be aware that if all your projects are in machine learning, it may be more challenging for a recruiter to consider you for a web development job, which is often what entry-level internships are in.
It's important to use relevant technologies and, unfortunately, things that look good on your resume. I recommend learning HTML and CSS, regardless of whether you want to focus on front-end or back-end development. If you want to learn front-end, then you should start with JavaScript, then move on to TypeScript (which I highly recommend), and finally learn modern React with hooks.
To build a project, you may want to consider using a service like Firebase or Supabase to store data without needing a back-end. Both are easy to deploy and have continuous integration/continuous deployment (CI/CD) with front-end services like Netlify or Vercel.
You can also build experience which looks good on your resume by making open source contributions (which I never did) or work as a developer at a school club. People also often ask if they should get any certifications, I don't recomend putting any certifications on your resume unless it's an offical AWS or Azure one. They don't have much value but I guess it might help by a tiny margin, the content you learn matters more then the certification itself. You can write the Azure Fundementals for free but with AWS Cloud Practioner there is no way to get around paying.
Language Selection
The most common question people ask is which language they should use. In most cases, the answer is Python. Unless you are already an expert in Java or C++, or you are interviewing for a company that requires high-performance systems, there is no need to use anything other than Python.
DSA Strategy
Here is my personal strategy for getting good at DSA interviews:
- Watch the MIT lecture (optional) and a short 10-minute Hackerrank video.
- Start with the easiest Leetcode problems for the topic you are studying.
- Even if you can solve the problem, watch the video solution to learn about new functions or better ways to write your code.
- Gradually move on to medium-difficulty problems if you feel comfortable with the easiest ones.
- Use the Neetcode.io 150 list or Grind 75 list and focus on one list at a time.
- Spend about a week on each unit, or longer if the unit is particularly long.
- Practice for about an hour a day for four months to get better at Leetcode than most new graduates.
- Once you complete the Neetcode 150 list, you can continue practicing to stay fresh, but you don't need to grind as hard.
- Remember that your first internship may not ask you Leetcode questions, or if they do, they will likely be easy ones. However, if you want to prepare for big tech interviews or pass them immediately, it's best to start early.
- Practice effective communication while solving problems by talking through your thought process the entire time. Consider doing a mock technical interview with someone or watching a YouTube video on the topic.
Within 4 months of doing Leetcode for an hour a day, I was always able to pass my mock technical interviews with my mentors. I didn't always come up with the optimal solution, but they overlooked it given that I was a freshman and hadn't taken a data structures and algorithms (DSA) course yet. So don't worry too much about the fear of never being good enough to pass big tech interviews. With practice, time, and continued dedication to improvement, it will come.
Behavioral Interviews
Behavioral interviews are important, and you want to make sure you don't have any red flags during the interview. To prepare, spend some time thinking about your responses to common questions, and if possible, practice with mentors. Practicing behavioral interviews has a very high return on time investment
The Offers I Received
Here is a summary of the job offers I received:
Entrust
My first offer was from a software security company called Entrust. It was a full-time job that required me to move to Ottawa, but I turned it down because the pay was only $25 per hour (without relocation assistance). The interview included trivia questions about the languages I listed on my resume (Java, TypeScript, and Python) and a Leetcode easy question that I solved optimally (although I'm not sure how anyone could solve it optimally). The company seemed solid, but I didn't want to move across the country.
Mainstream Labs
This is a company run by people my age. I didn't have many formal interviews because I was already familiar with them through a mutual friend, and they knew I was knowledgeable about programming. The company is not very big and I was their third developer. While I would not have accepted them over Intuit, I did accept a part-time job with them until I start at Intuit. They are a web3 company, and during the interview, I told them that I didn't know much about crypto or web3. They hired me anyway because they liked me and needed web2 work done. The pay is good, although a bit lower than Intuit, but I'm doing it more for fun than the pay.
SAP
I already had an offer from Intuit, but I had an interview scheduled with SAP Concur. The interview was very relaxed, and they asked me FizzBuzz and another Leetcode easy question. Many people I know have received offers from SAP, and their interviews are not very tough. You don't even need to have done Leetcode to get an offer from them. The programming you learn in your classes should prepare you well enough. SAP is one of the few companies that conducts reasonable interviews for their first internships. They don't expect anything ridiculous. Getting a job at SAP as your first internship is impressive and will likely open the door to big tech interviews in the future. The role I interviewed for seemed to use modern tools and was building microservices with Go, which was very cool. They offered me a hybrid role with $27 per hour pay, which is a good offer, but I had already accepted Intuit so I turned it down.
Workday Interview
I had a very long interview with Workday, including a 30-minute behavioral interview with a few technical questions thrown in. The interviewer was the friendliest person I've ever met, and the interview went very well. I didn't feel nervous at all and was confident I would move on to the next round. The second round was 1.5 hours long. It began with a React question, which I solved quickly despite not having used React for about 4 months and not preparing for the interview. They gave me a challenge question as well, which I solved in another 2 minutes. We spent the final 15 minutes talking about the company. Everyone was extremely friendly and made sure I wasn't stressed or nervous. Next, there was a 30-minute class design question. The question they gave me was the same as the practice one they provided, but I didn't bother to do the practice question because I had already done a similar one in my Intuit interview. I didn't get the class design question fully correct, but I was able to explain my decisions. After that section, I asked more questions about the company. It's always a good idea to ask questions when they open it up to you at the end of the interview. The offer from Workday included a base pay of $29 per hour and about $4,200 USD in relocation assistance, bringing the total to about $32 CAD per hour. I was very sad to turn down the offer because Workday seemed like a great place to work.
Intuit
I had a presentation about myself, followed by a review of my GitHub projects. My interviewer grilled me on one of my projects, which I wasn't expecting. We then moved on to a Leetcode problem, which I solved in about 5 minutes. It was a moderate difficulty problem, and I recognized the pattern quickly. It's important to communicate your thought process to the interviewer before coding. Despite being nervous throughout the interview due to my interviewer's poker face, I was able to solve the problem and move on to the Q&A section. At the end of the interview, my interviewer told me the recruiter would be in touch with feedback. I took this to mean I hadn't been successful, but was pleasantly surprised when I received an offer. The pay was significantly higher than my other offers so it was an easy decision for me. Compensation was $43 CAD per hour, which is a lot for a first internship in my opinion so I was extremely happy and grateful. Some of the other perks included a randomly getting $40 Uber Eats vouchers, some Bose NC-700's (or 2nd Gen Airpods Pro), a 165Hz 2K resoultion ASUS Gaming Monitor so I can more frames on VSCode, and a wireless Apple Magic Keyboard.
Robinhood
I applied to Robinhood for an Android Engineer Intern position and included my incoming status at Intuit on my resume. Shortly after applying, I received an invitation to take a CodeSignal test, which I completed with a prior test score of 810. The next day, an auto-invitation was sent to me to schedule a Karat interview. Acting swiftly, I scheduled the interview for 8:00 AM right after receiving the email at 7:45 AM.
During the Karat interview, the interviewer began with behavioral questions before moving on to Leetcode-style questions. I had 45 minutes to solve the given problems. While I solved the first question in about 20 minutes, explaining each step along the way, I realized I had taken my time. With the extra time, the interviewer presented me with another question, which I managed to solve within the allotted time. Unfortunately, I ran out of time and was unable to attempt the third question. Although I thought I performed well, I later discovered that there were three questions in total for the Karat interview, and I had only completed two. While communication was important, I had not prioritized finding a working solution as quickly as I could have. I heard that a minimum score of 2/3 was required to avoid an auto-failure in the Karat interview, but it did not guarantee a passing score. Given Robinhood's competitiveness and the large number of applicants for this role, my expectations were low, especially considering that many of them probably had knowledge of Android.
Ironically, I received a response from the recruiter regarding the position. During the phone screen, the recruiter inquired about my experience in building Android apps with Kotlin, to which I honestly replied that I had none. However, the recruiter continued with the conversation and even asked about my availability for the final round. The final round was scheduled for 5 days later, giving me ample time to immerse myself in Android development. From my perspective, I believed I had failed the interview, but to my surprise, I still secured the job. Life can be funny sometimes.
Unfortunately, I cannot share specific details about the interview due to signing a nondisclosure agreement, but I can say that it was challenging. I had the option to choose between Menlo Park and New York City, and I decided on NYC because I had family there whom I wanted to visit, and NYC seemed more exciting than the Bay Area. The offer presented was $48 USD per hour, along with a $2000 monthly stipend for housing. I was thrilled with the offer and accepted it immediately.
Wealthsimple
I applied to Wealthsimple for Fall 2023 and received an interview invitation in less than 24 hours. It was the only company I applied to for Fall 2023 because I was confident in receiving an interview. With a strong resume in hand, my main goal was to grab the recruiter's attention, so I sent an email to the recruiter with my resume and used the subject line "[ex Intuit/Robinhood] looking for Fall 2023 opportunities."
The first round consisted of a class design question with a Senior SWE, where having working code was expected. You could get through with a limited knowledge of DSA since it was mostly focused on data modeling, the emphasis was on class design and the application of clean code principles. Since this was something I frequently practiced, it played to my strengths. A week later, I had my second round, a one-on-one with the Engineering Manager of the team I was being hired for. We discussed the technical aspects of my previous work, and I shared the blog article I had written about my experiences at Intuit. This conversation felt more like a discussion rather than a formal interview, which I thoroughly enjoyed.
Out of all the companies I've interviewed with, Wealthsimple's hiring process stands out as one of the best at identifying candidates who would excel as Software Engineers, rather than solely focusing on those who have solved countless LeetCode questions. The pay for the internship was approximately $47 per hour CAD, which I consider quite competitive in the Canadian tech industry. Additionally, they offered numerous perks and benefits. Although I ultimately declined the offer to return to school, I wish I had the opportunity to work there, as the company seems to have a strong culture, work-life balance, and a product that I use every day.
Conclusion
If you followed the steps I outlined above, it's unlikely that you will fail any interview unless your get really unlucky and get a LC Hard. Landing your first internship will be tough, but it's not impossible. Everyone goes through this process. There is an element of luck involved in whether you get contacted or rejected, but I was able to get many offers with no work experience because I knew how to play the game, like many things in life, luck can be overcome with knowledge and skill.
I can promise that if you spend just two hours a day for a few months on Leetcode, learning new technologies, and doing general research, you will be ahead of your peers and competitors in the job search. It's all about making a small effort every day consistently.
Passing the interview is usually within your control, but there is still some luck involved. Getting the interview will always be the hardest part. With the competitive entry-level job market, opportunities are scarce, and failing job interviews can be costly. Of course, you will have more chances in life, but succeeding the first time does help you move faster.