Time to read: 22 min read
This is an addendum to my blog reflecting on my experiences with co-op in university. I'd like to explore some sample co-op trajectories in the fields of technology and business, as those are the two most common fields for co-op placements and internships, and they're the only fields I'm familiar with.
This is part one of the addendum and I'll cover different tech jobs as well as some tips and tricks on how to identify and land the top tech roles.
The name of the game for technology co-ops is to work in the US. The pay in the US is drastically higher than the pay in Canada and many of the top companies to work for don’t have Canadian offices. Furthermore, the network effect at various US-based tech hubs such as Silicon Valley and NYC is ideal for making connections at the beginning of one’s career. One thing to consider, however, is the cost of living; rent is pretty insane in both California and NYC. Furthermore, safety and living conditions are also not ideal in many of the Californian cities due to the homeless crisis, so quality of life should also be a consideration when moving to a new city for a job. Due to the mass exodus of companies from California, there are newer tech hubs popping up such as in cities like Portland and Miami, which are worth considering.
In Canada, Toronto is probably the best city to work in, followed closely by Vancouver. Ottawa is not bad for legacy industries such as telecom and Montreal is a decent city for tech but the pay will be lower than other Canadian tech cities. Waterloo-Kitchener also has a burgeoning tech hub.
While it’s possible for people to go abroad outside of North America for work, the vast majority of companies hiring tech co-ops from Canada will be either American, Canadian, or the North American subsidiary of an European or Asian company.
Information is relevant as of 2021.
If one were to categorize all the co-op employers into three broad categories, it’d be large companies, small companies, and government organizations.
I’d recommend against working at government organizations; out of everyone I know who did an internship in the public or semi-public sector in tech, the experience has been overwhelmingly negative. Generally, public sector organizations have outdated and poorly written tech stacks; many of the people who’ve worked there claim that the bulk of their time was spent debugging and fixing code as opposed to writing new code. Furthermore, the organizational structure tends to be more bureaucratic so a lot of time, people have told me they spent as much time on following bureaucratic procedures as working on actual code. Finally, these public organizations tend to overhire each term, so many people are just stuck with no work to do and the pay is also amongst some of the lowest for tech jobs. That being said, I’ve never actually worked in any public sector organizations so please take everything I say with a grain of salt. Public sector co-ops are some of the easiest co-ops to land and different organizations can be drastically different (especially semi-public organizations), so public sector co-ops might be worthwhile to look into for specific situations.
I would define large companies as companies which have established co-op and internship programs. These businesses range from large start-ups to established public companies. Most of these companies will also hire for multiple positions, both technical and non-technical. The benefits of working for these companies are twofold. If the company is reputable (currently companies like Google and Citadel have well-regarded engineering cultures), then your professional stock in the eyes of future employers go up; these large companies tend to also be the ones who pay the most and offer the best benefits for co-ops.
While these large companies typically have tens, if not hundreds of available placements, they are also some of the most competitive offers to get so the supply and demand nets out. Not all large companies are the same, however; while the most sought after co-op employers are usually large companies, there are also many large companies which aren’t as attractive. Many legacy tech companies tend to be more bureaucratic and offer less competitive compensation; I would also stay away from non-tech businesses hiring technical co-ops, as those companies tend to not be as focused on tech as pure tech companies.
Smaller companies are typically earlier-stage startups; usually there are no recruiters and the roles are more broad. While still competitive, the compensation will not rival the top large companies. To make up for this, however, co-ops tend to have more responsibilities, including more autonomy and more decision-making opportunities. These companies, especially newer ones, are a hit or miss; I’ve heard horror stories where people were fired after they had completed their project but also stories of people getting the opportunity to design and implement mission-critical projects. If one is entrepreneurial, there are even programs in some universities that give grants and allow students to work on their own startups during co-op terms.
Overall, the decision to co-op at a large versus a small company boils down to several cruxes:
If you’re a person who has the skillset and the experience to land a placement at one of the top large companies, you can expect an organized work term where you get to make a decent amount of money and add a reputable name to your résumé. If you’re a person who values learning and doesn't mind working a little harder, then working at a smaller company can greatly enhance your skillset and allow you to explore avenues that you’re interested in.
Here are three main categories of placements in tech.
This is probably the most common role in tech; there are many specialized niches, and the definition of each niche changes slightly with each company.
There isn’t really a large distinction between developers and engineers; most companies use the two terms interchangeably. Traditionally, developer implies execution and engineer implies design and execution.
The most common roles I’ve come across include
The roadmap for SDEs vary greatly on one’s abilities and one’s goals. Typically one would start with some programming experience either in school or in side-projects but no official work experience; through working at different co-op placements, one would add new skills to their skillset and enhance existing skills. As one advances, one would choose roles that they’re increasingly interested in, as well as new companies which offer better pay and benefits.
For the first term, few people make it to the States for co-op, because few people have prior tech work experience or impressive side-projects. In fact, many people don’t even manage to land pure SDE jobs; many people start in IT or QA (usually in some sort of “analyst” position) and oftentimes they work for unknown or non-tech companies. Don’t be discouraged if you don’t land your dream role in the first term; the first co-op placement is more meant to acclimate you to the professional environment and hopefully help you develop some skills, or atleast give you some time to develop skills outside of work and school.
For the second and third terms, you should try to get roles that you’re interested in and try to work at a sought-after company. There are two keys to landing interviews; the first is to improve your skillset and the other is to improve your application. Improving your skillset means taking relevant courses in school and also working on side projects and learning outside of school. The key is to stand out, so don’t just build generic projects from tutorials you find online, try to build something unique which demonstrates certain skillsets. Another way to demonstrate skill is to be a Research Assistant to a prof in the relevant field, or to be a Teaching Assistant for a relevant course. Improving one’s application means networking with industry professionals and recruiters at the companies you’re applying for, getting referrals to said companies, and polishing up your résumé. Once you have interviews, you should find out which questions were asked by the company in the past and study them; you should also do Leetcode and Cracking the Coding Interview to brush up on general questions. If you prefer a more course-based approach, I heard Grokking the Coding Interview is a good source. Most large tech companies’ interview questions tend to be at a Leetcode Medium and up, so be sure you can comfortably solve them and are intimately comfortable with common data structures and algorithms. I’d also recommend Python for interviews, as the simple syntax reduces potential for your code to not run due to syntax errors (I would recommend reading the first few chapters of Python Cookbook to learn some tricks to save time during the interview).
During the actual interview itself, shut up and listen to your interviewers when they’re talking. Being explicit is the key; explicitly ask your interviewer about the requirements of the question and explicitly explain your thinking, in particular the tradeoffs you’re making in your solution. Try to establish rapport with your interviewers (smile and be friendly) and be sure to be on the same page with your interviewer before you start writing anything. Start with a working solution, usually some sort of brute force solution, then optimize and refactor the code. If your interviewer jumps in, it probably means you’re stuck or on the wrong path, so listen carefully to what your interviewer has to say and try to implement their hints; not listening to advice is a red flag while being coachable is a green flag.
Finally, for your last co-op terms you should ideally be in a role that you’d want to pursue full-time and in a company that you’d want to work for. Return offers are very common and it’s desirable because it saves you the trouble of having to look for work during your last year of school and you generally receive a higher signing bonus and salary if you return to an old employer full-time. Returning to a previous co-op also means more leverage for negotiations on compensation. For the last few co-ops your network will matter more; it is often not enough to solely rely on your school’s co-op system to find a placement (especially if you don’t go to a school with a reputable co-op program such as UWaterloo and UBC). You’ll most likely need to reach out (or at least respond) to recruiters from different companies and also have a network of professionals from the different companies.
PMs lead the work of a team to accomplish project goals given certain constraints. They’re employed in almost all larger organizations, ranging from non-tech corporations to government organizations. Although it’s traditionally a business role, it’s a role that is in demand in larger tech organizations and it’s a role that is becoming increasingly technical.
There can be several reasons why one would want to be a PM instead of an engineer. Many of the PMs I know personally have a technical background but found that while they enjoy working with tech, they also enjoy working with people. Furthermore, PM roles usually require less technical skills than a full engineer or dev role, so it can be a good stepping stone for non-technical people into the tech world. While PMs tend to get paid slightly less than engineers, they generally get paid more than other business functions within the organization.
There are some caveats, however. PMs aren’t as in demand as engineers so there are less postings, furthermore PMs also have a lower bar of entry because it’s a role in tech that is relatively open to nontechnical people. This means that more people tend to apply for PM roles relative to the number of PM roles available; this, coupled with the fact that PM roles rely largely on intangible soft skills, makes the most sought after PM roles somewhat difficult to land.
While both product managers and project managers share the same acronym, they’re actually separate roles. Product managers can be almost thought of as a more macro and more strategy-focused project manager; product managers set the goals and business trajectory of products while project managers lead the many initiatives that bring those goals to reality. Product managers tend to be a more involved position with longer commitment periods (oftentimes no definite beginning or end) so there aren’t that many product positions for co-op. That being said, for the few product co-op placements available, the job requirements (at least for co-ops) will be very similar between the two PM positions.
PMs in tech can generally be broken down into two main categories, which are
As with many business positions, there aren’t many hard requirements for landing a PM position as most of the skills are intangible. Having strong interpersonal skills and good organization are crucial to the role. One can also work towards professional certifications such as PMP to demonstrate understanding of PM principles, but the best demonstration of PM skills is practical experience. Oftentimes in universities, there are various student-run organizations including design teams; being in a leadership position can be impactful in demonstrating PM skills.
The trajectory of a PM is similar to that of a dev in that you start at smaller, lesser known companies, and over the terms, slowly graduate to better and more desirable positions. The last few co-op placements should be placements that you’d want to work at full-time. I would actually recommend that you start out in a technical role in your first co-op positions; having a technical background is a massive competitive advantage in landing a good tech PM position.
Due to the breadth of the PM role, it’s incredibly important to understand what exactly the position in each organization entails; roles may vary greatly between teams and also between terms. There are also many aspects of being a PM; some PM roles emphasize the planning aspect of the project while some emphasize the execution. Understanding and experimenting with said different aspects is important to discovering what you enjoy doing the most.
One of the fastest growing fields in tech is the research and application of AI technologies. Large companies are investing heavily in AI and companies are founded around the use of AI.
There are several roles associated with the field, such as
This field is growing but unfortunately, at least in my experience, is not really taught in undergrad; most of the ML-related courses in Waterloo aren’t really available until the upper years. I found instead that there are many excellent resources to learn on your own; The Hundred-Page Machine Learning Book is a good primer for the field and there are many courses available online, such as the Deep Learning Specialization by Coursera. If you are planning to take courses online, be sure to take reputable ones with good reviews and preferably some sort of assignment or testing for certification; I found that I learned best through actually implementing many of the models and many of the courses online are also poorly made (basically tutorials on how to code different models). I would also focus on learning a widely-used ML library such as Tensorflow or Pytorch. You should also take some statistical courses and linear algebra courses in school. Having research experience, such as working as an RA with a prof, will be immensely helpful in demonstrating value to data science employers.
The co-op trajectory is similar to that of an engineer; you start at a less technical role and as you gain skills and experience, you enter into roles and companies that you’re interested in. I found that oftentimes working at very large companies or companies which are focused on AI tend to yield the most interesting and impactful projects. Furthermore, while many of the postings advertise for PhDs or Masters only, if you, as an undergrad, have experience and are qualified, you should apply anyways as more likely than not, you’ll get the role because the industry is greatly lacking competent professionals.