(estimated reading time: 8-10 min)
Table of Contents
- Overview
- My Background
- My Job Hunt Journey
- Making a Decision: My Criteria
- Essential Resources
- Key Takeaways
Overview
The 2024 hiring season has been notoriously challenging for computer science students seeking new grad software engineering roles. A quick scroll through the r/csMajors subreddit reveals countless stories of students, even those with multiple internships, struggling to land positions. Given this tough landscape, I feel incredibly fortunate to have received three job offers. I wanted to share my experience and the resources that helped me during my job hunt, hoping it can offer some guidance to others navigating this difficult job market.
My Background
To give you some context, I'm a senior at the University of Houston studying computer science, and I'll be graduating in May 2024. Over the course of my undergraduate career, I've completed three software engineering internships: Amazon Web Services, Optum, and Buzly (my first internship!). On campus, I've served as a teaching assistant for database systems and an intro to CS course, and I was actively involved in several computer science organizations. Before I began my new grad job hunt, I had done around 10 technical interviews and solved approximately 170 LeetCode problems.
My Job Hunt Journey
My primary goal was to land a SWE job at a big tech company, so I almost exclusively focused on applying to those roles.
Timeline
Here's a visual timeline of my job hunt:
Preparation: The Pillars of My Success
Resume: Your First Impression
Before I even thought about applying, I made sure my resume was polished and ready. Resumes are your first impression on recruiters and hiring managers, so it's crucial to have a well-structured and concise document that highlights your skills and experiences. I can speak about resumes for hours (which you can hear about if you check out /services), but to keep it brief, here are some key tips:
- Keep it concise: New grad resumes should be one page long, with each bullet point being a single line. This forces you to be concise and focus on the most impactful information.
- Describe in a way outsiders can understand: Remember that recuiters (and probably AI) will be reading your resume, so avoid jargon and acronyms that may not be familiar to them. Instead, focus on the impact of your work and the skills you utilized.
- Use action verbs: Start each bullet point with a strong action verb to convey your contributions effectively. Use Harvard's action verb list as a reference.
- Use XYZ format: Structure your bullet points in the ""Accomplished [X] as measured by [Y], by doing [Z]"" format. This helps you clearly articulate your achievements and the impact of your work. For example, "Developed a real-time data processing pipeline that reduced latency by 30%."
Job Applications: Staying Organized
I officially kicked off my new grad job hunt in July 2023 during my internship at Amazon Web Services. I vividly remember applying to my first role on July 4th, 2023. Starting early was a strategic move; it gave me ample time to prepare for interviews and ensure I didn't miss out on any applications for my target companies.
I meticulously tracked all my job applications on Notion using a table with the following columns:
- Company: The name of the company I applied to.
- Role: The specific position I applied for.
- Job Description: A screenshot of the job description for easy reference.
- Location: The location of the role (city, state, or remote).
- Date Applied: The date I submitted my application.
- Resume Used: The specific resume version I used for that application.
- Status: The current status of my application (e.g., applied, interviewing, offer).
Keeping track of the resume version I used for each role was particularly helpful. It allowed me to recall the specific skills and experiences I highlighted, which proved invaluable when interviewers asked about my background. The job description screenshots also aided in interview preparation, reminding me of the key skills and responsibilities each role sought. While many were generic, some looked for specific proficiencies that I made sure to emphasize during interviews.
Behavioral Interviews: The Art of Storytelling
Behavioral interviews are less about what you know and more about how you articulate your experiences and insights. They're an opportunity to showcase your soft skills, problem-solving approach, and how you've handled various situations in the past. To excel in this area, I focused on the art of storytelling.
I prepared by reviewing common behavioral questions, which are readily available on platforms like Glassdoor. For each question, I would meticulously craft my answers using the STARL (Situation, Task, Action, Result, Learnings) method. This framework was invaluable for structuring my responses into concise, impactful narratives:
- S (Situation): Briefly set the scene and provide context for your story.
- T (Task): Describe the specific task or challenge you faced.
- A (Action): Detail the actions you took to address the situation. Be specific and highlight your individual contributions.
- R (Result): Explain the outcome of your actions. Quantify your results whenever possible (e.g., "reduced latency by 15%").
- L (Learnings): Reflect on what you learned from the experience and how you would apply those learnings in the future. This demonstrates self-awareness and a growth mindset.
Writing out my answers beforehand allowed me to refine my stories, ensuring they were compelling and directly addressed the underlying intent of the question. Practicing mock interviews with friends significantly boosted my comfort and fluency in delivering these stories naturally. The goal wasn't to memorize scripts, but to internalize the key elements of each story so I could adapt and deliver them confidently in any interview setting.
Technical Interviews: Building a Strong Foundation
When it came to preparing for technical interviews, I diligently followed Neetcode's Roadmap. This roadmap was instrumental in building a solid foundation in data structures and algorithms, covering the most common LeetCode patterns.
My daily routine involved solving 2-3 LeetCode problems, focusing on one topic per day. I also set a 30-minute time limit per problem to simulate the pressure of a real interview. This strategy significantly improved my problem-solving skills and my ability to code efficiently under time constraints. If I couldn't solve a problem within the time limit, I'd review a NeetCode's video explanation to understand the optimal solution. I also kept track of my solutions on Notion using a table with the following columns:
- Problem: The name and link to the problem on LeetCode.
- Tags: The associated tags (e.g., array, string, DP).
- Status: The current status of the problem (solved, in progress, needs review).
- Explanation: A brief description of my solution, including any patterns or techniques I used.
This structured preparation ensured I felt confident and well-prepared, rather than being caught off guard, like "a deer in headlights," during my interviews.
Job Application Statistics
Here's a visual breakdown of my application journey:
In total, I applied to 79 roles and received 6 Online Assessments (OAs) from:
- JP Morgan Chase: The OA was on HackerRank and consisted of two coding questions, similar to LeetCode medium-hard problems.
- Stripe: This HackerRank OA featured one coding question with a 60-minute time limit. It was less of a typical LeetCode problem and more of an object-oriented design challenge. I unfortunately ran out of time due to the extensive implementation required.
- Okta: The OA was a General Coding Assessment (GCA) on CodeSignal, comprising four coding questions. I'm not particularly strong at GCAs, so I didn't perform well, scoring 495 (755 on the old scale). You can learn more about GCAs here.
- Samsara: This was also a GCA on CodeSignal, and I submitted my score from the Okta GCA.
- Two Sigma: The HackerRank OA had two coding questions with a 75-minute time limit. These were difficult graph and dynamic programming problems, and I could only solve one with a brute-force approach.
- Microsoft: This Codility OA included two coding questions with 110 minutes to complete. The first was similar to a LeetCode hard problem. The second required me to debug Chat-GPT generated code that attempted to solve the first question.
Additionally, I was able to bypass the OA for Bloomberg due to my participation in the Bloomberg Accelerator Summer School.
Out of these companies, I moved forward to the interview stages for:
- JP Morgan Chase (Final round): This involved two in-person interviews and participation in the Code for Good Hackathon. The first interview consisted of a standard behavioral segment and a technical section with a LeetCode easy question, along with random CS trivia (e.g., "How does Python memory management work?", "What is a database index?"). After the interviews, my performance in the 24-hour hackathon was evaluated.
- Bloomberg (Phone screen): This was one technical interview with a LeetCode medium BFS question that I unfortunately couldn't solve within the allotted time.
- Microsoft (Final round): This interview process consisted of three rounds: one behavioral, one technical with a LeetCode medium matrix question, and one technical question asking me to implement two functions for a class.
And from those companies, I was fortunate to receive offers from the following:
- JP Morgan Chase
- Microsoft
- Amazon Web Services (return offer)
Making a Decision: My Criteria
Having been fortunate enough to receive offers from JP Morgan Chase, Microsoft, and Amazon Web Services, I had to make a difficult decision. My primary criteria for choosing a company were:
- Interesting Work: I was keen on projects focused on backend development, distributed systems, and potentially machine learning.
- Growth/Learning Opportunities: I wanted to know if there were domain experts I could learn from, if I could genuinely grow my career at this company, and what the promotion process was like.
- Culture/Work-Life Balance: I looked into the company's politics, typical work hours, and overall environment to ensure I wouldn't burn out.
- Compensation: I considered if the compensation would allow me to save and invest comfortably, enabling me to focus on my work without financial worries.
After carefully weighing all these factors, I ultimately decided to accept the offer from Microsoft! I felt that Microsoft offered the most interesting work and significant growth opportunities, and I was particularly excited about the projects they had lined up for me.
Essential Resources
I mentioned some resources earlier that were instrumental throughout my job hunt. Here's a highlight of those, along with a few more I found incredibly useful:
- cscareers.dev: This Discord server provides a community of like-minded individuals also navigating the SWE job hunt. Their LeetCode bot was especially useful for identifying frequently asked questions by various companies.
- NeetCode: A fantastic collection of LeetCode problems, including the popular Blind 75 and NeetCode 150 lists, crucial for building problem-solving skills.
- Tech Interview Handbook: A comprehensive guide covering everything from behavioral questions to system design, perfect for thorough interview preparation.
- LeetCode Cheatsheet: Contains time complexities for common patterns and useful tricks for solving typical LeetCode problems.
- Prepping 101: A concise yet comprehensive guide to tech interviews.
- Glassdoor: An excellent resource for preparing for behavioral interviews by reviewing common questions asked by specific companies.
- Notion: My go-to tool for tracking job applications, organizing interview notes, and documenting solutions to LeetCode problems.
Key Takeaways
Start early! I kicked off my 2024 new grad job hunt in July 2023 during my AWS internship, when I applied to JP Morgan Chase (which ultimately led to an offer!). This early start was incredibly beneficial, giving me ample time to prepare for interviews and ensure I didn't miss out on applications for my target companies.
Finally, and perhaps most importantly, remember to maintain a positive attitude throughout the entire job hunt. It's a long and grueling process, filled with rejections and challenges, but the effort is definitely worth it in the end.
Good luck with your own job hunt journey!