# How I landed a Machine Learning Job in Germany


Since Februrary this year I am actively looking for a new job. I am currently living in Leipzig, so I mainly look for remote options as Leipzig has only a handful of jobs in my area of expertise, which are all not what I'm looking for (e.g. ML for recommendation systems). On the 21st of February, a keyword search for "Machine Learning Engineer" on indeed yielded <300 open full-time positions for Germany with only 12 fully remote options. On LinkedIn there are 706 results with 247 remote options, of which are 97 entry-level. Not a bad result for the current market situation, but most of these I expect to be unmaintained and a bunch are duplicates. Nonetheless, I applied to some of them where I could see at least some degree of fit in culture and responsibilities.

## What I was looking for
Coming fresh out of university I wanted to achieve a handful of things with my first full-time position. I wanted to:
- Continue with AI, biased towards NLP but CV is also interesting
- Join a team with some level of seniority to learn as much as I possibly can, avoiding being one of the first hires in a greenfield mission
- Join an AI-first company, avoiding being in a side departement that is managed top-down from people with no AI experience (and therefore often unrealistic expectations fed by media hype)
- Preferably work on something that has scalable real-world impact and helps actual people more than shareholders

Going by gut feeling, I would also prefer to work on actual models again. Training, fine-tuning, data work, all the fun stuff. These are often referred to as "ML Engineer" positions, probably to escape the current hype cycle. Because most of the current "AI Engineer" positions are more concerned with regular Software Engineering to serve or develop complete AI solutions (not models), almost exclusively LLM applications. These positions I also considered as they would further advance my regular software engineering skills. Most of the AI-related knowledge and experience relevant for these positions I already acquired at my previous working student job and studies of course.

## The process
One cannot underestimate the power of a network. In a sea of applicants you have to somehow stand out - that could be an impressive side project, extremely relevant work experience, or knowing people at the companies you apply to who would vouch for you. Luckily, I had enough of the latter two to get into the interview process for four companies without any desk rejects.

Three of these options were AI Engineering positions, one an ML Engineering position. The interview processes were very different for all of them.

### Company #1 - AI Engineer
For company #1 I had already interviewed a couple of months earlier. But due to some special circumstances, I couldn't take that offer at the time. So I reached out to the contacts I still knew and got talking again. It went really well, I had exclusively positive interactions with them, but ultimately we found no fit, as their current policy would require me to come into office at least twice a week. Would be no problem for a local company, but it would be a 2h commute each direction, which I just cannot guarantee at the time. We parted ways for now.

### Company #2 - AI Engineer
Company #2 (AI Engineer) offers a remote-first position with insane flexibility benefits and a large competent looking team. Even though I had a very good friend working there, I just applied through the regular process, briefly mentioning my contact in the letter of motivation. This (and my CV) was enough to get me on the first screening call. This call was basically what one would expect, we talked a bit about my previous work experience, I got to ask a few questions about the company and team structure, and we finished with a few technical screening questions, code example interpretations, and behaviourals. No live coding though, this will come later. First impression was really good, very friendly people which made me much less nervous. Also, I knew I was a good fit as my work experience from my working student position was highly relevant for this position. Ended the call, and not much later got the invitation for the second interview, the technical one. 

There was an unfortunate scheduling decision to make, as the only reasonable slot was during my vacation in Italy, but it was too important to postpone. While the group I was travelling with went on a beautiful hike, I was stuck in a room preparing and then doing the interview. From all of the interviews I had, this was the toughest one. It was 2h30min divided into three blocks: code review, live coding, system design. I didn't really know what to expect, which made me rather nervous. 

The code review was part was fine, they would show me code and I would have to think out loud what I think what the code does, should do, and if it's good style. It bascially required me be trained in the programming language, some machine learning basics, and communication skills. Good Stuff.

For the live coding, they presented me with a leet code style question. I have trained algorithms and data structures in my general preparation, so I could solve it efficiently. I did however have not enough programming experience with heaps as a data structure, so I could only solve it sub-optimally, but communicated which data structure I would exchange for a heap and drew the solution on a digital white board. They were satisfied with my solution, and we moved on to the system design.

System design here was really tricky. I was already quite exhausted so I did not really understand the meta task that was asked. I received a customer request and should design a system that solves the problem. My mistake was to start designing. I made it very technical, and made a bunch of decisions along the way, where alternatives would have existed. The interviewers later interrupted me at some point hinting me towards the meta task - dealing with an underspecified customer request. The technical solution was not of importance as long as it was good enough, they wanted to see me demonstrate experience with customer projects. I left this part kinda disappointed in myself, but took this as a learning opportunity for future interviews.

A few days later I got invited to a feedback call. In there, I got the chance to receive and give feedback about the interview process, which again proved that they got good processes in place for improvement. Overall, the whole interview process was very well structured, didn't drag for long, and was well communicated. So I could not give much constructive feedback, everything was quite pleasant. Their feedback regarding my performance aligned with my own perception, which is always great to hear. They then made me an offer, which I could think about for a day until they need an answer.

### Company #3 - ML Engineer
Company #3 has been on my radar for quite some time. It is a startup with a clear vision, a very driven team, and... A MACHINE LEARNING TEAM. Training actual models, collecting data, in-house labeling team, ALL OF IT (hope the excitement comes across). Structure-wise it is what I have been dreaming about during my studies and master's thesis. I knew one founder from past endevours (is that how you write it?) and have worked with parts of the team for a master's seminar, so I gladly applied for an ML Engineer position.

The initial screening call went great, it was more of a vibe check combined with a rough assessment of the company-person fit. We have talked about my studies, work experience, and what I am actively looking for currently. I got to ask about the ML team, company structure, market situation, and future plans. The ML team was a little small currently, but they were actively hiring for more, aiming for 5-7 full-time MLEs, which is a team size I am happy with. It was a good chat, onto the next stage: technical interview.

The technical interview for company #3 was less of a traditional leet code / code review / system design round, but instead a real-world problem they're facing as a take home task, which would be then discussed in-person during an on-site. They explained the problem, data, and constraints, and I would have one week to work out different solutions, state their advantages, disadvantages, and requirements. The solution should be a model design, going into details of architecture, training, evaluation, and more. I liked this much more than the traditional leet code style interview - and overall thought it's much more fitting as a benchmark for MLE positions. 

As it was an NLP problem, I did not have to research much to solve it. It was close to what I had been using at my previous position(bi-encoders, cross encoders, vector similarity, all the good stuff) and master's thesis (transformers, custom tokenizer). Wrote down my solution on a few pages and went into the on-site with confidence and determination. The on-site itself comprised of a talk-through of the solution, some additional in-depth questions about my approach, a live coding of the most important parts of that solution, and some more behaviourals. On-sites are of course also a pretty efficient vibe check as you're heading out to lunch with the team, meet a few people, and perform under pressure on a real-world task. I had a good feeling, although my coding fingers were a bit rusty, which I could make up with a solid conceptual understanding of the algorithms and problem space. Had a good feeling.

Later that day, I got a call from the recruiter that they liked my work and thought I was quite the fit for the company. There was one final call required with another founder to make sure that it's a fit from both sides, culturally. This one I also had to do from Italy, but it was quite short, I again got to hear that they're hiring more MLEs, which was adressing my main concern of insufficient team size. Later that day I got the call from the recruiter letting me know that they would offer me the position, which I got to celebrate playing Magic the Gathering with friends in a rural Italian town, life was good.

### Company #4 - AI Engineer
Honestly, this one was WILD. The process was SO damn unstructured that I cannot even re-collect the stages we went through. It was not necessarily their fault, and more because of the unique situation they were in, which is unfortunately information I can't give out publicly (I think). The hottest tea shall remain unserved. (Is this how kids talk these days?)

### So? What now?
Okay, I got multiple offers - luxury problem, right? Well.. unfortunately the offers all shined in different areas. Do I want to join my friend and further develop my SE skills in a larger (more senior) team with tons of flexibility? Or do I want to develop actual machine learning models and own more of the impact for a vision I strongly believe in? It was a hard decision, both company #2 and #3 were exceptionally good options...

In the end, I went with the ML Engineer position. My excitement for the ML stack was just too overwhelming at the time, and it still is - weeks after that decision. However, I ended on good terms with the other company, because they were and will continue to be a great fit I assume. They're on top of my list if I wanted to explore other opportunities in the future.

But right now I am focussed and extremely excited to join the other MLEs of company #3. I'll have my onboarding week soon, can't wait for that :)

## Takeaways
My goal in life is to always learn something - no matter what I do it should make me a smarter, or at least more well-rounded person. So, what can I learn from this whole process? (Some things are more unique to tech than others, but I will try to keep it general)

### Network
I cannot understate the importance of having a good network. Luckily, I am a really sociable person, so my network grows naturally at a decent rate. But if you're not like me, and nonetheless want to open yourself up for good job opportunities, then I highly recommend taking a structured approach to networking. And start early! Some of the opportunities I got during this interview cycle were a direct or indirect consequence of network that I have been building since the very first day of studying. Be friendly to people, talk to as many as you can, take an *honest* interest in people, help them out without asking for something in return, and make sure you stay (at least loosely) connected with as many of them as you can. Attend dedicated networking events, join student clubs, do volunteering work. Each interaction has the potential to become relevant in your future life.

Even though socializing comes naturally to me, networking does not. And I want to add that I find pure networking for the sole purpose of seeking better job opportunities quite alienating. I cannot stand empty conversations, fake smiles, and status talk. And to network, you don't have to do these things. Just engage in honest conversations, be open for other perspectives, talk about things you like, and listen to others doing the same. Be a kind person and people will remember you.

### Fit is a two-way street
Probably every coach tells you this, but for me it had to "click" experiencing it by myself (and watching lots of YouTube videos!!). You are interviewing to be an employee, but **the company is also interviewing to be an employer**. You should never go into an interview with the mindset of "oh I hope they will accept me". An interview's main purpose is to find out if you are a fit for the company (skills, culture, experience) and if the company is a fit for you (compensation, team structure, vision, flexibility, ...). 

And here is the most important part: if either of these things do not match, then **the job is not for you**. If the company decides not to offer you the position, then it is much better that you do not work there than if you sneaked (or lied) your way into it. Otherwise you're stuck in a position with intense imposter syndrome, constantly stressed. The same goes the other way around. Don't get baited into thinking that the sole purpose of interviews is to get a job offer. The purpose of interviewing is to assess the quality and fit of the work place. Not aligned with your personal goals? Pushy bosses, crazy workload, unrealistic expectations? What's the value of an offer for such a position? It's none. Move on.

Be honest about yourself, ask a lot of questions, and think about what you're looking for in a position. Don't be afraid to contact the recruiter or team, even after you potentially got an offer. If they should pull the offer because of your curiousity - well guess what, it's probably not a good fit.

Some people are different, and they make it a sport to sneak themselves into positions they know they're not qualified for because of larger compensation packages. If you're like that, good for you. Go get that bag, I guess. But I highly value authenticity and honesty in people, and hold myself to the same standard. Probably the reason I don't hang around many sales people (whoops).

### Prepare well
Another thing that is not unique to tech is that university only gets you so far. There are things that university cannot and should not prepare you for in the job world. After all, universities should turn you into good researchers, not PWC consultants. Therefore it is crucial to prepare correctly for your positions.

The best preparation, I ain't gonna lie, is to have actual working experience. Henne Ei undso, I know, but most working student positions are easy to get into (students are cheap) and already teach you hands-on what working in the industry is like. You'll not have much responsibility, but make sure to soak up as much knowledge as you can about tools, processes, and collaboration skills.

If you don't have the time or capacity to work besides your studies, then you need to prep well during application season. Read the job descriptions, collect common requirements, talk to people from the industry (perhaps some other fresh graduates you know). Look up profiles of employees on LinkedIn that work the job you want at that company, inspect their shared skills and past experiences. If you're feeling especially extroverted, then connect with them, invite them for a coffee - people are much more willing to help/mentor than one would assume. Full disclosure: I never did this and even the thought of wasting other people's time like that makes me cringe - but that's just classic overthinking behaviour - they can freely decline your offer if they don't want to chat.

One of the best modern ways of prepping is also looking up the company on employer rating sites, e.g. kununu. They often have a separate tab for rating the application process, which reveals some information about their process and sometimes even specific questions or tasks that were asked during the interview. Also gives you a good chance to look at their culture, work/life balance ratings etc. Read them with a grain of salt though, they're not guaranteed to be authentic or even real at all. I treat them similar to Amazon product reviews.

Again, let's get the mental model straight here. You're not preparing to cheat yourself into the job. You freshen up your skills, close minor gaps in knowledge, and exercise the rapid acquisition of skills, which you'll need in every job anyway. It surely helps to have some expectations for the interview process (calms the nerves), but solid companies do that for you - guiding you through the interview process communicating expectations clearly while leaving enough room for spontaneous skill assessment.

### You're worth more than you think
Don't overthink it, really. The constant evaluation of your skills can be stressful or inflict self-doubting behaviour, but don't tune into that too much. You will eventually land a good job, allow yourself enough time. As long as you're somewhat skilled, honest, curious, collaborative, and willing to learn, then you're already in the top 30% of applicants. You got this :)

