How to land an SWE internship or job (from NTU alumni sharing)
By: Mingyu Liu
Tags: Singapore, Interview, Software Development, Internships, Resume

Recently I was invited to give a talk to students from NTU School of Computer Science and Engineering, as part of the alumni sharing forum that the career coach Patrick was running. I thought the talk could benefit a greater audience than those who attended, so here’s the talk heavily transcribed from my memory.

Hi, I’m Mingyu and I was a Computer Science student at NTU between 2016 and 2020. I graduated in December last year, and I am currently a Software Engineer at Google. During my time at NTU, I did a number of internships at Shopee, Grab, and Google. In today’s sharing, I will be talking about my internship experience, my current job as a Software Engineer, and I will also share my tips on finding a software engineering internship or full-time job based on my personal experience.

My journey of internships

Shopee

My first ever internship was at Shopee, in the summer of 2018 when Shopee had not blown up to be the huge e-commerce company it is today. I was just starting my second year, and to be honest, I did not want to start looking for internships at all because I felt horribly underprepared, and my grades weren’t the best. But my roommate at that time, who was also in Year 2 CS, was actively applying for internships, and strongly encouraged me to do the same. So I was thinking, “why not?”, and sent my application to Shopee. And I was lucky enough to get an offer after two technical interviews, and one informal talk with VP. So the lesson here is, just apply, because you’ll never feel ready. And I’m now speaking from my experience — you’ll never feel ready, just apply.

The next semester, I went on exchange to a university in Canada, called the University of Waterloo. After that, I came back and started my internship at Shopee. I was working at the web front end team, and it was a very fulfilling experience. Before the internship, I never even wrote a line of JavaScript, which was essential for web development. By the end of the internship, I built the product rating and shop rating page for Shopee mobile web, and it’s still being used today. That gave me a huge sense of accomplishment! Apart from work, there were also some amazing perks, such as unlimited supplies of snacks, coffee, and tea. But that was pre-COVID, of course. We also had an intern offsite at Universal Studio. In the end, I received an offer to intern at Shopee again. But I eventually decided to complete my 6-month credit-bearing internship elsewhere because I wanted to try a different company.

Google

After finishing my internship at Shopee, I entered Year 3 and also started looking for my next summer internship. Because of my exchange experience in Waterloo where many students went to intern at Silicon Valley, I wanted to go further for my next internship, so I applied to a bunch of internship positions in the US, with a few in Singapore. However, I didn’t have much success in that. What I didn’t know was that many companies just couldn’t sponsor a job visa — but they won’t tell you directly, so I got either generic rejections, or simply ghosted. The lesson here is to apply to big tech companies if you want to intern in the US. But the good news is that, during that application cycle, I heard back from Google Singapore. After clearing interviews, I got the offer.

My internship at Google took place in the summer of 2019, and it was an amazing experience. I was in the Google Pay team, working on some developer tool, using TypeScript, NodeJS, and Web Components. The heavy emphasis on writing high-quality code and rigorous review process really pushed me to learn. Besides, there were amazing perks at Google. All the rumors you heard about working at Google are true. I was lucky to intern there before COVID happened, and there was free food, and even an on-site barista. Every Friday, there was a TGIF event with snacks, drinks, and sometimes performances. For our intern batch, we also had a yacht party. After the internship, I received an offer to intern at Google again, and subsequently received the full-time offer after another internship, and that’s how I got the job I have today.

Work as a Software Engineer (SWE)

I’m currently working full-time as a Software Engineer, and contrary to what I imagined back in school, writing code actually does not take up the overwhelming majority of time. I have been working from home since the start of my job, and my typical day usually consists of meetings, reviews, and producing work. I have a weekly meeting with my team, so we can update on who’s-doing-what, and clear any issues blocking our progress. Then I also have weekly meetings for the projects I’m working on, and this is usually cross-functional, with people such as UX Designers and Product Managers. I also have 1:1 meetings with my manager to check in, or the people that I work closely with to sync on progress. Next, there are reviews — code reviews and design reviews. Last but not least, I write code and design docs.

Now, I’m going to talk about how you can prepare to get a software engineering internship, or full-time job.

Get an SWE internship / full-time job

Resume

The first thing you need to do is to write a very solid resume. At some point, I realized that getting interviews can be even harder than passing interviews, especially with popular companies that receive a large number of applications every day. To stand out from a large pool of applicants, you need to remember that your resume is a marketing tool, and the goal is to impress recruiters, or potential hiring managers, so that they want to interview you. There have been rumors saying that recruiters only spend less than 10 seconds reading your resume (and it’s probably true), so you really want to catch their attention in the shortest time possible.

That means your resume needs to be short and concise — you should keep them within 1 page. You also want to put in keywords, especially those on job descriptions. For example, if the job description says they’re looking for someone with experience in Java, try to put Java on your resume. You also wanna include your relevant work experience, and your projects. Having projects is particularly important if you don’t have any relevant work experience. If you don’t have experience, your projects would be your experience. You want to describe your work in action-oriented bullet points, and emphasize the impact, rather than responsibilities. A template that I often like to use is “built X feature in Y language using Z framework / technology”.

I believe that a good resume usually has these 4 sections: education, skills, experience, and projects. The education section is where you put the degree you’re pursuing, and your anticipated graduation date. If you’ve taken some interesting classes, such as Distributed System, it’s also good to include them. For the skills section, I often like to break them into programming languages (such as Java, Python), frameworks (such as React, Flutter), and tools (such as Git, Docker). The experience section is where you put your experience relevant to programming, but I understand that not everyone has relevant work experience, especially those who’re looking for an internship for the first time. But experience doesn’t have to be work. For example, I volunteered in teaching kids Python, and I had that on my resume because it was relevant to programming. However, if you really can’t find any relevant experience, then make sure you have projects under your belt. In the project section, you can put projects you’ve done for school work, or your side projects.

Technical Interviews

A strong resume helps you get interviews. The next thing you want to do well is the technical interviews. Technical interviews are the most common type of interviews for SWE roles. It usually lasts 45 minutes to 1 hour, depending on the company. And it usually focuses purely on data structure and algorithms, with 1 or 2 questions asked during the interview. Technical interviews can be intimidating when you first try them, but there is actually a pattern for success. You need to be able to find the solution to a given problem, sometimes working towards an optimal one. Usually, you can choose any programming language, but make sure you choose a language that you’re really familiar with, so that you can use the common data structures and algorithms as your toolbox, and be able to implement them when you’re asked to. Last but not least, you need to be a good communicator by talking through your ideas and solutions, and making sure the interviewer understands you.

Although technical interviews can be intimidating, it’s really a skill that can be trained and improved over time like any other skill. To prepare for technical interviews, you want to revise common data structures and algorithms that you learned in school. Typically, you can choose any programming language, but make sure you are very comfortable with APIs of the language you choose. That means being extremely familiar with using and implementing common data structures and algorithms. For example, if you use Python, you need to know how to use a Heap in Python, and how to use or implement binary search. The best way to improve your technical interview skills is through practice, and there are many websites for that. LeetCode is a popular choice. In addition to practicing coding questions, you can also do some mock interviews to be familiar with the process, and practice communicating while writing code. In terms of time management, I would recommend spending 90% of the time on solving questions online, and 10% of the time on mock interviews. My opinion is that mock interviews familiarize you with the process, but being able to solve the question is a skill that takes more time to hone, and practicing questions is the best way to prepare for that.

I also have some tips for you during the technical interview. A common pitfall is to start writing code right after getting the question. Don’t do that. Instead, check your understanding with the interviewer first. Ask clarifying questions, such as edge cases. This can potentially save you a lot of time, in case you misunderstood the question, and also give the interviewer a good impression. Before writing code, it’s also a good idea to explain the solution you have in mind to the interviewer first. Sometimes, they may even tell you if your solution works. After finishing writing the code, test your code by walking through a few test cases. In a real job, you will be writing unit tests to cover your code. But in an interview, walking through some test cases verbally would be enough.

More resources

This Is What A GOOD Resume Should Look Like | CareerCup: https://careercup.com/resume

How to Craft a Winning Resume: https://www.glassdoor.com/blog/winning-resume/

Technical Interview Handbook: https://techinterviewhandbook.org/

Good luck!

Q&A

Q. How important is having a good GPA?

I believe that in terms of importance, work experience > projects >> GPA. It only matters a lot when you don’t have much project experience or work experience. But if you do, I don’t think you should worry about your GPA because work experience and projects are way more important.

Q. How do you focus on coursework while preparing for interviews?

I would say that they’re not always mutually exclusive. For example, you can devote your time to your course project, and that project can be a very nice addition to your resume. Other than that, my advice is to find the right balance between coursework and job search.

Q. How can I improve skills such as writing high-quality code?

You don’t need to worry about them before getting the job, as they’re often not part of the interview process. After you start working, you will have opportunities to write code and get reviews from others. Over time, your ability will be improved. But it’s not something that you should be worrying about before getting a job.

Q. Do you think companies will hire someone with little or no knowledge for a specific domain but is willing to learn?

Many companies hire generalist software engineers, and match you to a team after passing their technical interviews, so oftentimes, especially as an intern or fresh graduate, it’s okay to not have experience in a specific domain, and get hired. That being said, if you’re keen on getting into a specific team (say Android), you need to demonstrate your interest. I think one of the best ways is to have projects related to that technology.