How I Landed a Six-Figure Internship Before My 21st Birthday

Okay to preface this, this one might come off as a little braggy. I mean, it's hard to talk about this and not sound like you're bragging, but I promise the purpose of this blog is not (just) to brag.

The goals of this blog:

  1. If you're going to go into CS at a University, or you are in CS at a University and you're looking for internships, hopefully this blog can help you out. I know in my first year, upper years gave me a lot of guidance about internships, and I promised myself that if I ever became as wise as them, I'd try my best to help out the younger students as well. I never did become as wise as them, but I'm gonna try this anyways.
  2. I know talking about salary and job details can be a little icky to people, but personally I think it's a good thing! Knowing how much others get paid can help you navigate your future job plans, and knowing how much people in your field are making is important so that you know how much you're worth.
  3. There are a lot of blogs out there that tell you how to do one very specific thing, but none that give a holistic view on everything that a person's done to get to where they are now. This is probably because no one's insane enough to write something that long, and also, not that many people are interested in reading something that long. But, I would've loved to read this in my first year, and so I'm writing it anyways. To kind of remedy the fact that this is so long, I've added a table of contents — feel free to skip around.
  4. To brag. I mean, come on — It's kinda cool and I'm very hyped and just let me have this.

So, with that out of the way, let's get to the fun stuff. Where am I interning, for how long, and what are the details?

My Offer

I'm going to be joining Wish.com (the online retailer) as a Software Engineering Intern from May 2022 to April 2023. The pay is $8400 CAD a month ($100,400 for the year), there's a $500 CAD remote work bonus, $75 USD a month for health stuff, and $50 USD a month in Wish cash to use on their products.

But you're not here to listen to me gush over my offer, so let's talk about the good stuff. If you're just interested in how I landed my internship, skip to the "How I Did It" section, but otherwise I'm gonna talk about some other things first.

Disclaimer, this is all my experience from things that I've gone through and heard from my friends. I've tried to keep this guide as factual as possible, but some things may be inaccurate. If you find something wrong with this guide, feel free to lemme know!

Pay Averages in Toronto (and Elsewhere, but Mostly Toronto)

First, let's talk about pay. Is 100k a normal amount, and how much should you be aiming for in your internships?

Personally, I like using levels.fyi to view salaries. Online estimators aren't always the most accurate, but I've found levels.fyi to be more accurate than other websites like Glassdoor. Let's look at some intern salaries:

American Internships

I'm pretty sure if you land Hudson River Trading, in addition to free food they just feed the food directly into your mouth while you're working

Oh.

To be fair, these are the highest of the high, and they're all located in the US. Let's narrow our search to Toronto and look at the highest salaries from there:

The best Canadian internships

note: i'm pretty sure all these figures are in USD, so multiply by ~1.25 if you're looking for the Canadian equivalent

Alright, two things:

  1. The top salaries have basically halved compared to the American ones
  2. Note that these aren't all the internships in Toronto. There are more that pay around this much (I know for a fact that at least Wish, Amazon, and Meta/Facebook hire interns in Toronto and pay around this much), but this is a good representative of the pay ceiling you're looking at

Toronto salaries are a lot lower than the US. This is true of both internship salaries (see above) and new grad salaries. Obviously, salary is not the only reason to move anywhere, but if you're just trying to get the bag, know that you should be looking at American jobs. However, keep in mind that if salary is higher, competition will also be higher.

Also, remember that these are the top of the top. This is the ceiling when it comes to internship offers. Realistically, if you're looking for your first internship in Toronto, it'll probably be at a bank, and it'll probably pay something closer to this:

Regular Canadian internships

note, these may not be entirely accurate. I know for a fact from a friend that Citi is offering $41 CAD an hour for the Summer 2022 term

I know these are lower, but keep in mind that these internship salaries are already close to the average income in Canada, so they're definitely nothing to scoff at.

All this to say: if you're looking for your first internship in Toronto, you'll probably be looking at something between $20-30 an hour. For subsequent internships, you can start looking at some of the companies in the higher ranges. Generally it's easier to land a lower paying company first, and then aim for those higher paying ones after you have an internship under your belt.

Also, if you go to a Canadian school that does not rhyme with "Shwaterloo", then most of the job postings under your school's Co-op board will probably look like these $20-30 an hour jobs too. There will be some higher paying ones that go above $30, but they're fairly rare. If you're interested in the specific UofT numbers, check out this link. The median UofT PEY (our version of Co-op) annual salary last year was ~$52k (which is around $25 an hour), and I think for most UofT students their PEY is their first internship (which is bad, and I'll talk about that in a bit too).

So with that in mind:

Should You Register for Co-op Through Your School?

*note, this was written before the changes to UofT PEY in 2022, but the general advice should still be the same.

After all, it looks like if you're shooting for the highest salaries then co-op isn't the way to go, AND if you do co-op your school will probably charge you a fee for it (I know UofT does), so is it still worth it?

Yes.

And take this from me, someone who didn't register for co-op through my school (I'll explain why later). It is worth it to register for Co-op through your school, even if your dream companies are not in your school's co-op portals.

Why?

  1. You will have access to a job board that other people will not have access to. Only "competing" with people in your school is way easier than competing with everybody that wants an internship. (Side note, I hate to use the word "competing" — there are enough jobs in CS for all of us to help each other out)
  2. If you're the type of person who has issues with motivation, applying through your co-op portal is way easier than hunting down jobs elsewhere. Plus, everyone else will be doing it, so it almost feels like you have to be doing it.
  3. (I've heard) the job application process is way easier through co-op boards. Friends of mine who applied to jobs through their co-op portal and outside of the co-op portal told me that their success rate was way higher when applying through their co-op portal. ALSO, they said the interview process was easier.
  4. Even if your dream company is not on your school's co-op board, always remember that there's a chance you won't be accepted by your dream company (especially on your first try). It pays to have backups. If you have the time and you're just trying to get your foot in the door, applying to as many places as possible is generally the play.

I know it sucks that you'll have to pay more money to a school that you probably already pay a lot of money to go to, but overall in my opinion, paying the co-op fee is worth it and fairly miniscule when you take into account the money you'll be making at any internship.

However, if you go to UofT, try to find an internship before your PEY. I'm saying this simply because waiting until your third year to find internships is waiting too long. Students at other schools start looking for internships after their first year, but the fact that UofT has their one co-op term happen after third year leads many UofT students to believe that they aren't qualified until after their third year. I promise you, you're qualified after your first. Start looking early.

Okay. One more thing before I talk about how I got my Wish internship. I know this is a little long, but this last part is very important to say before I talk about my journey:

There Are Multiple Pathways to Success

It's really really important that you know this. I'm putting this before the part where I talk about myself just so you know that:

  1. You don't have to follow in my (or anyone's) footsteps to be successful. In fact, sometimes abandoning the path you're on to follow someone else's can be detrimental to your journey.

  2. If I (or anyone else) did something that you didn't, that doesn't mean I'm ahead of you. At the end of the day, the most important thing is that you're doing better than your past self. I'm writing this blog to help give you an idea of what one pathway to success looks like, but ultimately, if you keep improving upon yourself you will find your own.

  3. My path might not make you happy. The journey to get to where you want to go matters a ton. You should be happy during it. If there's something I did that just feels like it would make you miserable, don't do it. It won't be worth it.

Everyone I know who is successful did it differently from others. Even if their destinations were similar, generally their paths to get there were very different. I know people who didn't TA or get great grades and just grinded the job hunt, and ended up getting a FAANG first internship. I know people who were prepping for grad school who changed their mind and ended up using their algorithm knowledge to ace interviews and get a bunch of offers. I know people who didn't do any internships and graduated to pretty sick new grad jobs.

There are infinite ways to be successful. If something's working out for you, don't abandon it just because you haven't seen it work out for other people.

Anyway, that was the Philosophy minor in me speaking. Let's finally get to:

How I Did It.

I'm gonna split this up chronologically.

Before University

Nothing! Unless you count taking grade 11 and grade 12 computer science and learning very basic syntax something. Overall though, I always thought I'd go into music, so I had no knowledge of how the CS world worked until university. If you're in this position, don't worry. Even though a lot of people do have coding experience going into first year, and you might feel like you're "behind" everyone, don't sweat it. You can do a lot in a short amount of time.

First Year: Make POSt

So, if you don't go to UofT, a little fun fact:

In first year, you're not actually in CS yet. You apply to get into UofT, and then you apply again after first year to get into your program. Admission is based on your first year marks in two courses, and it is not guaranteed. In my first year (at the Mississauga campus), there were ~700 of us, and about 123 of us made POSt on our first try. (Granted, COVID had a lot to do with the lower number, and a lot of people tried again in the next year and made it). I think generally, the department likes to accept closer to 250-300 students, but I'm not too sure about that.

The point is, if you're in your first year at UofT, your main focus will probably be making POSt. I might write another blog post about making POSt in the future, but for now we'll keep things relevant to the job hunt.

I didn't do much in first year to prep for finding internships. No personal projects, no community involvement, and I didn't apply to a single internship. Looking back now, I wish I would've at least applied to some first year exclusive internships. There aren't too many of them, so applying wouldn't have taken a long time. I have no idea if I would've actually made it, considering my resume had 0 projects on it, but it's always worth giving it a try.

Overall, if you're in UofT in your first year, I'd recommend focussing on making POSt over anything else. If you don't make POSt, you can definitely get amazing CS internships and jobs with just a CS minor, but the major does help with the job search. I think in first year, the goals are: make POSt, try and become acquainted with your school community/clubs and meet people, apply to first year exclusive internships, and try and get one or two personal projects (like a personal website) up.

What I Did Well

  • Made POSt and got good grades
  • Made good friends with a lot of people, and developed a pretty solid network
  • Took MAT137 instead of MAT135, which helped a lot with learning MAT102 (but more on that in the "how to make POSt" blog, if I ever write that)

What I Wish I Did Better

  • Spent less time on academics. Full disclosure, I ended with a 97 in MAT102 (Intro to Proofs), and a 91 in CSC148 (Intro to CS), when realistically I just needed a 73 and 80 in both those courses (respectively) to make POSt. For me personally, it definitely would've been worth it to divert some of the time I spent on those courses towards personal projects, learning dev skills, and applying to jobs.
  • Spent more time getting to know profs. I only really got to know one prof (shout out to my man Dr. Paul Vrbik), and he left UofT after my first year, so I went into second year with 0 connections. I definitely wish I had spent more time in office hours during non-test/assignment weeks just to chill and get to know my professors, all of whom were really awesome people.

Summer Between First and Second Year: CSC207 and No TAships

The summer between my first and second year, I took CSC207 (Intro to Software Design) at the UTSG campus, and wrote my first actual big project in a team of developers. If you're a UTM student in first year reading this, I highly recommend taking CSC207 at UTSG. I don't know if I'll get in trouble saying this but uhhhhhh

CSC207 at UTM kinda sucks.

I'm saying this as someone who saw his friends take it at UTM, as well as someone who's TAed the course at UTM. At UTSG, we spent more time with design patterns (and less on Java, something you should be able to learn on your own), did a longer (and larger) project, and worked in a bigger team (7 students in my year, vs 4 at UTM).

If you're reading this in first year, grab some friends and convince them to take CSC207 at UTSG. It's worth it. I finished the semester with a project I was quite proud of and put on my resume, got to work in a large group, and learned what working on a big project and using design patterns feels like.

I also applied to be a TA for second year. Generally, they don't let second years be TAs, but that rule is waived if you:

  1. Have good grades
  2. Know the profs that are choosing TAs

If you wanna be a TA in your second year, this is the blueprint. You have to do both of these.

I did not do both of these, and so I was rejected. I had good grades, but to the professors choosing TAs, I was just some random student. Maybe if I had spent more time getting to know my profs in first year, it would've been different.

What I Did Well

  • Took CSC207 at UTSG and somehow weaseled my way into an amazing group of students and made an awesome product
  • Applied for a TAship (even though I didn't get it, applying for anything is always a W)

What I Wish I Did Better

  • Made connections with profs in first year so I actually got a TAship
  • Still could've applied to first/second year exclusive internships, still didn't do it, like an idiot
  • Done more side projects. CSC207 was a nice side project, but picking up some web dev skills would've put me ahead of schedule for sure

Second Year Fall: Six Courses Does Not Make Covid Go Away

Second year fall was bad. I decided to take 6 courses (generally at UofT you do 4-5 courses a semester), which was a mistake. I don't think taking 6 courses in general is a mistake if you can handle it, but taking 6 courses to try and distract yourself from a pandemic?

Not a great idea.

Anyway, there were three things I did this semester that helped me with the job hunt:

  • Took CSC236 (Introduction to the Theory of Computation) and learned about big O notation and runtime analysis (this is important for interviewing and you can definitely learn it on your own, but if you don't then you'll learn it through this course)
  • Took CSC290 (Communication Skills for Computer Scientists), which is no longer offered by the school, but don't worry — the big takeaway from that course was how to fix my resume and take it from bad to okay. Online resources helped take it from okay to good later on, so you should probably just skip to those.
  • Created my own personal website (you're on it right now!)

Learning Big O isn't too difficult to wrap your head around, and you could probably do it yourself (generally runtime analysis is the easier part of a technical problem, the harder part is solving the technical problem).

Resume skills are a bit harder, but overall there are a million resources online to help build your CS resume. What I like to do is look at the resumes of high-achieving people, and try and copy their format. I use this template for my resume, because more successful people told me to. I also include a lot of metrics (improved by x%) in my resume, because more successful people told me to.

Building your own personal website probably the hardest out of these three, but there are a lot of online resources you can use (like this one) to get you started. It's very rewarding when you finally do it, and I recommend everyone try it out. I've seen many application forms where they ask for your personal website/portfolio, and it feels good to not leave that form blank. Plus, I've heard from a friend that has Google Analytics enabled on his website that after he applies to jobs, he can see people from California visiting his website, meaning that the recruiters are actually looking at it.

What I Did Well

  • Made my own website (even if you're not going into web dev, I really recommend doing this!)
  • Learned Big O/runtime analysis to prep for interviews
  • Took "Camp Counselor" off my resume, and actually adjusted it for the CS world

What I Wish I Did Better

  • Not taking on so much academically. Taking on too much academically stifled my ability to grow in other areas: I didn't have time to invest in any extracurriculars, I didn't have much time to work on projects, and I didn't have enough time to devote to applying to jobs.
  • Not joining more communities/spending more time on my mental health. This isn't supposed to be a super deep blog post so I'll keep it light, but if you ever feel as though you're taking on too much, take a break. You'll be more productive, happier, and overall better afterwards.
  • STILL NOT APPLYING TO ANY JOBS. This is a BIG BIG one. If you're looking for internships, it's best to start applying early. Seriously. Do it. For American internships (especially at the highest paying ones), if there's a May 2022 position, it's filled by October 2021. For Canadian/smaller company internships they're a bit more forgiving, and you have about a semester more of leeway (so May 2022 positions will mostly be filled by February 2022), and there are some situations where a May 2022 position will be open until April 2022, but those are rare. Applying early is very important. I have a friend who's gotten interviews with Google, Amazon, Facebook, and Microsoft, and he says applying early is the best thing you can do.

Second Year Winter: Comeback Kid

If I were to graph how my second year winter went (out of 10), it would look like a 5/10 in the first part of January, and then plummet to a 1/10 for 2.5 months, and then shoot up to a 8/10 in April. The semester started rough, got worse due to personal reasons, but then sharply turned around at the end, partially because vaccinations started to speed up, and partially because in April 2021, literally everything happened.

But let's start at the beginning. The game changer for me this semester was Hackathons. Hackathons are a GOATED way to get stuff on your resume. In the early months of 2021, I landed back to back Ws in two school hackathons (PyJaC and Hack the Case), and made Operation Guesser and Track-19, two projects that are still on my resume now.

Dub

pictured: two of the reasons for my ego

If you're struggling with finding projects to add to your resume, I CANNOT reccomend hackathons enough. Grab some friends, find some hackathons that seem cool, drink a few gallons of caffeine, and crank something out to put on your resume.

Another cool thing that happened in January was that I started getting more involved in clubs. I didn't join any as an exec/associate, but I started hanging out around some of UTM's club discord servers, and met some very awesome people (one of which ended up mentoring me through the internship process a few months later).

The final shining light of the early semester was taking CSC263 (Data Structures and Algorithms). As someone who hates grinding leetcode, the knowledge from this course came in clutch a million times.

Then, February and March were absolutely terrible and I really didn't do anything of note. I probably (again) should've taken less courses (I only took 5 this semester, but they were on average pretty hard courses), especially in light of the personal events happening that I mentioned earlier. Remember to take breaks, kids. It's good for you.

And then, everything happened in April.

First of all, in April, I decided to be proactive, and email a prof to ask if I could TA for him in the fall. I knew my chances were decent because:

  1. I had taken a course with him in the fall and had done well
  2. He knew me

Remember the two rules to getting a TAship? Well, this time I followed them, and lo and behold, not only did he say yes, he said yes to me TAing for him in the summer.

Second of all, I was messaged by an upper year at UTM to ask if I would be interested in joining his startup. This opportunity only happened because I had been active in the club discord servers, and had started talking to him about projects + a shared mutual interest. Engaging with the people in your school community is really important, don't forget it.

Third, I decided (and by decided I mean my friend convinced me to, thanks Maryam) to run for a position as an executive for the Mathemetical and Computational Sciences Society at UTM (MCSS for short), and I won! And, just like that, I was heavily involved in the events happening in and around the school.

Aaaaand fourth, I decided to enrol in CSCC01 (Introduction to Software Engineering — It's called CSC301 at UTM/UTSG but at the Scarborough campus they use ABC instead of 123 because they like to be different with their course codes) with some friends over the summer. Remember CSC207 last summer? This course is the big brother of that course. This course is the GOAT course for internships at UofT. This course, out of everything, probably landed me my first internship. (But more on that in the next section).

So much happened in April that I actually had to turn a few opportunities down. I don't know why this happened all at once; my best guess is that a combination of me being more active in the community/talking to more people mixed with winning those school hackathons meant that people now wanted to collab with me on a bunch of stuff, but all of a sudden I had a packed summer planned, even without an internship.

What I Did Well

  • Engaged with the community way more. Met a lot of people that would help me out greatly in the future, and it's just nice to make friends! (this is the part where I plug the MCSS discord server, go join it if you're not in it)
  • Participated in Hackathons. These padded my resume, gave me something to put on my website, and gave me (a little bit of) rep moving forward. Plus, it was a nice ego boost to say that I was 2 for 2 on Hackathon wins.
  • Took CSC263 to prep for interviews. If you don't mind grinding leetcode and studying independently, then you don't have to pay that much attention in your Data Structures/Algorithms class, but for me it was easier to learn data structures in this class than learn everything on my own.
  • Sought out opportunities. Three out of the four things that I got in April all happened to me because I went out of my way to make them happen. Even the thing that I didn't seek out (the startup) only happened because I had won hackathons and was active in the community. All opportunities are a result of you going out of your way to work at something, even if it's something you did in the past.

What I Should've Done Better

  • Taken on less academically (again). Continuing the saga of Ethan Prioritizes School Over Mental Health, taking 5 courses this semester when I knew that the courses would be hard and I knew that I would have far more personal responsibilities than usual AND A PANDEMIC WAS STILL HAPPENING — was the dumbest thing I could've done.
  • STILL NOT APPLYING TO (many) JOBS. I wanted a summer internship, but I still didn't really put in the work to get one. Thankfully, things worked out and I did a lot of other things over the summer, but if the April opportunities didn't happen, I would've had nothing. In fact, one of the reasons I was so down in March was because of the lack of summer internship, despite the fact that I really only applied to ~10 jobs, didn't really work on my resume, and did no research on what CS internships were out there.

Summer Between Second and Third Year: The Part Where I Actually Apply to Jobs

The summer of 2021 was a hectic mess of deadlines, new responsibilities, and challenges I had never faced before.

And it was so fun.

I mean, a lot of it wasn't fun while I was going through it, but in retrospect, it was very fun. Turns out, being busy doing work that is actually rewarding/meaningful feels a lot better than being busy doing work that you're not very attached to.

First, I did another hackathon and made Lectern, another project to go on the resume. We didn't win, but it was still a great time AND I worked with some new tech I had never worked with before. W.

Second, TAing ended up being a blast. I was very nervous at the start about teaching, but it ended up being extremely fulfilling. I got to guide some students through some important concepts, and I met some really amazing other TAs who also gave me a lot of advice regarding the job hunt, upper year courses, etc.

Third, the startup gave me experience designing mobile apps, something I had never tried before. We didn't have enough time over the summer to finish our app, but overall I was still grateful for the opportunity.

Fourth, CSCC01 was probably one of the heaviest courses I've ever taken, but I came out of it with so much:

  • An awesome full-stack app I could put on my resume
  • More experience working in a team over a long period of time
  • Knowledge of what agile development is and feels like
  • Wayyyy more full stack knowledge (we used the MERN stack for our app, which looks very Very Very good on a resume)
  • Understanding of how to use databases
  • Software architectural knowledge to pull out during interviews
  • Usage of actual git flow (in CSC207 we kind of used git, but we couldn't branch and so we didn't really use git)
  • A good grade (CSCC01 is a heavy course, but also one of those courses where putting in the work will almost guarantee you a high grade due to the generous mark distribution)

When I say CSCC01 got me my internship, I mean that. I (still) milk this project during interviews.

Finally, getting involved in MCSS was so much fun.

I was director of marketing, and while I had never done any bona fide marketing before, I loved making cool things and sharing them with people (this one's my favorite). Also, getting involved in the community is super rewarding. Before the semester even started, we had already done a few events, and it felt awesome to be part of a team doing cool things for students at the school!

(This is the part where I, again, encourage you to participate in the community at your school. Not just for career help, but also because your school experience will be better if you do. Full disclosure, I don't get paid as an MCSS exec and employers probably aren't that wowed by it, but to me it's still worth it just because it's a lot of fun)

And then there was applying to jobs.

I decided around July that I didn't want to go back to school in September (just because I was pretty burnt out from courses). That, combined with the fact that I technically didn't have a summer internship (as well as a lot of helpful pushing from my friends) spurred me to start looking for Fall 2021 internships. Unfortunately, as mentioned earlier, if I was looking for Fall 2021 internships I should've started 6-12 months in advance, not 2.

I applied everywhere bro. LinkedIn, Indeed, Angel, these random job sites that promised me jobs and then didn't deliver. I filled in the same information that was on my resume into online forms dozens of times. I was desperate.

And then, I got an email.

ONE email, offering ONE online assessment with ONE company.

It was HSBC (a global bank), for a "Full Stack Developer Intern" position. This was essentially my one shot to make something happen, and so I was super determined to see it through. My prep was pretty standard:

  1. I went over my resume and made sure that for every project on there I had talking points prepared, I knew what my contribution to the project was, and I had stories I could tell from their development that would emphasize communication skills and teamwork. Every company will ask you about your resume. Make sure to do this.
  2. I practiced (admittedly not enough) leetcode — although I mostly hoped that the info from my Data Structures and Algorithms course would carry me.
  3. I skimmed the job description for the technologies that they would be using, and made sure to refresh myself with the quirks of the technologies listed so I could answer questions about them.

The interview process happened in July, and went like this:

  • Online Assessment (OA). This was a personality test where I was given some multiple choice questions, and I had to answer based on what I would do in that situation. I can't give too much advice on this because I don't know what companies look for, but my best guess would be emphasize that you're a team player and can communicate well.
  • 30 minute technical screening where we went over my resume. This is where the resume prep comes in clutch. Also, try and take the initiative and talk about projects that you're proud of. Showing excitement about coding is a good thing.
  • 20 minute HR call where we talked about my salary expectations (they didn't say anything about salary), location availability, and timing.
  • 1 hour technical where I was asked some short general programming questions about JS syntax, React, Multithreading, given an easy Leetcode question, and then was asked to implement a small stateful React component. Again, this type of interview is very standard, so make sure you're prepping for it by practicing leetcode and working on side projects using the languages you want to learn.
  • 1 hour one-way video interview with HR, where I was given questions and had to record answers to them on the fly. Generally, most companies will ask you the same types of questions about working in a team, leadership, communication, etc, so make sure to have a few stories prepared about things you've done that you can pull out when needed.

Through a lot of luck and support, I got the offer!

A lot of people ask me what my resume looked like at the time of getting my first internship, so here it is:

HSBCResume

I think it's a decent pre-first internship resume, but it could definitely could use some work. what the hell is with those margins?

Aaaand then I got a litttle bit greedy. their offer was around $20/21 an hour, and I knew that other banks were offering closer to $25. I wouldn't say I recommend this, but I ended up responding to their offer with a counteroffer that was closer to $23 an hour.

Looking back, I probably wouldn't have done this again. I've almost never heard of anyone losing an offer from negotiating, generally the worst thing they'll say is no. But, the extra $2 an hour really didn't amount to much over 4 months. Plus, I really was in no position to negotiate anything, considering I had no experience at the time AND I didn't even have a phone call from any other company. I won't lie, this was mostly an ego-driven decision.

However, it actually paid off! They accepted my counteroffer, and I was a go for Fall 2021.

So yeah. Crazy summer.

What I Did Well

  • Learned to balance my responsibilities a little better. While I technically had more to do over the summer, I think the fact that the responsibilities were all pretty different helped me avoid burnout. When I was tired of marking, I could apply to jobs. When I was tired of that, I would work on some MCSS stuff. That isn't to say that the summer wasn't stressful — there were periods of insane stress. But there were never any lows as bad as in Winter 2021, and looking back I don't think I would "cut" anything from this summer if I did it again.
  • Got very involved in the community.
  • Actually applied to jobs. Crazy how you get things when you actually look for them.

What I Wish I Did Better

  • I feel like I kind of still took on too much — I know I'm kind of contradicting myself here, but I'm only one semester removed from this summer, and so it's difficult to really look at it objectively. On one hand, I loved everything I did, but on the other hand, I still didn't really get a "break". But like I said, I don't think I would cut anything from this summer, so I guess I'm a little unsure. Ask me again in a year.
  • I applied to jobs way too late. Applying to September jobs in July makes it very difficult to actually get those jobs. Do not do that. I got RIDICULOUSLY lucky (I actually found out that the ONLY reason HSBC was still hiring so late was because it was the first time that my HSBC team was hiring interns ever, and so they were late because they had to figure out a bunch of logistical things). APPLY EARLY.

Whew. That was long. One more to go, and this is the one that you've been waiting for:

Third Year Fall: Reaping is So Much More Fun Than Sowing

In a way, Fall 2021 was a continuation of Summer 2021 in that my responsibilities were still pretty diverse:

I took on TAships for MAT102 (Intro to Proofs), CSC207 (Intro to Software Design), and CSCC01 (Intro to Software Engineering), I started as a Full Stack Developer at HSBC, and my MCSS responsibilities really kicked into high gear.

TAing three courses was a novel experience. I met a lot of cool people and got to teach a plethora of subjects, but overall I don't think I would do it again; especially not while trying to juggle an internship and all the marketing responsibilities for an academic society. Still haven't learned my lesson of not taking on too many things.

The internship itself went great; I got lucky and joined a team right as they were starting up a new project, and so I actually got to help architect their solution; something I've been told you very rarely get the chance to do as an intern. I learned a lot about working with code on a massive scale, dealing with loads of data, and introducing redundancy to processes to ensure resiliency. (I also learned that working with Scala is very difficult, because there are 0 tutorials online on how to do anything with Scala).

MCSS was still rewarding, and I got to market a lot more cool events. Go see if the clubs at your school need help; they probably do and would be down to add you to the team.

The only thing left to do for this semester was to apply for PEY (UofT's coop program). I knew my chances of getting a good one were pretty high; I had past experience, I was a TA, I had a bunch of projects, I had good grades. Everything was looking up baybeee-

pain

pictured: pain

Sooooooooooo.

There are some rules when it comes to registering for PEY. You have to have a certain amount of credits, be in good academic standing, and be a full time student at UofT.

Since I had taken a semester off classes to work, I was not a full time student at UofT.

The one semester I decided to take an academic break just had to be this one huh.

I had done everything at this point to prep, and I was locked out of my school's co-op board.

Anyway, so what that meant was that I had to (again) look elsewhere for summer internships.

And this semester, just because I was forced to, I discovered the biggest tool at your disposal when it comes to getting internships.

Referrals.

None of the interviews I got this semester were through actively applying to things. In fact, I applied to ~30 places through linkedin, and didn't hear back from any of them. I did however, end up getting three interviews, and two offers. I'll go through them one by one.

This was my resume when I got all of these:

wishr resume

nice

1. Konrad

Someone from UTSG that I had met through doing MCSS things had interned with Konrad in the past, and he referred me to one of their recruiters.

Here's how the process went:

  • 15 minute call with the recruiter, where we talked about the position, why I wanted it, and I got to ask questions about the company. You're gonna go through a lot of these when applying for jobs. My best advice would be to just be yourself, be confident, and be curious about the role!
  • 45 minute technical interview where I was asked some short answer general programming questions (similar to HSBC), a very small system design question (which I don't think I did too well on, but they didn't seem to mind too much about it), and a medium Leetcode question.
  • A three hour take-home assessment where I had to work on a full-stack app using React.
  • A final interview with a senior dev where we talked about culture, fit, expectations, etc.

The interview process was similar to HSBC's in some aspects — there were short answer questions on JS and a leetcode. The leetcode was a little more difficult, but still definitely not too bad if you know your data structures and have practice.

If you don't know what a system design question is, it's as the name implies: they'll describe an app to you, and you have to describe (on a high level) how you would architect the app — the tools you would use, how they would communicate with each other, etc. The system design question was definitely new — I think most internships won't ask you anything system design-esque, but if they do and you're stuck, try to at least demonstrate that you have a knowledge of the tools you would use to answer the question. I fumbled a bit on this question, but the interviewer was nice about it and nudged me in the right direction. Generally, I wouldn't stress too much about prepping for system design questions if you're looking for internships, your time will probably be better spent learning tech tools and practicing leetcode.

Finally, for the take-home, I had some time to prep before I started it, so I spent some time refining my React skills and brushing up on how full stack apps work. The best prep you can do for any form of take-home assessment would be to just create your own projects — my knowledge from my website and CSCC01 project definitely came in clutch for this.

Overall, interviewing with Konrad was extremely pleasant. They were super accomodating every step of the way, their workplace looked sick (pool tables, foosball, and snacks?), and I legit vibed with everyone I talked to from there (one of them even added me on LinkedIn after I told them I was going to work somewhere else, which I thought was super sick). I got the vibe that they cared a lot about having a very social culture, they were a very young workplace, and they valued their interns. The pay offer was definitely higher than the average PEY pay, so if you get the chance, I would 100% recommend trying to interview with them.

2. Facebook/Meta

This came out of the blue LOL.

If you weren't convinced yet that applying to jobs is very luck-based, look no further — at this point in the semester, I had applied to a few banks/other lower paying jobs, and hadn't even gotten an OA back. And then out of nowhere, without even applying, I got an email from a Facebook recruiter.

You're telling me I'm good enough to be on Facebook's radar, but not good enough for Loblaws to return my emails?

For the record, getting this was definitely mostly luck, but you can do things to try and tilt the odds in your favour more. My biggest guess was that I got this because of my fixed up LinkedIn profile — I had updated my experience to list HSBC, TAing, and MCSS, I had my website and resume up there, and I had a bio that's a little cringy but not completely "LinkedIn-y", but also very me.

Anyway, this was the process:

  • Facebook email from a recruiter
  • Me freaking out for an hour at my school's smash tournament and then being distracted for the rest of the day (and I maintain that that is the reason why I didn't win)
  • Being added to the Facebook recruiting portal, where they gave me practice problems and the ability to do a mock interview
  • A tech interview where I was given two medium leetcodes to solve in 40 minutes, that I failed spectacularly on.
  • Rejection :(

Overall, this was definitely more unique than the other interview processes. The interview portal had a lot of practice questions, many of which were way harder than I could do on my own, The fact that I couldn't solve many of the practice problems definitely got in my head a bit. However, if you're in this spot, I wouldn't worry too much because the two questions they asked in the interview ended up being quite a bit easier than the practice ones.

The interview portal also had the ability to simulate a mock interview, but only once. My advice would be to save this prep for a day or two before your interview, almost as if this mock interview was the interview itself. There wasn't anyone on the other side, but the mock interview had 2 questions using the same platform that the real interview would be on, each with a 20 minute time limit.

If you end up interviewing for Facebook, definitely take advantage of all the resources in the interviewing portal. Despite being difficult, the practice problems were still pretty useful.

Also, solving two questions in 40 minutes is pretty rough; I felt like I was being rushed the whole way through. If I were to do this again, I definitely would've booked some practice sessions with some friends where I practiced solving some medium leetcodes with a 20 minute time crunch. Looking back, if I was a little more calm and had more practice with the time crunch, I probably could've passed the interview, but nerves and time limits definitely got in my head.

3. Wish

This is a prime example on why referrals matter, and why you should try and look for them anywhere you can. UofT did an event called Industry Day where companies would present to students, and there was a Slack created for it. My friend added me to the slack and told me that there was someone there who worked for Wish and was willing to give referrals if you emailed him. I emailed him with my Resume + website + a good word, and I was connected with a recruiter.

The Wish process was actually the most straightforward process I've ever been through:

  • 15 minute call with a recruiter where we talked about the internship duration, my experience, why I wanted to work for Wish, etc. Very similar to Konrad's, and the same advice applies here.
  • A one hour technical interview where I was asked some short answer questions and given a medium leetcode to solve. The short answer questions weren't too hard, although I did stumble a bit on one of them. Most short answer questions can be answered just by working with languages and doing projects, but for some, try and review the knowledge in your systems programming courses.
  • Another one hour technical interview where they went over my resume and asked questions about my contribution to the projects I did and my HSBC internship, and asked me another leetcode medium question.

Overall, the Wish interview process was very smooth. The leetcodes asked were leetcode mediums — similar difficulty to Facebook's but with more time given (40 minutes instead of 20, which made all the difference). I was able to solve everything that they threw at me, talk through my thought process, and even handle the more difficult twist to the Leetcode they threw in after I solved the initial question.

When going over my resume, I made to talk about the work that I'd been doing at HSBC architecting a large-scale solution, as well as recite the talking points I had memorized about my projects. For Wish, my best advice would be to prep for the technicial aspects, but also to try and be personable during your interview. Don't come off as a robot, and don't go too fast since you have a decent amount of time and can talk through all your thought processes. If you're solving the question super quick, use the time to emphasize your communication skills!

Finally, someone asked me why I didn't negotiate, especially given the fact that apparently some people are making a bit more as Wish interns. I wish I could say there's some grand philosophical reason why I didn't, but the truth is:

100k is way more money than I've ever seen in my life, and I freaked out and accepted the offer almost immediately LMAO.

So, yeah. Maybe looking back I would've negotiated? But like, it's such a jump from any money I've ever made before that I figure I can save the negotiation for my next job.

Present: What I'm Currently Up To

Taking a break :)

You can catch me in 3, and only 3, courses (MAT344, PHL346, CSC309). You can also find me hanging around CSC301, I'm the head TA this sem, but it's the only course I'm TAing. And, you can always find me doing MCSS things.

Hope you're proud of me. Finally taking my own advice. Like I said, the goal this sem is to fix my sleep schedule and get buff.

Check back in a few months to read about how that went. So far, the exercise part seems easy, and the waking up part seems hard.

Wrap Up and Final Advice

So, yeah. That was my journey to go from not knowing what a for loop is, to landing a six figure software job within ~3-4 years. I really hope this was helpful to at least someone — the reason I wrote this was because when I was in first year, I saw these upper years doing these very cool things, and it felt impossible for me to get from where I was to where they were. The path just didn't seem visible at all.

Well, now I'm pretty much where they were, and the path was not nearly as smooth as I thought it would be. I made mistakes during basically every single semester, at no point (including right now) did I feel like I had things figured out, and I never knew if I was making the right decisions or not.

But, there is a path, and this was mine. You'll find your own, one way or another.

Also, as a final disclaimer, I'm not a dev with years of experience in the industry or anything, a lot of what I'm saying could be unoptimal in some way. But, this is everything I've learned over the last few years, and now you know it too.

Overall, the things I did do well were:

  • (I eventually) tried to always seek out opportunities, even if I felt unprepared for them. News flash — we all feel unprepared for things. Out of all the unprepared people, the unprepared person who gets the job is the unprepared person who takes the initiative to seek it out. Start everything before you're ready. You'll learn what you need to on the way.
  • I got a lot of advice from a lot of smart people. I thought about listing every person who had helped me in some way at the end here, but I didn't really want to hunt down 50+ people and ask them if they were okay with me putting their names on my blog. Everything I learned about the industry I learned because I had conversations with people who were kind enough to mentor me, or refer me to resources where I could learn, or even work with me on projects that got me to where I am now.
  • I spent a lot of time grinding. There's no way around this one. I regret some of the ways I distributed my time grinding (too much time on schoolwork, not enough time on side projects and applying), but overall you'll have to grind. Try and find a balance to where you're not burning out, but you're getting things done.

A few last things before I end:

How do I make POSt?

  • Go to office hours, study early, make sure you understand all the concepts on a high level and then work your way down to the details, and don't ever miss any free marks. Also, join the MCSS discord, and feel free to ask any questions you have in the #ask-an-upper-year channel. More detail on this in a future blog post.

How do I get my Leetcode skills up to par?

  • If you don't know anything about data structures, start there. Learn about linked lists, trees, graphs, stacks, queues, and hash tables. Try coding them from scratch, and memorize their time and space complexities.
  • Once you're comfortable with those data structures, jump straight into solving questions with them. One way is just diving into Leetcode.com and doing whichever problems seem interesting, but if you want a curated list of problems, try the blind 75. You don't need to solve all of these to pass an interview, but try out some of the easier ones to start. If you make your way through this entire list (I haven't), you'll probably be able to ace almost any leetcode question an interviewer can throw at you.
  • If you have an interview with a specific company, join the cscareers discord. They have a bot that can show you questions that specific companies are more likely to ask.
  • Finally, there's also the holy grail: Cracking the Coding Interview. I have not read this thoroughly (I've skimmed it), but it's regarded as pretty much the book to get you past a coding interview.

I don't know what kind of projects I should make?

  • Go to a hackathon. They generally have workshops that will teach you how to use tools. Also, the time crunch really forces you to make something, even if it's bad, which is actually why hackathons are so useful. The only way to make good things is to make bad things first, and hackathons force you to make bad things. Make a lot of bad things. Check out MLH for hackathons in your area.
  • If you have no preference as to what tech stack you want to learn, go look at job positions you'd be interested in, read the technologies that they use, and try to make a project using those technologies. Having a MERN project on my resume really helped in my HSBC interview, since the technology was relevant to the position.
  • Just start. This is especially true of Web Dev, but basically true of anything. Pick some stupid idea that comes to your head in the next 10 seconds, and just start your project with very little information, and learn as you go. Often, that's really the only way to do things. Just start, and once you reach a bump, grind through it.

I've landed the interview, what do I do?

  • Prep your leetcode. Do practice problems, especially ones that you know are similar to ones that the company will ask you.
  • Prep talking points for your projects. Talk about your individual contribution, the challenges you faced and how you overcame them, and things you learned from them.
  • Do some brushing up on the tech stack that the job works with. They'll almost definitely ask you questions about those technologies.
  • Research the company beforehand and make sure you have a good grasp on their corporate values/culture. I was more serious for my HSBC interviews, and more casual for my Wish/Konrad interviews. Knowing your audience is really important.
  • Do a mock interview. These help, because they really get you into the interviewing mindset. You can do leetcode silently to yourself all day long, but in the actual interview, you'll be under a time crunch, and you'll have to explain your thought process eloquently to your interviewer.
  • Don't neglect your communication skills. Listen — I've met a lot of people in CS who are technically brilliant, but are terrible communicators. The communication aspect is just as important as the technical aspects in your interview. You don't know the answer to a specific tech question a company asks? That's fine, they can teach you that on the job. You come off as someone who's unteachable or unpleasant to work with? They probably won't be as down to teach you how to be a human.
  • Ask questions at the end of the interview to show that you're interested in the position.

Recently, a few people have tried to ask me if there's any "trick", any "secret" to success that I know that could help them. Generally, I respond with:

"i have no idea im a third year student lol"

But also, one thing I do know is this: there is no complex but easy trick to getting ahead. I think people are looking for some trick that's complex enough where no one else is doing it, but easy enough where they can learn it in a month. Unfortunately, everything I've experienced points to the "secret" being the opposite. It's simple and hard.

Everything I've described, if you boil it down, is very simple: study hard + effectively to make POSt. Go to hackathons and do random projects to add to your resume and learn skills. Engage with your school community and find people who will lift you up (and vice versa). Fix up your resume, and apply everywhere you can, even though it's tedious and soul sucking. Seek out referrals at school events and LinkedIn. Spend a lot of time practicing leetcode and other interview skills.

It's simple, but hard. Everyone can do this, but it just takes a lot of time, a lot of dedication, and lots of slow, daily progress.

Anyway, that's it. I think this is the longest thing I've ever written. If you've made it this far, I hope this was worth your time, and it helped you out. If it did, feel free to shoot me a DM, I'd love to hear that all the time I spent writing this made an actual impact on someone.

Tune in next month, when I write a completely different blog post about something way less serious, like my phobia of fish or whatever.

Peace out.