When I was approaching my graduation in early 2019, I began to look for a job. In this post I’ll detail my experiences.
I went to a local community college and got my associate’s degree in software development, graduating in Spring of 2014. After that, I did full-stack development for a small software company for 5 years. During the last two years there, I dropped down to part time while I went back to school to get my bachelor’s degree. I resigned from that job in December of 2018 to focus on my final semester and the job search, which took place January - April 2019.
My resume had the above academic and work experience, plus a couple of side projects that, while they got the job done, were technically unremarkable. So it could be better, could be worse, but I felt I had a solid jumping off point to my next career move.
“College is not vocational training” is a line I have heard many times. If it’s not vocational training, it’s certainly not interview training either. There 2 classes that helped specifically with the technical questions I would face in interviews: Computer Organization, and Data Structures & Algorithms. Nobody cared about calculus, linear algebra, or even my senior capstone project. Projects that are in the exact language or field as a particular employer are probably useful, but not strictly necessary.
You may have heard of a website called LeetCode. LeetCode has over 1000 programming problems, mainly dealing with data structures and algorithms. FAANG (Facebook, Amazon, Apple, Netflix, Google) companies are well known to use this style of problem in interviews. In my experience, smaller and lesser-known companies are also using these types of problems. Before and during my job search I was doing these at a rate of 5 or 10 a week. I do think it helped a lot. In both video calls and onsite interviews I was given this style of problem to whiteboard. If you are applying for jobs today, it is in your best interest to have some familiarity with them.
Crack the Coding Interview is a very well known book for Computer Science job seekers, and in my opinion the high regard is warranted. It gives problems and concepts on a wide range of topics common to CS. I did have a copy of this book, and did study it.
My initial approach was what I’d consider semi-targeted. I browsed jobs online and applied to many I felt were interesting or strongly inline with my skill set. I attended one career fair held by my college, but I didn’t follow up on anything there because it was mostly local companies, and I had already decided I wanted to move out of the state. After a while of cautiously submitting applications, I started to pick up the pace and apply to just about anything where my skills and experience overlapped at least 60% with the job listing. I was applying to any positions between mid-level and senior. I applied through three places primarily: Indeed, Stack Overflow and Triplebyte.
Indeed is a blessing and a curse. On the one hand, it is incredibly easy to submit your application; for many roles it is a one-click affair. On the other hand, the fact that it is that easy means that the person on the other end of that application form is going to be totally inundated with applications. I was able to shotgun dozens of applications here per day, but my response rate here was the lowest. Was the response rate low because I shotgunned them out so fast, or was I led into shotgunning them out so fast because the response rate was low? I am still not sure. The offer I ultimately accepted was found here.
Did you know Stack Overflow has a jobs board? They do, and it’s pretty good. While there were fewer total listings here, they were more focused on engineering roles and they had a higher percentage of pure tech companies. I was considering moving outside of the US for my job, and I found a higher percent of overseas job listings here too; which may or may not be of interest to you. I had a medium response rate here. The offer I declined to take was found here.
Triplebyte is a selective recruiting platform for engineers. There are two steps to getting admitted: take and pass a ~30 minute online assessment, then take and pass a 2 hour technical video interview. Their value proposition to job-seekers is that once you pass those things there are only two more steps to getting hired: one non-technical “pitch-call” with a company, and an onsite technical interview. I saw their ads everywhere and was recommended by somebody to apply.
The online assessment to Triplebyte was what you would expect, just some basic computer science stuff, but the video interview was thorough and rigorous. There were 4 sections to the video interview: a greenfield coding exercise, a bug finding exercise, and two question and answer sessions. I don’t recall for certain, but I think the question and answer sessions were about system design and CS fundamentals. I was lucky that my first employer was so small, because I got a view of things from the database all the way to the front end, and that varied experience helped me answer a lot of the systems design questions. I don’t recall any serious systems design content from college; so I think that section would give a new grad the most trouble.
I had 14 pitch-call requests, 5 of which I rejected. All of my call rejections were due to small company size; my previous job was in a tiny company, and while there is nothing wrong with that I just wanted a different experience in my next role. Out of the remaining 9 calls I got 3 on-site offers. I eventually went to 2 on-site interviews, but the third one was abruptly cancelled by the company a few days before. (Triplebyte had already booked the flight and accommodations, so I ended up getting a free day in San Francisco due to this, which was a nice consolation.)
Generating 14 calls and 2 or 3 onsite interviews was huge given the relatively small amount of time I had to invest to get those. It’s easy for me to say I had the highest response rate here.
The two onsite interviews I had were painless. Triplebyte has a third-party company that takes care of travel and lodging. My flights, hotel and Ubers between the jobsites, hotels and airports were taken care of. I just had to pay for my own food. Ultimately I did not get any offers through Triplebyte. One company passed, the other basically said “we’re not hiring you for the job you interviewed for, but we like you and we’re going to see if there is another position for you” (that never materialized).
If you find this writeup helpful, please consider applying to Triplebyte through my referral link.
There are other platforms similar to Triplebyte, one being Hired.com. I have no expeirence with these, so I can’t speak to them, but be aware Triplebyte is not the only option in this space.
I kept a spreadsheet of application info. Although it’s not optimally organized, I was able to extract some rough numbers from it:
|Immediate or Eventual Rejection
My job search was a very wide but not very deep funnel: a lot of applications, some responses, fewer interviews, and very few offers. In retrospect this doesn’t seem too odd, given that a lot of my applications were fire-and-forget, I put very little effort into applying, so it is unfair to expect a consistently high amount of effort from the other side. In the moment, though, it was a little disheartening.
Most explicit rejections were quick: 60% were within 1 week. 83% happened within 20 days. Then there were some crazy outliers: I have received 3 rejections over 6 months from the time I applied. The longest one was a rejection email I received a whopping 295 days from the day I applied.
Calls, video chats and on-sites
Most of the technical interview content dealt with systems design and CS fundamentals, a very notable part of the latter being data structures and algorithms. In many video calls, and every onsite, I was asked to whiteboard some data structures and algorithms problems. That was about what you would expect: print out a tree in depth-first order, reverse an array in place, sort an array, etc… and even the humble fizz buzz. This is where LeetCode helps you. You need to prepare to code on a whiteboard or in a plain text editor. You need to know how to approach these problems.
Strongly consider using a concise language like Python. When given a choice of language, I always chose to use Java. I’m significantly more familiar with Java than Python, but in every case I would have known enough Python to get the problem done. I was never asked something advanced that I only knew how to do in Java, and not Python, like I had feared. You should not underestimate the cost of having to write a verbose language by hand. When you only have 30 minutes every second counts.
One piece of advice I read was this: “get a brute force solution first, then optimize it”. I am confident enough to say now that this advice is usually wrong. I have two reasons why:
You probably don’t have enough time for 2 solutions, you might not even have enough time for one. Think about how much time you are being given before attempting one or the other.
Some of my interviewers seemed to be immediately unhappy when I started to work on a brute force solution, they wanted to see a concise, performant solution first. They would interrupt and correct me instead of letting me get something that just works.
Systems design was another big part of calls and onsites. One I can recall in particular was “design eBay”. You are not actually being asked to design one of the top 50 websites in the world in 30 minutes. You are being asked to show that you know the major components of a large system, and, I think, that you can zoom in on at least one area and go into detail. In this particular interview, I ended up discussing a lot about how the database would be laid out. Some other systems design questions had to do with caching web results and distributing work with messaging queues.
There were a few online assessments I was given. I think most of these were done through HackerRank. They often included a bit of everything above. I think these were easy, and for the most part, enjoyable. I happen to like thinking about this style of problem, and when you can look something up and nobody is in the room with you tapping their foot for you to get the solution, it is much more relaxing. Anecdotally, I found that Japanese companies give these a lot. The sample size is small though, so I wouldn’t read too much into it.
I was given two take-home projects. One took about 8 hours, the other maybe 6. I know some people have principled opposition to these on the grounds they take too much time and are free work. I was confident that the problems I was given were trivial enough that they were not free work, ie: not something that would be of any benefit to the company outside of vetting applicants. The time commitment is another thing. What it boiled down to is that I wanted job offers from these companies and I was willing to spend time pursuing them. I did get an offer from one, but the other passed for reasons unknown. I have heard amusing stories of applicants later billing the company for their time. Sadly, I have to admit to you that I did not attempt this.
One thing that you might prepare yourself for is being probed on something to exhaustion. I had one interviewer in particular do this. For every answer I gave, he would repeat it back and then add “ok, but why?” I would clarify my answer and/or go into further detail. “Ok, but why?” He would not specify what he wanted to know, he just kept asking “why?” Sometimes this would go on 4 or 5 times on a single question. No answer was good enough, he kept digging until I admitted I knew nothing more on the subject. I understand why they did it, but I didn’t like it. It was a very unpleasant experience. This only happened once, so I’m willing to believe this kind of thing is an outlier.
As has been posited before, there is a great deal of luck (aka probability) in the application process. You can objectively do things that increase your luck though: study for the things you know they are likely to ask.
Things that hurt me
So there were a few hurdles for me in this job hunt:
I was just finishing up school. Although I was already a professional developer before going back to school for my bachelor’s degree, I can’t help but think that many potential employers still viewed me, to some degree, as a “new grad.” Another was that I was searching 2+ months before I was able to start work; many places did not want to wait this long. On multiple phone calls I could tell that the enthusiasm cratered when I told them I needed 6+ more weeks to finish school.
I was not currently in the metro areas that I was applying to. Since moving to a major metro area, I have received way more cold contacts from recruiters. It is objectively a major bonus to them when you already live there: they don’t have to fly you out for the interview, and there is no chance you will have a last minute change of heart about leaving mom, dad and your high school sweetheart behind. Before the job I ultimately accepted flew me out for the onsite, the recruiter called me one last time to essentially ask “are you really sure you want to move, because we’ve had people before that…” I knew I wanted to move, it was not hard for me to convince him I was serious.
I was not currently employed. I think that resigning to focus on my final semester and job searching was a reasonable and defensible choice. However, I do think that it is viewed more positively if you currently have a job, no matter what the reason is.
So all that said, these are things I really couldn’t do much about in the immediate term. All I could do was work hard to convince employers I was a competent and serious candidate.
Things I didn’t do
I never wrote a cover letter. Not even 1 cover letter that I used over and over. I just plain didn’t write one. I have a hard time viewing it as any more than a puff piece that nobody cares about. It would be one thing if I knew I wanted to work at a given company since I was in 10th grade, and I did projects directly related to their field, and I have a very compelling life story to tell them; none of those things were true for any company I applied to. I do not regret not doing this.
I did not pay for any interview prep products or services. LeetCode has a premium level which I think probably helps you specifically with FAANG more than anything. I have heard of practice interview sites, and also interview coaches. I did not feel these were necessary. I do not regret not doing this.
I did not contact any company recruiters directly. I have heard this is a strategy that yields a high response rate. It’s an easy process: go to their website or LinkedIn and find their recruiter, shoot a quick message to them saying why you’re interested. In a lot of cases this is going to bypass the giant pile of Indeed resume submissions and filtering bots. I regret not doing this.
This was an extremely stressful time. I was in my final semester of school. The faculty went on strike at the start of the semester, and due to that there was a time I wasn’t even sure I would be able to graduate. The work was non-stop: homework, exams, phone calls, video calls, practicing LeetCode, doing take-home exercises. There was little to no time for friends or relaxation. It was truly the dark night of the soul. But I persevered! I kept going, and signing the offer letter was one of the biggest reliefs of my life.
The exact place I accepted the offer to is maybe not the most relevant thing to potential job seekers, but it is relevant to my story. Strange that the job I ultimately accepted was through Indeed, the platform that otherwise yielded the least results. My initial application here was to a job 2 steps above where I actually am, skill and experience wise. But they liked me, and they eventually hired me (not for that job). I could have talked myself out of applying easily, but as they say “don’t reject yourself, let the company do that”. Consider this when applying to jobs. I had a thoroughly positive experience applying to MediaMath. I liked the recruiter I talked to, I liked the VP of Engineering (my future boss) and I liked the engineers who interviewed me (my future coworkers.) I felt like they were invested in figuring out whether I was a good fit or not. This shouldn’t be abnormal, but it was. Many places I interviewed the interviewer(s) seemed bored or indifferent, like they just wanted to get it over with. If you are looking for a new role and great place to work, I would encourage you to take a look at the open positions and apply.
My final recommendations for CS job seekers:
- Practice LeetCode / data structures and algorithm whiteboard questions
- Choose a concise language for interviews
- Get a good quality webcam for video interviews if you are interviewing for jobs in other cities
- At least skim Crack the Coding Interview
- Feel free to shotgun out applications, but don’t only do that
- Contact recruiters directly via LinkedIn or email if you can find it
- Apply to TripleByte and/or other similar platforms
- Keep your head up and don’t give up!