The 2025/2026 recruiting cycle was probably the most chaotic thing I've ever put myself through. Dozens of rounds, dozens of rejections, and a lot of sitting with the uncomfortable question of whether I was actually good enough. This is a reflection on all of it — the tactical shifts, the psychological weight, and what it finally took to land somewhere I'm proud of (hopefully).
The Beginning: 3A / 2025 Cycle 1
Faire · Dawson Partner · onsemi · Magi.inc · Intact
Coming off my co-op at UWaterloo IST, I felt quietly confident. I had shipped JADA — a real end-to-end AI pipeline serving 42,500 students — and had worked with a solid team on something that actually mattered. Customer obsession, student outcomes, quality over volume. I thought that story would carry me.
It didn't.
Cycle 1 gave me five interviews: Faire (AI Platform Engineer), Dawson Partner (ML Engineer), onsemi (voice agent team), and OAs from Magi.inc and Intact. I passed none of them. Faire was a two-pointer leetcode problem I almost solved. Dawson Partner was a linked list leetcode question I solved too slowly. onsemi asked me to define gradient descent in a behavioral round — which should have been easy, and wasn't. Each one stung in a different way.
The honest post-mortem: I wasn't doing enough LeetCode. I had real project experience and real stories, but I couldn't close under pressure. When the term was already loaded with CS246E (Object-Oriented Software Development - Enriched), CO367 (Nonlinear Optimization), and CO456 (Game Theory), and midseason hit right after Cycle 1, the gap between "I know this" and "I can execute this in 45 minutes with someone watching" became very real, very fast.
So I started grinding. That was the actual turning point.
3A / 2025 Cycle 2: The Grind Pays Off (Kind Of)
ARUP · Capital One · imbue · Ericsson · Orderholic · Loadlink · WDI Wise Device INC · CS 136 ISA · Port 443 · The EPCM Group · Legacy · ATS Corporation · Analyst3 · Zomp · QC Career School · Qorsa · Toronto Transit Commission · Rocket Innovation Studio (offer)
Cycle 2 was peak chaos. Reading week opened up and I revised my resume, applied aggressively, and suddenly had 20+ rounds of interviews and OAs running simultaneously. There were days I finished a full slate of classes, sat down, and did three interviews back to back — for companies I couldn't even skip a lecture to prepare for, because the profs didn't post slides or recordings. It was a grind in the truest sense.
The full list: OAs from ARUP, Capital One, and imbue. An HR phone call with Ericsson. Pure behavioral rounds with Orderholic and Loadlink. WDI Wise Device INC added a C++ line-drawing question on top of the BQs. I also interviewed for a CS 136 ISA position on campus, which was a different kind of pressure — teaching-adjacent, not engineering.
Some of the more memorable ones: Port 443 is a music app startup and they brought me in for an in-person — whiteboard coding, resume deep-dive, and then a logic puzzle. Two ropes, each burns for exactly one hour, but at uneven rates. No clock. How do you measure 45 minutes? You light one rope from both ends simultaneously and the other from one end only. When the first rope burns out (30 minutes), you light the second end of the other rope. It burns out in 15 more minutes. 45 minutes total. I almost didn't get it. They gave everyone donuts at the end and said it was a company tradition. Genuinely one of the more human interviews I've had.
The EPCM Group ran two rounds — the first was resume deep-dives and logic walkthroughs with engineers, the second was live C# and SQL to mock a backend service. I passed the first, got the round 2 invite, and just didn't show up. The interview volume that cycle had broken me and something had to give. HR reached out afterward and told me I had been their priority candidate. I still think about that one.
Legacy was a US health startup hiring a Founding Full Stack Developer. They asked me to prototype a RAG pipeline live, essentially vibe-coding in real time. I got it working. Didn't get selected. ATS Corporation and Analyst3 were both behavioral-only, resume deep-dives. Zomp was a small outsourcing shop — and in the most humbling twist of the cycle, the interviewers were also co-op students, same year as me, with mutual friends. They gave me a problem that wasn't LeetCode-style: something involving logic inside a class object with binary search woven in. I can barely remember the specifics, honestly. I got cooked. Getting cooked in front of people who know the same people you know hits differently. QC Career School asked for a live React coding round.
The standout was Qorsa — a UWaterloo-adjacent company working at the intersection of quantum information and security plus some AI applications. I interviewed for two roles: ML Engineer and Programming Language Developer. Got to talk directly with their research lead and CTO, which was genuinely enjoyable. Ended up ranked but not rank 1.
Toronto Transit Commission was purely behavioral, straightforward compared to the rest.
Most of the cycle ended with ranked-but-no-match. Rocket Innovation Studio was the exception: they gave me rank 1. Almost entirely behavioral and resume-based — they wanted to understand how you think and how you collaborate, not just whether you can solve a graph problem. I took the offer. The team had a reputation, and the work had real infrastructure scope: DevOps, CI/CD, production systems. Exactly the gaps I knew I needed to close.
3B / 2026 Cycle 1: When Preparation Meets a Streak of Bad Luck
Amazon · BitGo · Base Power · Capital One · Super.com · ITPipes
I'll be honest about why I'm writing this at all. I spent two days reading The Freedom of Money by CZ, and something about it made me want to put my own story down somewhere — even if nobody reads it. Partly a self-review, partly just needing to process.
Heading into 3B, I felt like a different candidate. The Rocket term had filled in gaps I'd been quietly aware of for a while. On the backend side, I did the initial implementation of a transaction verification service — extending existing risk-check logic into a multi-state decision system, wiring in notifications to underwriters, and closing an auto-complete bypass loophole that had been sitting in the codebase. It was the kind of work where correctness constraints actually matter, not just "does it run." On the infrastructure side, I solo-migrated a set of Helm charts and proposed a canary deployment strategy via Argo Rollouts that got greenlit. DevOps and CI/CD had been blind spots in earlier interviews — now they weren't. I had done more than 100 LeetCode problems and mediums were no longer a wall. CS246E left me with a solid OOP foundation in C++, and I'd built an ASCII game engine from scratch as a course project. CO456 produced Slopfish — a chess engine variant with alpha-beta pruning, NNUE training, and GPU acceleration via CUDA. On top of that, the Rust work-stealing scheduler I'd been building independently — lock-free queues, CPU affinity, benchmarked throughput — my own dig into systems programming and concurrency.
I felt prepared. I was wrong about what that preparation would actually deliver.
Super.com OA — rejected. Capital One OA — rejected. ITPipes was a Seattle-based company doing computer vision applied to physical infrastructure — pipes, sewers, the unglamorous stuff that actually matters. Cool problem space, and they offered sponsorship. Two rounds: first was resume deep-dives and behaviorals, second was a real-world implementation problem. I got ranked but didn't match.
BitGo's post-trade team ran two back-to-back technical rounds. The first went fine — data handling via priority queues, worked through it cleanly. The second was consecutive with no break, and I was burned out by the time the Wordy problem landed. Pure logic implementation, no algorithmic trick to lean on. I couldn't close it.
Base Power is a unicorn out of Austin doing energy infrastructure. The Quant Developer interview was structured like a graduate-level optimization lecture and expected live Python — a language I hadn't seriously touched in a term. I genuinely had no idea what they were looking for. I ended up asking the interviewer to just show me the answer. Turns out the whole thing was about optimizing a class design around high cohesion and low coupling — a straightforward OOP concept — while I had been spiraling through race conditions and concurrency issues that had nothing to do with it. It was rough, and a good reminder that "100+ LeetCode problems" doesn't mean "prepared for every format in every language" — or every interviewer's definition of "optimization."
Amazon was the one that really sat with me. Passed the OA. Two rounds of technical interviews — I enjoyed both conversations, worked through the problems, felt okay walking out. The rejection email arrived two days later, the same evening I got cooked on a stats midterm I hadn't properly studied for because I'd been deep in interview prep. Two things going wrong at once. I sat with that for a while.
Summerloo has always carried a particular weight. About two years ago in 2A — I had chosen Sequence 4, three consecutive study terms back to back. I thought more preparation time and more courses would make landing an internship easier. What I didn't account for was that most of my friends were on Sequence 1 or 2, meaning they had already left for co-op while I was still in class. I was already burnt out and a little lonely halfway through. I almost had no interviews. Machine Learning Engineer at Nokia and Backend Developer at Tata Group were the only ones. I knew what backend development meant in theory — everything I had came from small personal projects, nothing close to industrial scale, let alone machine learning. I'm still not sure how I got those calls. I didn't get either of them.
I was trying to transfer into CS, giving up most things that made life feel normal — staying up late grinding CS136, applying to hundreds of jobs, chasing a GPA that felt like a gate I had to break through. And despite hitting exactly the cutoff point for the transfer that semester, not one point more or less, I still didn't get in. (I tried again using CS246E as my qualifying course, ended up with the same mark as CS136, and got rejected again — but that's a story for another time.) Watching peers get in and land internships in the same breath was its own kind of discouragement.
No offers in North America and no success at school. Just a depressed mind and a body worn down by too many late nights — and honestly, not all of it was even productive. Some of it was just sitting in the sadness and the nerves. Studying abroad, no relatives nearby, doing everything alone without a financial safety net or some natural gift for math and CS — it was genuinely hard in a way that's difficult to explain to people who haven't been there.
Now it's third year and I'm watching peers head to San Francisco, New York, or FAANG while I'm still in the cycle. Some of them started coding in high school, had parents in the industry, or just had a cleaner path into CS. That's its own kind of pressure — not resentment, just the quiet weight of comparison. I know the excuses I could reach for — started coding late, not enrolled in CS major, not as gifted as others, etc. But I chose this field because I like building things and believe software is one of the most direct ways to change the world. So the excuses don't really help. What actually helps is going back to fundamentals: more LeetCode, contributing to open source, fixing the gaps the rejections keep pointing to.
Malcolm Gladwell wrote in Outliers that mastering something takes 10,000 hours. I think about that a lot. I'm not there yet — but I'm on my way. The past is the past. Compared to first year, this is already a completely different story.
The Lessons That Actually Landed
LeetCode is a floor, not a ceiling. You need it to even get in the room, but passing rounds requires something harder to train: composure, articulation, and the ability to think out loud while someone evaluates you.
Behavioral rounds are technical rounds. The best story in the world doesn't help if you tell it poorly. Specificity matters. Verified numbers matter. Knowing exactly what you did versus what the team did matters. I got better at this by being ruthless about what I could actually confirm — and refusing to pad with things I couldn't.
Domain gaps show up at the worst times. Python fluency, OOP articulation, language-specific idioms — these aren't things you can fake when someone asks you to optimize live in a language you haven't touched in a term.
100+ LeetCode problems later, I still got rejected. That's recruiting. The honest version of this story doesn't have a clean arc. I'm going into Cycle 2 having worked harder than I ever have, with more real experience than I had a year ago, and I'm still figuring it out.
What's Next
Cycle 2 and externals. More applications, more rounds, probably more rejections before something lands.
CZ wrote: "Hey, it's just a game. Take work seriously. Take life seriously. But don't take yourself too seriously. Make the best out of your simulation." That's probably the right frame for all of this.
Compared to 2 interviews in all of 2A, this is already a different world. The trajectory is real even when the outcomes don't feel like it. Life needs to continue. I will keep focusing my energy on the future since "there are always more opportunities in the future than there were in the past." — and I'm moving forward.
3B / 2026 Cycle2: What Actually Happened After
Boost Collective · Nova Maps · Northbridge (A Fairfax Company) · SAP · Interac · Aversan Inc · Purolator · Guspro · Techtronic Industries Canada(TTI) · The Globe and Mail · Owner.com · Guidepoint (offer)
It's been almost a month since I first published this post. To my surprise, a lot of people actually read it, including recruiters. So, a quick update.
I matched with Guidepoint and will be joining as an AI Engineering Co-op this fall. Guidepoint runs an expert network, connecting clients to domain experts across industries. The interview was mostly resume deep-dives and behavioral questions — straightforward by the standards of this cycle. I won't pretend it was purely merit; there's always an element of luck in matching, and I'm genuinely grateful for the opportunity. Their headquarters is in New York, but they recently opened a Toronto office focusing on AI, and things there are moving fast — startup energy inside a more established company. Since Waterloo is the only city I've lived in since moving to Canada, the idea of living somewhere new is exciting in a way I didn't expect.
Owner.com was the one that stung a little. They're a Series C unicorn out of Palo Alto building AI tools to help small, local restaurants compete against the giants. The mission resonated immediately — I've always been drawn to products that exist for a real reason, and this one does. The process had two parts: a call with the hiring manager and VP of Engineering for a resume deep-dive and company intro, followed by a technical pair programming round with a senior engineer. The problem was a TypeScript implementation of something they actually work on. It went smoothly: good conversation, good collaboration. But they told me they'd miss the Cycle 2 match deadline and would send a direct offer instead. By then I'd already matched with Guidepoint. I sent HR a note explaining the situation and thanked them for the process. “Until we meet again, California”.
Guspro gave me my first ever Embedded Software Developer interview. The format was resume deep-dives and OOP concept questions; thorough, not gimmicky. I've been quietly fascinated by physical AI and robotics for a while, and with the growing panic around software roles being automated away, the appeal of going lower in the stack has only grown. The interview went well; I answered everything cleanly and got ranked. But Guspro is based in Chatham — no GO Transit connection to Waterloo, about nine hours by public transit. I appreciated being selected, but the logistics made it impossible this time.
Purolator interviewed me for an Application Engineering role — behavioral and resume-based. I went in curious about the routing and optimization work, given my background in Combinatorics and Optimization. Turns out that work sits in a separate Data department entirely. Good conversation regardless.
The Globe and Mail was a different kind of interview. Over 180 years old, still running. The role was AI Workflows & Automation Intern — building automation inside a media company, which is more interesting than it sounds. The interviewer mentioned he'd read my blog and found it enjoyable. That genuinely caught me off guard; it was the first time a recruiter had brought it up explicitly in an interview. If you're reading this now: thank you. That small moment meant more than you probably know, and I hope our paths cross again. Ultimately I want to be in a more technical role, but I left that conversation with a lot of respect for what they're building.
Boost Collective is a Toronto startup building music applications — two rounds, behavioral and technical. The interviewer described their culture as similar to Cluely's (the AI startup that went viral for helping people cheat interviews). High energy, unapologetically ambitious, work hard play hard, and I've seen their Instagram reels very often. I matched with Guidepoint before the technical round, so I never got to see what they'd throw at me. TTI offered a Data Engineering role focused on platform modernization — a lot of unstructured data cleanup work. Two rounds: HR screen, then a technical deep-dive with a senior engineer. Good conversation, learned a lot about the data engineering stack. Same story: matched before it concluded.
SAP, Northbridge (a Fairfax company), Interac, Aversan Inc, and Nova Maps were all scheduled after the match. I sent the same note — appreciated the opportunity, won't be moving forward this cycle.
And that's probably where this story ends, for now. I'm genuinely surprised this blog found as many readers as it did. If you made it here, thank you — I know it's long. I wanted to write it down because this stretch of time deserves to be recorded: the rejections, the near-misses, the interviews that went well and led nowhere, and the ones that led somewhere unexpected.
I secured something I'm excited about. But I'm not under any illusion that I've closed the gap between where I am and where I want to be. There are engineers out there who are genuinely cracked, and I'm not one of them yet. That's fine. That's the work.
Summer 2027 — I want to look back at something I'm proud of.
See you in September, Toronto. 🍁