Finishing NUS CS in 3 Years While Doing 10 Internships

Posted on Apr 18, 2026

Why

NUS BComp (Computer Science) is designed as a 4-year programme. But I completed it in 3.

Not because I was trying to speedrun university for the sake of it – but because I discovered pretty early on I did not enjoy traditional studying as much as I thought I would.

This guide may (or may not) be helpful to you as an incoming / current NUS CS student looking to get a head start on their career.

Year 1 Semester 1

In the first weeks of my first semester, I followed the “normal” path. I took the usual modules any CS freshie would take:

  • CS1101S - Programming Methodology
  • CS1231S - Discrete Structures
  • GEA1000 - Quantitative Reasoning with Data
  • MA1522 - Linear Algebra for Computing
  • RVX1001 - Science Fiction and Society

Like what other students did, I skipped physical lectures, opting to watch recorded lectures instead. Prior to each tutorial session, I would make sure to complete (or minimally attempt) the problem sets.

But halfway through the semester, I started feeling bored. I found a lot more joy in reading technical blogs and deep-dives beyond the curriculum. The time that I’ve devoted to mastering things like set theory proofs in CS1231S didn’t feel fruitful. I wanted to spend that time learning actual things in the industry. Restless, I started browsing job portals.

Having completed a software engineering internship at Zenith Education Group before university, I’ve seen firsthand the power product managers possess in determining the direction of a product. On a whim, I decided to apply for a product management role at Shopee. The process was fairly straightforward – it was mostly composed of 2-3 rounds of casual conversations about my past experiences and what I was looking to learn. Candidly, I mentioned I was interested in exploring a product management role and as luck would have it, the hiring team took a gamble on me.

Before I knew it, it was my first day at Shopee.

Shopee Campus

The arrangement I had with my manager then was a 3-day part time work week, which meant I could juggle my academic workload decently since I was only taking 20 modular credits worth of modules. I was also able to attend tutorials on my off-days.

At Shopee, I was tasked to spearhead the development of the Flash Sales feature on the Product Listings Page. Essentially, it was a feature designed to create hype by artificially limiting the inventory of specific items.

alt text

Most of my day-to-day involved talking to product operations and business development people. Honestly, I didn’t feel like I had much power. I felt like a middleman between multiple departments. PMs didn’t have as much influence as I’d once thought.

This was likely my biggest takeaway from this internship – internships are great for dashing misconceptions early. It’s always better to find out early what you like as an intern than as a full-timer committed to a role. What struck me more was watching the frontend engineers code. I was genuinely in awe. I wanted to approach, ask them some questions and maybe even request an internal team transfer. But I eventually decided against it since it wouldn’t reflect too well on me.

Eventually, I did decently (not spectacularly) well for my finals but I was satisfied. More importantly, this semester marked a turning point for me: I realized I was capable of juggling a full course load (20MCs) with a part-time internship.

Year 1 Semester 2

Certain that I’m only interested in software engineering roles, I started my next software engineering internship at QCP Capital, a cryptocurrency trading firm. Concurrently, I enrolled in the following modules:

  • CS2040S - Data Structures and Algorithms
  • IS1108 - Digital Ethics and Data Privacy
  • IS2218 - Digital Platforms for Business
  • MA1521 - Calculus for Computing
  • RVC1000 - How in the World Do We Get Along? (withdrawn)

I got this internship through cold outreach on LinkedIn. I introduced myself and simply asked if there were any software engineering openings available. Just five minutes later, I was asked to send my CV.

Learning Point #2: Don’t be afraid to cold message people. What’s the worst thing that can happen? They either ghost or say no.

alt text

The work itself was genuinely interesting. I built connectors to exchange APIs. These include Binance (which later became where I ended up interning!), Bitfinex, Kraken and Coinbase. We were aggregating price feeds across these exchanges and piping them into the PYTH Network in exchange for PYTH tokens. In a sense, I was the only member of the team working on something directly revenue-generating, which was a pretty cool feeling (as an intern no less!)

One challenge I ran into was the WebSocket connections to the exchange APIs were intermittently dropping. This was a known painpoint with long-lived L7 connections. The solution we converged to was maintaining redundant WebSocket connections per exchange so that even if 1 connection is killed, the other N-1 connections can continue to listen for incoming messages. We then fanned the messages with Amazon’s Simple Notification Service (SNS) and relied on Amazon’s Simple Queue Service (SQS) for message deduplication before finally ingesting the price feed messages for further processing.

This was also the semester where I took 2040S, which ended up being one of the more influential mods in my university life. My TA inspired me enough that I eventually became a TA myself 2 semesters later. At this time, I also started regularly attending Orcacodes, an interest group in RC4 focused on competitive programming, algorithmic problem-solving and all things nerdy. It was then when I learned (and practiced) how to properly dissect and articulate my thought process through a problem. This turned out to be deeply critical for tackling technical interviews, especially for big tech and quant recruiting cycles.

Year 1 Summer

By sheer luck, I managed to secure a backend engineering internship offer from Binance. This represented my first experience working at a big tech company. Here, I was allocated to the Know Your Customer (KYC) team. Simply put, I am part of the backend team behind the registration page you see on Binance!

binance-sign-up

I worked on an internal backend service measuring the end-to-end latency of user verification. This includes the moment a user initiates KYC to when they have been successfully verified / rejected. The intention behind this was to extend this into an alerting system (i.e if latency exceeded the p99 threshold, we could raise alerts demanding manual intervention). This is also useful for tracking the performance of third-party verification vendors. Sometimes, these vendors take longer than expected so recording these latencies measurements gives Binance legal grounds to hold them accountable to their SLAs.

Since Binance was a fully remote company, it was also where I realized I am not as productive in fully remote environments. There’s noticeably a lot more inertia when it comes to scheduling video calls. It’s also not as easy to quickly reach out for help as opposed to when an engineer is physically right across your desk. In a sense, this experience also gave me clarity over the type of work environment that I function best in.

I wanted to maximise my summer so I enrolled in CFG2101, a credit-bearing internship module under Centre for Future-ready Graduates (CFG) worth 4MCs. I couldn’t enroll in School of Computing (SoC)’s official internship programme (i.e CP3200/CP3202) since I have yet to accumulate sufficient modular credits then.

I also enrolled in Design Your Own Course (DYOC) via edX, which gave me another 8MCs. The best part was that registration fees were also reimbursed by NUS. (sorry juniors: as of time of this writing, DYOC via edX has been discontinued)

Summary of modules enrolled:

  • CFG2101 - NUS Vacation Internship Programme (4 MCs)
  • DMX1101 - Design Your Own Course (1 MC)
  • DMX1201 - Design Your Own Course (2 MCs)
  • DMX1202 - Design Your Own Course (2 MCs)
  • DMX1301 - Design Your Own Course (3 MCs)

In hindsight, I should also have done CP2106 on top of everything. This would have allowed me to complete a total of 16MCs during the summer break. Traditionally, doing both a credit-bearing internship and Orbital is a no-go but because CFG2101 falls under CFG while CP2106 is managed under SoC, you could technically do both. Let’s collectively hope this hack does not get patched soon…

Year 2 Semester 1

I enrolled in the following semester with the following modules:

  • CS2030S - Programming Methodology II (4 MCs)
  • CS2100 - Computer Organisation (4 MCs)
  • CS2102 - Database Systems (4 MCs)
  • IS2238 - Economics of IT and AI (4 MCs)
  • CFG1002 - Career Catalyst (2 MCs)
  • CFG1003 - Financial Wellbeing – Introduction (0 MCs)
  • PLS8005 - Elevating Interpersonal Communication (1 MC)
  • ALS1010 - Learning to Learn Better (2 MCs, withdrawn)

This was the first semester where I didn’t take on an internship for a couple of reasons.

Firstly, the workload from CS2030S and CS2100 was insanely high, demanding an inordinate amount of time and effort. As much as I hated the modules then, I came away with a few pivotal takeaways. CS2030S forced us to use Vim during our practical exams (i.e PE1, PE2). Because of this, I consciously made the extra effort to learn it properly. I’m grateful for that now since I’m now able to use Vim rather effectively in navigating a terminal interface without a GUI. CS2100 offered me a deeper appreciation of the internals of the computer and illustrated how amazingly complex computers are. More importantly, it gave me a sense of direction. I discovered I enjoyed diving deep beyond traditional levels of abstravtion to how thigns really work under the hood. This eventually the shaped what I wanted to specialise in as a software engineer.

Secondly, this was also the period where recruiting for big comapnies kicked off. Instead of being distracted by an internship on the side, I wanted to dedicate proper time to interview preparation. It was nonetheless one of the busiest stretches of ,my university life. At one point, I was doing nine interviews in a single week.

This application season was particularly stressful for me. It represented my first time applying and intervewing so aggressively. As a Y2 student, I was competing against Y3s and Y4s who possessed deeper knowledge and acquired more extensive experience. When it comes to interview preparation, I lacked a clear direction. I was switching between solving LeetCode dailies, reading system design articles on the way back and doing mock interviews with friends whenever I had the bandiwdth.

There’s one person in particular I had to thank (which I’ll not name but he’s currently a full-timer at Palantir). I first encountered him through TIPS (Technical Interview Prepersation Summer, a summer programme dedicated to helping NUS computing graduates sharpen their technical inteviewing skill. During a panel presentation, I thought he was remarkably eloquent. Never one to overthink things, I decided to randomly reached out to ask if he’d be down to conduct mock interviews together. By a stroke of luck, he agreed!

That first mock interview was a wake-up call for me. It was a particularly transformative experience for me as he showed me what the bar actually looked like. He had a clear structure – 1) first breaking down assumptions, 2) next asking sharp clarifying questions that made myself consider edge cases I haven’t previously considered before before finally 3) outlining the high-level structure of his intended approach even before typing a single line of code. He then coded with a fluency that made it look effortless. There wasn’t any sense of hesitation as if the solution was already in his head. Out of his own volition, he even came up with test and edge cases all in the span of 40 minutes. I was blown away. It was then when I also realized what the technical bar for passing these interviews actually looked like (which also made me painfully realize why I haven’t been clearing them). I inherited his approach of problem-solving and started applying it religiously to every interview from that point on.

Nonetheless, this period still represented the period I was closest to depression. I lost sleep waiting for responses from hiring managers. I’d dream about rejections / acceptances, sometimes even waking up at 4am drenched in sweat. I was so desperate to land a “more coveted” internship for the coming summer. As a result, I ended putting a lot of uneccessary pressure on myself.

But eventually, after months of relentless interevewing, I received an offer from both The Trade Desk (TTD) and Apple. I was thrilled to receive both. In particular, I’ve heard really good things about TTD from a senior whom I have deep resepect for so I was genuinely excited for what’s to come next!

The biggest takeway from this season though wasn’t simply about interviews. It was me learning to trust that things will always work out in the end. As a Christian, it dawned on me that I should be leaning on God more as opposed to relying purely on my worldly efforts because after all, some things are simply beyond our control.

After accepting the offers, I could finally divert my full attention back to academics. I was so consumed by interview preparation that I’ve fallen about half a semester behind on lectures and tutorials. But with recruiting finally done, I buried myself in catching up. While it fell just short od Dean’s List (which permits at most one A-) , this turned out to my best semester academcially yet! I’ve received two A- with the rest being As. Ny cumulative GPA climbed to around 4.7ish, which gave me sufficient buffer to take on riskier semesters without being sweating over every graded module.

Looking back, the semester was a semester shrouded in extremes. The lows were among the lowest I’ve experienced, but the highs that followed made them worth enduring :-)