- What makes a great...
- Good Programmer
- Good Communicator
- Culture Fit
- Example Company Checklist
- How can I become better?
- Building Your Case
This is a part of a series of guides called Zero to Offer aimed to help you navigate the internship process. We recommend you start here!
Pretend there is an amazing tech company called “WaterBnb”. Everyone wants to work at WaterBnb. They have brilliant people, amazing food, good values, pay a lot, and have a powerful mission that you agree with. WaterBnb is growing their business and in order to do that, they need great software engineers (like you)! They have decided that creating an internship program and hiring college new grads is the most surefire way to secure emerging tech talent!
How can WaterBnb recruit the top software engineers out of college, at scale? How can they make a fair process that allows them to quickly filter through thousands and thousands applicants? The best way is to have an online application process. Send recruiters and engineers to top college’s career fairs for marketing. Review resumes and then put “qualified” candidates through a series of interviews. Companies will differ in what exactly they look for in these interviews, but ultimately, all companies want great software engineers. WaterBnb has limited headcount, so they can only hire the most qualified candidates that add to their talent pool.
You are looking for an internship, and you would really love to work at WaterBnb. But, you would also be more than happy to work at FireBnb, EarthBnb, AirBnb, and plenty of other companies. Luckily for you, all of these companies are looking for great software engineers for their company and you learned in the application process section that it is in your best interest to apply everywhere. So the best thing that you can do to improve your chances at getting hired is to become a great software engineer!
Have you met Candice? Candice is the ideal software engineer job candidate. She is among the top 1% of all people in the world at coding, testing, debugging, citizenship, learning, building products, assessing risks, communicating ideas, resolving conflicts, talking to clients, innovating, managing others, writing design docs, team building, reducing technical debt, backend code, frontend code, competitive programming, and more. Candice does not exist.
There is no “perfect” software engineer. There is a wide array of skills that software engineers need to have and different people will be more developed in some areas than others. Some people might be rockstar programmers, but be worse at writing design docs and communicating ideas. Others might be great at leading a team and inspiring others to work toward a common goal, but have lesser coding skills.
The point is the “greatest” software engineer is subjective. Take some time to reflect on your skillset, what you are good at, what you want to improve, what you need to improve, and what you don't need to to improve.
That being said, pretty much everyone can agree that good software engineers possess the following skills:
How companies test for it: Coding Interviews! Can you solve the technical problems? Do you write code and solve solutions? Are you comfortable with the language you are using? Can you communicate and explain your solution effectively?
Being able to effectively communicate ideas and values to other team members and people in general is vital for any job. In the world of software engineering, communication is the driving force behind all development.
How companies test for it: Phone Interviews! Can you explain your thought process to your interviewer? Are you able to articulate coherent answers to questions? Can you ask and answer questions?
Culture is hard to define and going to be different per company.
For example, AirBnb is a tech company that revolves around hosting people around the world for travel. In their interviews, they have a “culture fit” interview where they start for six core values. One example is “if you are a host”. (Reference watch from minute 47:00 - 49:00).
Companies want to hire employees that are passionate for the company and will fit into their values. This is subjective and hard for you to optimize for and it is also hard to interview for. However, it is worth it to do your research before an onsite interview with a company and learn more about them. What are their values? Do you align with those values? What makes their product and mission interesting to you? You can probably get an offer without focusing on the “company values” and showing you are a culture fit. However, if you do your research, learn about their values and culture and demonstrate you are a good fit then that is extra points for you.
How companies test for it: Behavioral Interviews! Would your interviewer want to work with you? Do you possess similar core values as the company?
Here is an example checklist WaterBnb might use when evaluating you. It is not expected you will meet all the criteria, but in general the more you have done, the better your chances.
- Can you speak coherently about a personal project or past work experience.
- Can you explain a genuine reason you want to work at WaterBnb.
- Have you contributed to open source personal projects? How impressive are the projects?
- Are you majoring in a Computer-Science related field and do you have a good GPA?
- Have you taken challenging courses?
- Have you been a TA or leader of an organization at school. How are you involved?
- Have you worked somewhere else before? (Bonus points if it is in a field related to WaterBnb)
“Have a 4.0, do 1000 Leetcode problems, apply to every place” might be what you think you need to do to get a job. And there is some truth to it. But, let’s work backwards based on what was stated above.
Companies want great software engineers, and great software engineers are good programmers, good communicators, and good culture fits.
Here is a list of things you can do to improve these fundamental skills.
Personal Projects - Creating a project means solving a problem and practicing programming. It shows drive, creativity, passion, and it is a good way to improve your skills.
- Club / Open Source Projects - All of the benefits of personal projects plus you communicate and work with others!
- Leading a hackathon shows you are passionate about something. Companies like passionate people!
- Leading a hackathon involves a ton of communication! - Learn about hackathons here
Organize and Lead Clubs
- Leading a club shows you can organize people and communicate well.
- Usually, if people elected you to lead a club it meant that they liked you. And if those people liked you, your future teammates probably would too.
Become a Teaching Assistant
- To qualify to be a teaching assistant, you need to have good grades. To be a good teaching assistant, you need to be great at communicating hard technical concepts.
- Learn how to become TA here
Compete in Hackathons
- Shows passion for programming and ability to work with others under a strict deadline!
- Shows willingness to dedicate free time to programming
- Research involves communicating with others and solving hard problems
- Learn more about research here!
Get a Good GPA
- To get a good GPA you need to effectively learn the material in your courses. To get good grades in your CS courses, you have to do your course projects, which makes you a better programmer!
You obviously do not need to do all of these things. Pick what is important and interesting to you, and go for it. When you do these things, your resume will build itself. By focusing on becoming a better software engineer instead of merely focusing on your resume, you learn what things are important to you and you finish things that matter to you.
Unfortunately, the things listed above are not things you can accomplish overnight. Like all hard work, completing these takes months on months of persistence. You can do everything listed above, and it does not guarantee you anything. However, be persistent, and success will follow.
To be honest, you can do none of these things and still land a great internship. You could have a 2.5 GPA and never have done a side project and with a little bit of luck you can still get a good job. HOWEVER, you want to maximize your probability of landing the internship you want. More importantly, doing the things above will make you a better candidate, and, ultimately a better software engineer.
Here is a list of things others have done which are great examples.
- Give a talk at a Python conference
- Creating a weather bot as a personal project
- Go to a company sponsored hackathon and win
You know what it takes to be a great software engineer. But, in the short term, you need to apply now!
Your resume is very important here. And the best way to have a good resume is to be a good software engineer. However, in the short term, you likely have some skills already that you can display now. Read here on how to create a great resume.
What you need
- Create a great resume
- Create a solid LinkedIn profile
- Create a personal website (Time Permitting) (Read here on why and how to do that)
What you do
- Apply online everywhere. (See a list here)
- Apply on Handshake, LinkedIn, Jumpstart
- Go to networking events (Career Fairs, CS Club Events)
- Go to company-specific events (Like JPMorgan Code for Good, Capital One Summit, Jane Street SEE, Google Games, etc.)
It is easy for companies to distinguish genuine passion versus “resume-building." The biggest takeaway here is that becoming a great software engineer is the easiest way to be hired as a software engineer. If you want to work at a top company, doing the bare minimum is not going to cut it. Trust the process! This is not going to happen overnight but it will be very, very rewarding.
In the meantime, make a plan how you are going to improve your skills and what specific things you are passionate about and you will work on. Then, build your case as specified above and apply!
Next: Acing your Interviews