Seven semesters ago, I started college with no programming background. The only thing I had was lofty aspirations of working in tech.

When recruiting season first rolled around, I applied to a bunch of companies. I got a few callbacks, but that’s it. No follow-ups. No onsite interviews. Nothing.

I kept trying. I applied to over 150 companies. I faced dozens of interviews.

I failed way more than I succeeded. But that’s all right. Because those failures made my moments of triumph all the more memorable.

Along the way, I met helpful mentors and guided ambitious mentees. These people are now working at places like Airbnb, Facebook, Google, SpaceX, and Snap.

As for me, I landed an internship at Uber last summer. And I’m on track to accept a full-time job at one of my favorite companies when I graduate.

Now that I’m in my final year of school, I want to share everything I’ve learned over the years. This isn’t meant to be the ultimate handbook. It’s only a modest guide born out of my love of helping others reach their goals (and my love of Legos).

By the end of this article, you’ll know everything I wish I had known when I first started sending in applications.

A few words before we begin…

Don’t let your struggle for the perfect job take over your life. School is a time of self-discovery and all-around personal growth. So go out there and meet people who are doing different things. Join diverse student organizations and take part in activities outside your comfort zone.

It’s all too easy to associate your self-worth with how prestigious of a job you can get. But remember: there are so many more important things in life than work.

My best memories of college aren’t spending weeks on end prepping for interviews or even getting offer phone calls. They’re exploring San Francisco for the first time with my closest friends. They’re playing volleyball with my hilarious teammates. I value these unique experiences I shared with people I love much more than any job.

To paraphrase my favorite quote by Twitter and Medium founder Ev Williams: “Failure of your [work] is not failure in life. Failure in your relationships is.” Don’t lose sight of what’s important.

It’s also no coincidence that everyone I know with a strong support system eventually found success. When you fall into a slump — and all of us do — you need your friends to be there for you. I would never have made it through my first year without amazing friends who kept me afloat.

Now, let’s get started. You pumped? I’m pumped!

Building fundamentals


Before we get to the good stuff, you need to build solid fundamentals. Seems obvious? Absolutely. But this is the hardest step of this guide, so listen up.

Now, this guide is designed for college students, so if you’re in high school, scram! Just kidding. In fact, I admire your initiative. When I was in high school, I didn’t have the faintest idea what I wanted to do.

Leading up to college, your top priority should be solidifying your math skills. Computer science relies heavily on mathematic concepts like probability, logic, and number theory. Without math, you’re not going to get far in hard weeder classes and technical interviews.

If you’re already proficient in math, keep reading. Most of this guide is just as applicable to you as it is to college students. Skip to the online classes section below and progress through the rest of this guide. Landing an internship as a high schooler is challenging, but certainly not impossible.

OK. Back to college students.

Building fundamentals starts with your intro programming classes. Pay attention and master the basics. A popular but misguided notion is “GPA doesn’t matter.” Although it’s true that most companies won’t scrutinize your GPA, any gaps in your fundamental knowledge will come back to bite you later. By getting a decent GPA, you’re also most likely getting a grasp of the basics.

Your classes will cover a lot of basic knowledge, but they’ll barely scratch the surface of modern technology. Go explore interesting topics around the core concepts taught in class. This is how you gain a breadth of knowledge and come up with future project ideas.

If you’re not studying computer science, don’t worry.

I have friends who changed their minds and started CS their Junior year. They still graduated on time with great job offers, so you’re not too late at all. This said, you will need to make sacrifices and take extra classes every semester.

If you’re not able to take CS classes in college, there are plenty of awesome online resources to help you out.

Two of the best online intro courses are Harvard CS50x on edX and CS101 on Udacity. After this intro, you need to master data structures and algorithms. I recommend Princeton Algorithms Part 1 and Part 2 on Coursera, or CS61B by UC Berkeley.

To make sure you’re on track, reference Google’s Technical Development Guide.

Don’t worry if you struggle at first.

A few weeks into my first semester, I was completely overwhelmed. I spent days studying concepts that took other students hours to grasp. I thought about giving up every week. “How am I ever going to catch up to those prodigies?”

But if you ask me or any of my friends who made it through, we’ll all tell you the same thing: Learning to program isn’t about how talented you are or how early you started coding. It’s about perseverance.

Building up your programming intuition takes a long time — much like learning a human language. You won’t see the light at the end of the tunnel for a long time. But trust me. If you take one step at a time, you will eventually get there.

Staying motivated is difficult, but there’s a secret.

Focus on mastery instead of results.

Make it your goal to get better at a skill rather than achieve a certain result. Dr. Heidi Grant Halvorson did a study where she asked two groups of people to solve various problems. The first group was told to score as high as they could. The second group was told to treat the problems as a learning opportunity.

The results were surprising. The first group got frustrated, whereas the second group persisted and solved more problems.​

By focusing on mastery, you view obstacles and time pressure as things that will help you grow. In contrast, a result-oriented mindset frames problems as irritating roadblocks impeding your way.

What’s more, you’ll see continual progress if you concentrate on mastery. Every time you read a new paragraph or solve a new question, you’re improving your skills. This kind of continuous gratification is incredibly satisfying.

So next time you’re studying for class or practicing for interviews, focus on getting better instead of acing the exam or landing the offer.

You can read more about this tactic in Edmond Lau’s Quora post.

Beyond basic coding skills, you need to know what’s happening in the tech industry.

This goes beyond sounding smart during recruiting. By paying attention to the industry, you’ll be the first to discover new opportunities to propel your career forward.​

For online reading, check out TechCrunch, Techmeme, Product Hunt, and Hacker News. If you’re a frequent Twitter user, follow tech news sources. On Medium and Quora, personalize your feeds to get insightful takes on the industry.

If you’re into email newsletters, look into Axios Pro Rata, CB Insights, and Mattermark Daily.

To do a deep dive on a particular company, use Crunchbase and the company’s blog. You can also learn about the company’s culture from Glassdoor.

Finally, don’t forget to actually talk to people. I learned so much about the tech world from casual conversations with friends and classmates.

Over time, you’ll read about a lot of interesting companies. Begin compiling a spreadsheet of companies you’re interested in from day 1. When you apply to these companies in the future, use this spreadsheet to track your progress.

Once you have the fundamentals down, it’s time to apply your skills. One of the best ways to do that is by…

Building projects


If you’re like me, you don’t have much experience to begin with, and that’s OK! The first step is populating that empty resume with projects.

When I first decided to work on a project, I had decision paralysis for days. “What should I make? What if it’s not original? What if people don’t like it?”

Later, I realized it doesn’t really matter what the project is. Learning something and finishing what you start is much more important. But this doesn’t mean you can make whatever you want. If your project is too trivial, you won’t impress any recruiters. If yourq project is too complex, you’ll lose momentum before completing it.

Aim to do a project you think you can complete in one to two months. The project should involve data structures, algorithms, and design decisions. And do something you’re interested in so you’ll actually take it all the way to completion.

Here’s a compilation of project ideas on Reddit for inspiration.

After coming up with an idea, take some time to plan, but don’t take too long. You want to start as soon as possible. Now, you might be wondering “Isn’t it irresponsible to jump in prematurely?”

Generally, yes. But personal projects are different from company projects. Personal projects should teach you something new and strengthen your background during recruiting. Unlike company projects, you don’t need to obsess over design and code quality.

If you’re feeling stuck at the beginning, write down some code — any code. Building a personal project is like writing, you just start. Don’t worry if it doesn’t make sense. Seeing code in an editor will get your juices flowing.

Track your project with version control. If you don’t know what that is, make a Github account and learn how to use Git. You need Github as it’s the primary way you save and display your projects.

If you can, make your project live so recruiters can play with it. Most recruiters won’t inspect your code, so a live demo is the best way to show off your project.

Aim to complete three to five projects by the time you start applying.

A terrific first project is a personal website.

You learn the basics of web development and get your own space on the internet to display your work.

Codecademy has two excellent tutorials on building websites:

  • Make a Website teaches you the basics of HTML, CSS, and Bootstrap.
  • Deploy a Website teaches you how to put your website on the internet. Step 3 of this tutorial isn’t necessary, just use the free domain.

Too easy? Convert your personal website into a dynamic blog. To do this, you need to learn a web development framework like Rails or Django. Check out the Ruby on Rails Tutorial or The Django Girls Guide.

The Muse and Awwwards have examples of personal websites if you need design inspiration. Also, you have to check out this wicked personal website.

Hackathons are great for motivating yourself to do projects.

Schools and organizations around the world host hackathons, which are project-building competitions lasting several days. In this short span of time, you’ll learn a lot, come up with unique ideas, and meet interesting people.

Many hackathons reimburse travel, so there’s no excuse not to go. Use Hackalist or Hackevents to discover upcoming ones.

Some of the top North American hackathons I know of are PennApps, HackMIT, HackNY, MHacks, HackTech, HackIllinois, CalHacks, TreeHacks, Hack the North, YC Hacks, and Greylock Techfair.

You can also contribute to open source projects.

Working on open source is an awesome way to add value to meaningful projects. Plus, you learn a lot from seeing code written by more experienced engineers.

Jumping into open source for the first time can be intimidating. Two good entry points are Google Summer of Code and Sayan Chowdhury’s article on open source for beginners. Github also just released their very own open source guide. Find a cool project and dive in. You’ll get the hang of it soon enough.

Research is an alternative to projects.

If your school has a student research program, great! Apply asap. If it doesn’t have one, look up what research your professors are doing. If their work seems interesting, email them and ask if you can contribute. You’d be surprised at how receptive they are to eager undergrads.

In the future, you can even ask your team to refer you to cutting-edge companies. Keep in mind research belongs under Experience rather than Projects on your resume.

It can be tough balancing projects and school.

One complaint I hear frequently is “I don’t have time to do side projects while taking classes.” I’m personally guilty of saying that from time to time.

It’s tough to set aside time for projects because, unlike school, you’re not held accountable by deadlines and exams. After a day of studying, it’s tempting to choose social media or video games over your project. But if you keep putting it off, the semester will be over before you know it.

To combat procrastination, force yourself to work on your project a little bit every day. Even if it’s just 15 minutes, you’ll form a habit of making continual progress.

This is also why hackathons and research projects are so great. They impose external deadlines and expectations so you can’t drag your heels.

Now that you have some experience, you need to put it somewhere.

Creating a resume


Writing a resume might seem pretty straightforward, but there are lots of nuances. After all, it’s the first thing recruiters will read about you. It’s crucial to make a good first impression.

…And you need to make that impression fast. Recruiters spend an average of six seconds reviewing a resume. You heard that right. Six seconds.

Almost all that time is spent on your name, companies, job titles, start/end dates, school, major, and project titles. Everything on your resume should be tailored towards helping recruiters find these key pieces of info as fast as possible.

Here are some important guidelines.

Easy to scan:

  • Stick to one page.
  • Keep it black and white if you’re not skilled at design. Colors are noisy.
  • Stick to a standard format (chronological, no weird fonts, 10.5 to 12 pt font size, 0.5 to 1 inch margins). Standard formats are more readable by resume-parsing programs and easier to skim by recruiters.
  • Keep it concise. Text walls discourage readers.

Highlight the key points:

  • Make your name big.
  • Highlight company names, job titles, start/end dates, school name, major, and project titles.
  • Important content should be higher up. For a student, the order of importance is usually Education > Experience > Projects > Skills.

Cut the fat:

  • Objective and Summary are unnecessary.
  • Descriptions should say something tangible. “Exceptional team player” doesn’t work. “Increased user conversion rates by 20%” does.
  • People without technical background will be reading your resume, so get rid of convoluted details.

Don’t neglect the details:

  • Include the higher of your cumulative GPA and your major GPA. If they’re both less than 3.0, leave it off.
  • Include links to a live demo or Github repo for each project.
  • Don’t include anything you wouldn’t be comfortable answering questions about. Most people make this mistake when listing their skills.

For more tips, read this.

After finishing your resume, have your peers review it. Ask them to be honest and harsh. My first draft was awful compared to my tenth draft.

Use online resume builders if you’re short on time.

Standard Resume and CakeResume are two outstanding tools that make it a breeze to generate a handsome resume.

If you don’t have a LinkedIn profile, create one.

LinkedIn enables recruiters to find you and helps you maintain your professional network. Plus, you need it for the cold-emailing recruiters later.

With a few projects under your belt and resume in hand, you’re ready to begin preparing for interviews.

Getting battle-ready for interviews


Interview problems can be separated into two buckets, behavioral questions and technical questions. You need to start practicing both at least two months before applying. Since recruiting season kicks off in August/September, summer break is a good time to begin.

Behavioral questions

The purpose of behavioral questions are to find out more about your background and if you actually did what you said on your resume. Don’t take the behavioral interview lightly. A poor performance can sink your chances of getting the offer.

To ace behavioral questions, you need a strong answer to “Tell me about yourself” and three stories to handle all other questions.

“Tell me about yourself” is the most common behavioral question you’ll get and you need to crush it.

Don’t make the cardinal mistake of regurgitating your resume. Instead, tell a story.

Capture the attention of the interviewer with a strong introduction. Then, transition into a commentary about your key projects and experiences. Don’t prattle on about the details — keep it simple and emphasize the outcomes. Finally, explain why you’re interested in the position.

It’s tempting to talk about every single thing you did, but you’ll lose your interviewer. Keep it concise. Your answer should be one to two minutes long.

Prepare three stories you can tell in response to all other behavioral questions.

Typically, you’ll be asked to give examples of leadership, overcoming a challenge, or failure. Each of your three stories should show at least one of these themes.

A story needs an initial summary, a problem, three to five action steps, and a final outcome. Here’s an example.

Summary: Lead an unmotivated team to complete CS project
Problem: Two team members didn’t do their work and wanted to drop CS
Action 1: Talked to them one-on-one to understand why they’re studying CS Action 2: Told them although it’s tough now, they can succeed if they work hard
Action 3: Emphasized that they’re invaluable to the rest of the team
Action 4: Used google calendar to plan meetings and Trello to track progress
Action 5: Held social events to bring the team closer
Outcome: Finished the project and all got at least A-

This story can be used to answer any question about leadership or overcoming a challenge. Now go think of your own!

Not all your stories have to be about tech. For example, I always talk about how I helped my volleyball team overcome defeat.

With this, you should be able to pass any behavioral interview. To learn more, read the Behavioral Questions section in Cracking the Coding Interview.

Technical questions

Technical questions are the essence of the tech interviewing process. Here’s a list of topics you need to know to pass technical interviews. To master these topics, use the following four resources:

  1. Cracking the Coding Interview (~2 months before applying)
  2. LeetCode (~1 month before applying)
  3. Mock interviews (~2 weeks before applying)
  4. Glassdoor (~2 days before interviewing)

Cracking the Coding Interview is one of the best resources out there.

Gayle Laakmann McDowell’s Cracking the Coding Interview is the quintessential tech recruiting manual. First, read the Technical Questions section. Take notes to help you remember the main ideas.

As for practice questions, concentrate on the Arrays and Strings, Linked Lists, Stacks and Queues, Trees and Graphs, Objected-Oriented Design, Recursion, and Sorting sections.

Also, familiarize yourself with the Bit Manipulation, Scalability, Databases, and Threads and Locks sections.

If you’re having trouble with any of the topics, study the first couple pages of that section. They contain a short and sweet explanation of the topic.

Attempt each question for at least 30 minutes before looking at the solution. After reading the solution, you should still implement it and test it on your own. Otherwise, you won’t fully understand the logic.

Finishing CtCI should take three to four weeks of dedicated effort.

LeetCode is the second resource you should tackle.

It has a huge list of problems ranked by difficulty. Each problem has its own tests, time complexity requirements, and solutions.

Aim to complete 30 to 50 questions and be comfortable with medium level questions before you start applying. If you do just three a day, you can finish 42 in two weeks.

It’s easy to get frustrated by Leetcode at first. In the beginning, I couldn’t solve a single easy problem. I improved over time, but I still get stuck frequently on medium and hard level problems. The good thing is interviews are different from Leetcode. In an interview, you get hints if you’re stuck. Plus, deducing the correct logic is more important than writing runnable code.

Although Leetcode isn’t the best simulation of real interviews, it’s phenomenal for building problem solving intuition.

Mock interviews are highly effective if you do them right.

The trick is emulating a real interview as closely as possible.

If you’re the interviewee, be professional, ask questions, and talk out loud. If you’re the interviewer, time the interview, engage in the conversation, and write down feedback.

I suggest booking a private room on campus and grinding through back-to-back interviews. Make sure the room has a big whiteboard to draw on.

Take turns interviewing and being interviewed by a friend who’s also recruiting. Being able to understand the interviewer’s perspective will improve your own interviewing skills.

Glassdoor is an invaluable resource for company-specific info.

In most cases, you don’t need Glassdoor until a few days before your interview. Unless the company is very large, Glassdoor won’t have many specific interview questions.

Glassdoor is better for learning about the company’s general interview process. Navigate to the Interviews section and filter by the position you’re applying for. Sometimes there are different labels for the same job, so look through all of them.

Read candidates’ experiences and think through the interview questions they posted. You likely won’t get the same questions, but working through them will give you an idea of what to expect.

Making your application stand out


It’s finally time to send out applications and start seeing your hard work pay off! Recruiting season begins in August/September, but you can reach out a month or two earlier. For off-season jobs, apply at least 6 months before.

First, you need a list of companies to apply to.

If you’ve been following the tech industry, you should already have some companies in mind.

To add to your list, check out The Breakout List, Wealthfront’s Career-Launching Companies List, and the CrunchBase Unicorn Leaderboard.

For more ideas, here’s a list of 163 companies I looked at when I was recruiting.

Don’t be picky about which companies to apply to. If you think the product is interesting or you’ve heard good things about the company, then apply. Worry about choosing after you get a few offers.

The application process

I recommend first applying and interviewing for companies you’re less interested in. This is a good way to train for future interviews of companies you want more. But don’t do too many — you don’t want to burn out.

When I recruit, I try to keep the process under 3 months and not do more than 10 onsite interviews. Anything more than that, I run out of steam and my performance suffers.

When you’re scheduling your interviews, spread them out. Interviews are mentally draining, so you need time to rest in between. Companies won’t mind if you ask for a week or two before starting their process.

Once you’re ready to apply, use a 5-pronged approach:

  1. Referrals
  2. Emailing recruiters
  3. Career fairs
  4. Online applications

This list is ordered by success rate and time commitment. For example, referrals have the highest success rate but require the most time.

Referrals are the single best way to land interviews.

When an employee refers someone, that’s the golden endorsement. Referrals make up for less than 10% of applications, but 20-50% of eventual hires.

Ask your friends or older students to refer you. You can also ask employees for a phone chat or coffee to learn more about the company and request a referral at the end. Don’t be shy about this. If you get hired, the employee who referred you gets a bonus — it’s win-win for both of you.

Cold-emailing recruiters is the next best thing to referrals.

For smaller companies without a formal recruiting pipeline, reach out to an Engineering Manager instead. For even smaller companies, just email the CEO or CTO.

The easiest way to get email addresses is asking your network for recruiter contacts.

You need a LinkedIn account to find email addresses. Look up the companies you want to apply to on LinkedIn and filter their employees by recruiters. Next, install Hunter or Slik, which lets you get the email address from a LinkedIn profile.

Hunter doesn’t like it if you try to sign up using a personal email, so use your school email.

Your emails should be concise. State your interest in a position and include a summary of your background. Remember to attach your resume. To save time, make a template. You just have to change the name of the recruiter, the name of the company, and your statement of interest.

If you don’t get a reply in a week, follow up. If you don’t get a reply in another week, follow up again.

Career fairs get you face time with recruiters and engineers.

For career fairs, check which companies are attending beforehand. Jot down the ones you’re most interested in because you might not have time to talk to all of them. Print out 10 to 20 copies of your resume to pass to recruiters. Be ready to answer questions about your experiences and projects.

I recommend going early — miss class if you have to. You’ll avoid the lines and catch recruiters before they’re exhausted from chatting nonstop.

Don’t feel pressured to ask recruiters questions if you don’t have any. You won’t offend anyone if you get straight to the point and ask if they have openings.

After your conversation, make sure to get their emails so you can follow up later. Oh yeah, and actually follow up! Don’t let those business cards gather dust with the free t-shirts and drawstring bags.

For hackathons, you’ll be targeting one company you really like instead of 10 to 20. Company sponsors will set up shop at the venue. This is your in.

Before the hackathon, find the sponsoring company you want to target. When you arrive, introduce yourself to its engineers and recruiters. Use their API in your project and interact with them throughout the hackathon.

On the last day, go show them your project. Then, ask about job/internship opportunities. At this point, they’ve already seen your work ethic, creativity, and interest in their company. You’re pretty much guaranteed an interview.

Hackathons can function as indirect career fairs also. I know people who’ve landed interviews through talking to engineers and recruiters from sponsoring companies at hackathons. For more advice on this strategy, read Ryan Norton’s article.

Online applications are the easiest way to apply.

Use a shotgun approach. Most applications only ask for your resume, so it’s easy to apply to a lot of companies in one go.

Slide into Tech, the Easy Application List, Intern Supply, and your school’s career website are great resources for finding open positions.

Most of the time, you don’t need a cover letter. But if the company makes the cover letter mandatory or asks for a short answer response, be careful. In this case, the company really cares about fit, so craft a meticulous response.

I’ve been burned many times by disregarding mandatory cover letters and short answers. Take your time when writing — a hurried response will show.

For applying online, I also recommend TripleByte. You first complete a coding quiz. Then, TripleByte matches you with top companies and fast-tracks you through their hiring processes. Bear in mind this resource only works for finding full-time jobs.

Conquering the interview


For many people, this is the most nerve-wracking part of the process, but there’s no need to be anxious. The interviewer is on your side (even if it doesn’t seem like it).

Before we go any further, there’s one thing you have to keep in mind.

Show enthusiasm!

Enthusiasm plays a huge role in whether you get an offer. Companies these days love to talk about how much they value culture fit. What they basically mean is they want someone who’s enthusiastic about their mission and product.

The truth is most candidates aren’t good at being enthusiastic. The best way to ensure you do it is preparing a list of things you like about the company in advance. When answering behavioral questions or asking questions, bring up the items on your list. Use the company’s blog and its Crunchbase profile to find things you can talk about.

Now, let’s go over some best practices for technical interviews.

When you first hear the problem, write it down. Then, clarify with your interviewer what you think the question is asking. Don’t assume you understood the question the first time you heard it.

Next, write down a few example inputs and outputs and verify they’re correct. This gives you time to think of a solution and provides tests you can run later.

If you need more time to think, don’t be afraid ask for a minute to brainstorm. It shouldn’t be too hard to devise a brute-force solution. Talk through it with your interviewer while thinking of ways you can improve it.

Continue bouncing ideas off your interviewer until you come up with a better solution. Explain it to your interviewer and only start coding after they’re satisfied.

While you’re working through the problem, continuously communicate your thought process. How you think is more important than the actual answer. Be outspoken, but don’t blab on endlessly. Take pauses to think and let the interviewer make suggestions.

Don’t space out or look distant. You should direct your full attention towards the interviewer to engage them. If they’re engaged, they’ll give you positive signals if you’re on track and hints if you’re not. What’s more, they’ll be emotionally invested in you and want you to succeed.

At the end of the interview, you’ll get time to ask questions. Remember an interview is two-way. Don’t just ask questions you think the interviewer will like to hear. Ask questions you actually want to know the answers to. I suggest asking about personal experiences to get more authentic answers.

Remember these tips and you’ll be ready to ace technical interviews.

The average interview process looks like this:

Coding challenge > Recruiter chat > Phone interview > Onsite interview

The process varies by company. Sometimes the recruiter chat will be first. Sometimes you won’t have a coding challenge. But the general structure is similar.

The coding challenge is a straightforward test.

It’s usually hosted on Hackerrank. I suggest doing a couple of questions on it ahead of time to get familiar with the format.

There’s no trick to the coding challenge. Pass as many tests as you can. With enough practice on Leetcode, this should be a walk in the park.

The recruiter chat is an informal conversation.

It’s usually for setting up the phone interview and answering any questions you have. You might get one or two behavioral questions. Once in a while, you might get trivia-esque technical questions like “Explain how a hashmap works.”

Candidates rarely get rejected at this stage (although I’ve managed to do just that a few times). Treat this as a chance to learn more about the company. Ask high-level questions — recruiters generally don’t know technical details.

Make sure to ask about the format of the rest of the interview process so you aren’t caught off guard by anything.

The phone interview stage is one to two rounds of technical interviews.

Sometimes you’ll do a video chat instead of a phone call. You’ll typically code out the answer in a shared editor like Collabedit.

If the connection is bad or you’re having trouble understanding the interviewer, speak up. You’re not going to get docked points, so don’t try to tough it through.

The onsite interview is three to six rounds of interviews with a lunch in between.

A day of back-to-back interviews is exhausting — get enough sleep beforehand! Onsite interviews are mostly technical, but some companies mix in behavioral and design rounds. The lunch is for you to learn more about the company, so relax a little.

During the interview, use the whiteboard to your advantage. Leave plenty of space on the right side and between the lines so you have room to make edits.

After the interview, don’t dwell on it. Thinking about it isn’t going to change the final result. Treat it as if you were rejected and continue applying and practicing.

Evaluating the offer


Congratulations! You got an offer! Give yourself a big pat on the back — you earned it.

But your work isn’t done yet. First, thank your recruiter and re-express your enthusiasm for the company. Then, ask for your offer in writing.

It’s time to negotiate.

A job offer isn’t an act of generosity — it’s a proposal to strike a deal. Naturally, a deal involves negotiation.

I’m not going to elaborate too much on negotiation tactics. Just read Haseeb Qureshi’s killer guide on negotiation.

Bear in mind some offers are non-negotiable, but it never hurts to try.

Avoid unpaid jobs. In 90% of cases, it’s not worth it. I’m all for prioritizing learning over pay, but at least work for a company that values you enough to pay you.

If you have more than one offer, congrats! You’re awesome. But now you have to make a decision.

Choosing which offer to accept is a nice problem to have. The best offer depends on the specific candidate, but here’s one universal suggestion I hope serves you well.

Make a list of 10 professional and personal goals you want to achieve in the next 10 years.

It could be anything, like paying off student loans, founding a startup, or mastering a new hobby. Choose the job that brings you closest to these goals.

Here are a couple more tips to remember:

  • Your future manager is vital to your career growth. Find a great mentor who will double as your champion.
  • Do internships at different companies to gain broader experiences. You’ll learn more and expand professional network.
  • Optimize for learning and growth over pay, unless the pay is really bad.
  • Work at one brand name company. It’ll make recruiting in the future easier, but know that it’s not the end of the world if you don’t have one.
  • Choice of programming language doesn’t matter. What matters is learning good engineering practices and how to work in a team.
  • Choose an engineering-first company with a software/hardware product.
  • Don’t forget about passion. It’s an amazing feeling building a product you believe in.


This brings us to the end of this guide. I hope that with this, you’ll be much better prepared than I was when starting a career in tech.

In the beginning, getting an offer might seem impossible, but the key is treating it as a series of milestones rather than one enormous task. If you make a little bit of progress every day, you’ll be there before you know it!

When you do get that dream job, don’t forget to give back. Share your experiences and extend referrals. Pass on the love, and we’ll all fly higher.


Thanks to Victoria Sun, Sophie He, Ritika Pai, and Calvin Lui for editing.