On the job hunt
After surviving 4 years of applying to jobs as an undergraduate EECS major at UC Berkeley interested in software engineering, I thought it would be fun to do an overview of my process and what I have to show for it.
What I applied for
Depending on which year I was in, I applied to different positions, but I always applied for software engineering roles. In my first year, I applied primarily to first-year-specific programs and some software engineering internships. In my second year, I applied primarily to software engineering internships and some second-year-specific programs. In my third year, I applied only to software engineering internships. In my fourth year, I applied only to new grad software engineer roles.
In comparison to many posts I see online, I feel that I had a pretty good application-to-interview ratio. I’ve heard of many folks applying to over a hundred places and still not hearing back, which is quite unfortunate :( I will also note that it is pretty uncommon for companies to recruit non-3rd years for internships, so a lot of rejection can just come down to what year in university you’re in at the moment.
Where I found opportunities
I primarily used that one GitHub repository of software engineering internships/new grad positions, LinkedIn, UC Berkeley’s EECS/CS undergraduate careers emailing list (internal to Berkeley), Handshake, Untapped, and Ripplematch. A link of all job posting websites I’ve found over the years can be found here.
If anyone I knew was offering referrals, I also asked them to refer me. This was a big advantage of being part of a lot of UC Berkeley CS clubs and being on course staff. Another advantage was that certain clubs (like the Association of Women in EECS (AWE), Society of Women Engineers (SWE), and Eta Kappa Nu (HKN)) had resume books that they sell to companies. Members can submit their resumes to be considered for employment. Additionally, many large clubs will have an #advice or #career Slack channel where you can ask for professional development advice. They also sometimes have professional development services like resume reviews or mentorship.
I also took advantage of recruiting events whenever companies I was interested in working at came to UC Berkeley. This was useful to learn more about the company and its culture, meet and talk to engineers and recruiters, and get unique links to apply / get on their radar. I rarely attended career fairs because they were usually overcrowded and not really worth my time. I “attended” Grace Hopper once when it was virtual due to COVID, but I did not go to many events and didn’t aggressively recruit there. However, I still am on a lot of recruitment mailing lists due to submitting my resume to their database.
When to apply
Ideally, you should begin applying in early August, although I have noticed that every year the recruiting season seems to shift earlier and earlier, especially for companies that are very popular or hard to get into. However, even if you “miss” the start of the recruiting season, the next best time to apply is now.
Typically, I have wrapped up the hiring process by the time the fall semester is over. Jobs are harder to come by if you start looking in the spring semester, but it is not impossible to get an internship in that period of time – just much harder.
How I prepared
Here are all of the recruiting resources I’ve found over time.
Applications
- Update your resume. I personally use a LaTeX template I found on Overleaf since it looks crisp and professional and is easy to electronically parse.
- Keep track of your application statuses. I use Notion databases to do this. I record the company, position, link to the role, copy and paste the role description (because sometimes it gets taken down later), and any other notes I think are important such as who referred me, when I applied, when my next deadline is, etc.
OAs
- Familiarize yourself with the OA platform. Common OA platforms include HackerRank and CodeSignal, which both have tutorial assessments so you can play around with the coding environment stress-free. They also provide practice problems, which can be useful for prep. I found this overview of OAs very useful in terms of strategizing for CodeSignal in particular.
- Save and/or run tests and/or submit (if you are allowed to change your answer after submitting) frequently. You should write your solution iteratively. Pseudocode is also helpful before writing out all the code. Test output and print statements can be especially helpful for debugging. Getting some of the test cases right is better than none of them right.
- The time crunch is what usually will get you. Stay calm.
- Make sure you have the right environment to take the OA. It should be quiet, have wifi, an outlet to charge your computer, water, tissues, etc. so you can do take the OA comfortably. If you can’t do it in your place of residence, booking a library room can be a good option.
- Leverage community for insights on what questions might be asked. Reddit (r/csMajors, r/cscareerquestions), cscareers.dev Discord, clubs, etc. are all great places to ask for advice and prior experiences with a particular company.
Interviews
I will go more in detail about technical vs. behavioral interview prep below, but regardless of interview type, there are some things you should always do to prepare:
- Know the interview format. If you don’t, email your recruiter to ask. Sometimes companies will also give you prep materials. If they do, read them!
- Make sure you have the right environment to do the interview in. The same environment criteria for OAs applies to interviews.
- Always come prepared with 3-5 questions for the interviewer. The more specific to the company the better, and the less “basic” the question the better. For example, instead of just asking, “What’s your favorite thing about company X?” you could ask “What’s your favorite thing about company X and the thing you think can be most improved?” This not only is more uncommon and thus less boring for the interviewer to answer, but also can alert you to any red flags about the company.
- Take notes about your interview experience. I usually had 3 rounds of note-taking: Before, during, and after the interview. Before the interview, you should have some bullet points about yourself (ideally you should memorize your introduction/elevator pitch but sometimes this can be helpful if nerves kick in), some notes on the company, and your prepared questions. During the interview, make note of your interviewer’s name and their responses to your questions. After the interview, reflect on the questions they asked you and how you did in the interview. What could you have done better? What did you do well?
- Leverage community just like for OAs.
- Thank your interviewer and recruiter after each round and ask about next steps after your interview ends.
Technical
- Use the REACTO method to structure your interview: Repeat the question, Write out Examples, describe your Approaches, write your Code, Test your code, Optimize.
- An often overlooked skill in technical interviewing is the ability to communicate your thought process. Writing the code to solve the problem is only half the battle.
- Instead of spamming every Leetcode question in existence, prioritize questions that are most relevant. If you are not actively interviewing, I recommend Neetcode’s Roadmap since the questions are sorted by topic and have detailed solutions and explanation videos. Another popular list is the Grind 75 or Blind 75. If you are actively interviewing, you should focus on Leetcode problems that are tagged with that specific company.
- Watch videos to review data structures and algorithms (DSA) concepts and system design concepts. For DSA, I recommend Michael Sambol’s YouTube channel and for system design I recommend this guide and the ByteByteGo YouTube channel.
Behavioral
- Research the company. You should know their products, mission, values, and culture. It can also help to read their engineering blog posts, if they have any.
- Make a list of what you like and what you’re interested in working on there. Be specific.
- Use the STAR method to answer questions. Be confident, friendly, show that you’re a leader and a good person to work with, and tie back your experiences to how that makes you a great fit for the company. Concrete examples are key. But don’t overdo it!
Recruiting experiences
Most companies had a process like this: Referral and/or application, online assessment (OA) (usually on HackerRank or CodeSignal), interview, onsite interview, and then offer decision. Most companies had more technical interviews than behavioral interviews, which makes sense for the profession. Most technical interviews I did were similar in nature, with the first 5 minutes being introductions, 45 minutes of coding (usually 1-2 Leetcode Medium type problems), and 5 minutes of Q&A with the interviewer. I only ever did 1 system design interview during my new grad recruiting cycle, but from what I can tell online those types of interviews become more common for full-time and senior roles.
Some companies have quirkier or more unconventional recruitment processes. For example, Roblox always sends OAs that have to be done on the Roblox platform, which required making an account, downloading the Roblox app, and spending several hours playing mini games (that weren’t directly related to programming) or answering MCQ behavioral questions about your work style. For other companies, I had to take “personality quiz” type online assessments or do asynchronous video interviews on HireVue.
The company I recruited for who had the most pleasant, fast, and relevant-to-the-job interview experience was Stripe, which consisted of an application, OA (which was more of a problem you might see day-to-day rather than a Leetcode algorithmic puzzle), and technical interviews (which tested coding fundamentals and more day-to-day problems). For full time roles, Stripe also has a debugging round, but since I interviewed for the internship position I did not have to do this.
How I did
Because this is popular to showcase on r/csMajors (and I was curious what mine would look like), here are Sankey Diagrams I created for all 4 recruiting seasons I’ve experienced so far.
Caveats:
- I counted each position I applied to as a separate application, even if it was for a duplicate company
- This might not be 100% accurate because I tracked this information retroactively
- I counted recruiter calls and behavioral rounds as interviews
- I counted each interview in an onsite round as separate
Summer 2022 Internship Search
See also: How I got my first internship at Bloomberg
Summer 2023 Internship Search
Summer 2024 Internship Search
New Grad 2025 Internship Search
Key Takeaways
- You’ll never feel 100% ready and no one is ever 100% qualified for a job. Just apply.
- Time is of the essence. Never delay on applying or scheduling interviews. Headcount fills up quickly.
- People are generally more willing to give you a referral or recruiting advice than you’d think. Just ask nicely and respectfully (without being entitled).
- A big part of interviewing is just showing your enthusiasm for the role and the company. It can be hard when you’re tired of grinding out applications/OA/interviews all the time, but smiling, being nice and friendly, etc. go a long way in leaving a positive impression.
- Treat every OA and interview as practice. It helps with nerves and is true!
- Remember that interviews are also a way for you to get to know the company. What do you think of their hiring process? Were the people you interacted with respectful and kind? Does the culture seem like a good fit to you? Come prepared with questions that can help you decide whether or not you truly want to work there.
- Cheating on OAs and interviews seems to be commonplace and I suspect it has only gotten worse with the rise of LLMs. I don’t believe in this behavior and I have managed to get jobs while maintaining my integrity, and you can too.
- Take care of your mental and physical health while recruiting. It’s very easy to get stressed, feel imposter syndrome, feel hopeless, etc. when recruiting. Your health is most important and if you don’t get the exact job you wanted, it is not the end of the world. Everything is a learning opportunity and it only takes 1 company to say yes!
- Negotiation can be intimidating, but is worth practicing often and early (although most internship offers seem to be non-negotiable). The worst thing they can do is say no (reputable companies would not retract their offer if you attempt to negotiate). I’ve found these resources useful for navigating this.
- An added benefit to being a TA for CS/DS classes that is not often talked about is you get a lot of practice talking through your thought process and refreshing yourself on DSA fundamentals.