🦆 Brancaleone's blog

Finding a tech job in 2024

Here I share my (impossible) quest to find a job, in what seems to be one of the worst market times ever.

Identifying the right path

When I started my master's at the TU Berlin, I was still unsure about which specialization I wanted to take; I just knew that building systems that deal with large amounts of data has interesting scalability challenges.

I was also pretty sure that I didn't want to go in the direction of AI. From what I've seen so far, only 10% of the job is proper ML modelling, while the rest is data cleaning and data plumbing. This might not be true for very specialized research-oriented positions at R&D departments of big tech companies or academia, which are a very competitive and tiny part of the available positions.

Moreover, my career aspirations were rather low; I had always worked part-time while at university, with no particular area of interest or intention to aim high.

Luckly, in May 2023, I experienced a boost for my career goals: LeadTheFuture. LeadTheFuture (LTF) is a non-profit mentoring organization that aims at fostering young Italian's professional ambitions.

I feel immensely grateful to my mentor Gobbees for the continuous support and the mock interviews. At the same time, meeting international and ambitious students in Berlin, helped me to think more about the wide range of opportunities that exist, especially in big tech companies building data infrastructures on a global scale.

I was then able to slowly shift from the mentality that only gifted people can make it, to one where consistent effort can at least make such opportunities attainable and maximize my chances. This has also helped me to find - to some extent* - a sense of purpose in my work; it is now not just a way to pay the bills, but also to do something that has an impact and involves solving non-trivial challenges.

Setting realistic expectations

I quickly realized how competitive the applications have become. I reckon this is due to the fact that there are fewer internships openings, making the flow of applicants less spread out. Another aspect to consider is that, unlike a few years ago, an internship position often corresponds to exactly one hire.

For an internship in a FAANG-like company, LinkedIn reported ~800 applications. Even if you optimistically assume that only 10% are qualified candidates, you are still competing with almost a hundred people.

Another observation was that junior positions were almost non-existent. I applied for a junior software engineer position in a fintech, relatively known only in Germany; in their rejection email they mentioned having more than 600 applications.

In addition, I think it is better not to waste time applying for full remote EU or global positions as the competition is even more aggressive. The only exception would be for senior developers in a niche area that exactly matches the skills required.

As a result, it is necessary to consider doing internships (and hoping for an FTE conversion) as an alternative to entry level positions, or accepting less fancy jobs in local companies. In the latter case, fluency in the local language is required, so this is something to consider. Tip: Learning German is never a bad idea.

Interview Preparation

CV

To improve my chances of passing the CV screening, I used one Overleaf’s elegant templates. Empirically, it seems that the 1-column format is preferred by the ATS. Following the guidelines from This Is What A GOOD Resume Should Look Like. University projects can catch the attention of the hiring manager when relevant and should ideally be complemented by open source contributions as well. Lastly, run one pass with DeepL Write to fix typos and mistakes. I haven’t notice any particular difference between using a cover letter or not. Referrals do help in reaching the hiring manager CV stack and get interviews. Networking with peers at uni helps in this sense and it is not to underestimate the amount of contacts of professors and researchers in your area of interest. For me, even cold messaging on LinkedIn (people that have something in common, school, connections, previous company….) had a surprisingly high success rate.

Coding interviews

The first building block of the tech interview is Leetcode. Like it or not, it is still considered the main tool for a fair assessment of applicants coding skills. In retrospective, I can say that it really helped me to improve my problem solving skills and consolidate my knowledge of data structures. My guess is that it will become even more popular in the future and used as selection criteria even in small local companies.

The best way to prepare for Leetcode problems is Neetcode. The guy has really done an amazing job of structuring a reasonable, step-by-step study plan for Leetcode. One caveat: I reckon that from 100 problems onward, the time invested suffers from the law of diminishing returns.

I strongly recommend practising with mock interviews. In my first interviews I was very anxious and froze up completely when I got stuck, which is huge penalty for the evaluation. There are websites that offer this as a service, but forming a group of peers with the same goal sounds even better.

In fact, (over)communicating your thought process in solving the problem and being a likeable person are at least as important as technical skills. I find it really helpful to go through the cheatsheet from Yangshun Tay before each interview.

Algorithms and data structures

If you are not in a rush, I recommend the Algorithm Design Manual for a more holistic preparation. It goes very deep into data structures (while being more readable than the Cormen) and is accompanied by practical examples.

Otherwise, the foundations from Neetcode and the cheatsheets from The Tech Interview Handbook should be sufficient for a comprehensive preparation.

System design

If you are even remotely interested in working with large systems, Designing Data Intensive Applications is the perfect start. Database Internals complements it with more in-depth ideas about distributed systems. It can also help with system design interviews, along with other books such as Alex Xu's System Design.

How did it go?

I applied to several companies, mostly in the area of data management. I have to admit that in many cases the required experience was rather high, yet I thought I could compensate with some practical (niche) experience in database internals.

With company A, I passed the OA with flying colors, did well in 2 technical interviews and still received a rejection.

Company B got me through a 2 HR interviews, 2 technical interviews, 1 assignment (~12h) and ended up deciding they were looking for someone with more seniority (?). Nevertheless, they kept advertising the job posting even months after the interviews, so I suspect that it could have been a case of opportunistic hiring or maybe there was no actual vacancy to fill.

Paradoxically, the hiring process of company C took me the least effort - only 1 technicall-ish interview and I was offered the job. However, the position was in a remote and cold location, and initially limited to a 2-year contract. It was also in November, while I was still waiting for the results of many other applications, so I turned it down.

I had 2 technical interviews with company D, plus a third team/project specific interview. Shorly afterwards, I received an offer, which I accepted.

After all these efforts, I am quite happy with the final outcome. This month I have started an internship in a big tech company in Zurich, working on a very interesting project that is well aligned with the topics I am most passionate about.

Advice

What I would do differently if I could go back in time:

And if all of this is not enough (luck will certainly play a role), I would consider lowering the standards a bit and getting some experience in less fancy companies**.

*= At the end of the day, all we are doing is just making the rich corporations even richer.

**= But let's be realistic. Once you accept the (possibly unlimited) contract from the local/consultancy/whatever company, you will most likely settle down. Over time, your skills tend to become fixed in one area and your interviewing skills become rusty. If you don't learn much on the job, it will be virtually impossible to catch up. Anecdotally, I've seen this happen a lot. Of course, I see nothing wrong with shifting your priorities from work to other things. However, if you still care about your career, the price will inevitably be keeping up with coding and even spending time on technical topics in your spare time. It can be done, but it requires a lot of motivation and willpower.