I had interviews with at least 25 or 30 companies within the last 2.5 years. Mostly for Software Engineers roles in Germany. With this humble experience in recent interviewing, I thought I would share my observation, thoughts and to complain loud about it on the internet. I think it might be useful, especially for fresh graduates, who are looking for their new job in the market. Also, there might be some funny interviewing experiences, that might draw a smile on your face!
Also, I want to hear opinions from your side. But first, ...
Quick info about me and my experience, that will probably give you some context:
My name is Omar. I got Bachelor's degree in Computer Engineer from Jordan. Then I worked for 2.5 years Full Stack Ruby on Rails. Moved to Munich, Germany to do my Masters. After my Masters, I worked here in Germany again as Full Stack Ruby on Rails at a very small startup. Then joined 150 employees company, Freeletics, as Backend Engineer, also Ruby on Rails, then slowly transitioned to doing Operations. During the pandemic I joined Amazon Web Services as a Software Development Engineer for 8 months, before quitting later in the same year.
This transition from a very small company, to medium then to Amazon, has given me interesting experience about how companies with different sizes work, and how they do interviews. But today I want to focus mainly about interviewing.
When I quit Amazon in October 2021, I didn't have another job. So I am writing this here with some fresh interviewing while fresh in my head.
With different companies have different style of interviews, I observed two main types of companies, in terms of interviewing. Disclaimer: I don't think anything wrong with any type.
1. Companies that don't care about experience, but only your standard Computer Science knowldge and your way of thinking.
These are the companies that don't care about whether you know to program in C, C++, Python. Or whether you are familiar with some specific technology or database engine. We are familiar with how the FAANG companies interview. These companies care more about how you think, and whether you are able to learn things quickly. For them, apparently knowing Algorithms, Data Structures and System Design is the way working the best so far, to find the best employees.
These companies afford to hire great software engineers, and have them learn these new technologies while they are working there. When you interview with Google or Amazon. You go to Leetcode, solve tens or hundreds of data structure and algorithms questions. And BOOM ! You are a FAANG Engineer. Of course it's not that easy. But that's the way to go. It needs some hard work.
For them, this approach is working well. And for many big companies that afford to have you learn their programming language, which is usually Java or Kotlin, is fine. While it's arguable of whether judging great software engineers this way is the best way. They prefer to avoid false positives. And for them not being knowledgable in algorithms and data structures is a big sign that you are not a fit for them.
It might take weeks to months to start picking up new languages/technologies there, and reach a point where you are productive. They can totally aford this. Also, these companies usually tend to take the risk of hiring fresh graduates and investing on them. Not to mention, that many students are happy to do highly paid internships there. It's a win-win for both.
For example, when I joined Amazon in 2021. I had to learn a totally new programming language for the job. I picked it up really quickly, and was productive with the language within 1 month. Of course not that fluent, as much as I knew Ruby. But it was good enough. No one complained that my lack of knowledge in this language might be a problem.
But to get back to the interviews. For the companies to be in the safe side, having 1 interview about System Design, is also taking place. Mainly to see how candidates can think about scalable and fault-tolerant systems. And most importantly, if they can drive conversations, and accept alternative ideas. So it's more about 50% technical knowledge and 50% communication. System Design questions usually have no right answers. But they tend to be fun.
2. Companies that look for specific knowledge. In either Programming Language or some technology
On the other hand of the spectrum, we find companies that can't afford your learning time as part of the work time. That's why they are looking for people that have specific experience in technologies that they are using.
You most probably have seen job description requirements that say "5 years of experience with Go", or "8 years of experience with Kubernetes". Even though Kubernetes came out 7 years ago :P
That's what these companies are asking for. And sometimes they can tolerate a less years of experience, or less knowledge in some technology, if you show good skills in some other areas that they are looking for.
One of the few companies that are famous for taking this approach is Github. Go to Leetcode, and search for questions by this company. You will find NONE ! They have been acquired by Microsoft, but they maintained their independence and their interviewing style. They are still looking for good Ruby on Rails engineers, or engineers who are familiar with their technologies.
Not really. Of course not every company belongs to either this or that. Some of them have hyprid approach. They might test your algorithms/data structure knowledge, but also your knowledge in specific technology. Some companies are getting creative, and taking the best of both approaches.
Still, all companies prefer to have candidates with strong system design knowledge. In fact, big companies use System Design to see in which level at the company you would fit. For example, at Google, your performance in System Design can decide if you are Level 3, 4. In case you were not interviewing for Senior (Level 5).
Shopify on the other hand, test your ability in Data Structures / Algorithms / System Design, but they prefer you to have strong Ruby skills. Their approach in interviewing is unique. That sometimes they ask you to build a project live online. This includes setting up a database server for example. All while you are sharing your screen. They also want to see how you look for documentation online. Which, let's be honest, depicts how our real life work looks like. I found this great.
But regardless of this. I am not saying this because I find approach 1 better than approach 2, or the other way around. Each company is doing the best they can, and improving their interviewing process.
If I started my own startup someday, I wouldn't bother much with Leetcode style questions. I need people with specific knowledge and expertise in some technologies. But also with ability to learn quickly. But if the company gets bigger and bigger. I might start involving approach 1 into the interviewing process, and invest even more in Junior Developers. Because it might be tough for the startup to do that (investing in juniors) in the early stages, as the FAANG companies do.
Long time ago, a company with free food, and high salary and equity seemed like a dream job. Almost every one of us wanted to work at Google. At least I did. It feels great, and it's a great name on your Resume. Must have been frustrated when you are never contacted by the recruiter, or when you get a rejection like I did. Twice !!!
But when such big companies reject you. Doesn't mean you are bad. I mean ... it doesn't necessary mean you will do bad job at their work. It's just that they prefer to have really strong signals that you are fit for the job. These companies don't tend to fire Engineers, and they want to play it super safe.
But also if you think about it. Why not? they have big streams of CVs coming to their recruiters. They can afford losing you. They find another (copy of you) who is better at Leetcode. And as I mentioned before. It's working well for them.
The good news: The offers that are given by other companies in the industry are catching up really quickly. And the term FAANG, it might disappear at some point.
Some companies are growing fast. With this growing, they are super confused on how to do interviews and hire more engineers. So some of them decided to take approach 1 (Leetcode Style), but they really messed it up. Let me give a funny example:
In 2021, I interviewed with a fast growing company that is creating an online Dashboard. The funny part that this company is NOT HIRING REMOTE, inspite the fact that they are creating an online collaboration tool. I mean: COME ON, BELIEVE IN YOUR OWN PRODUCT MISSION AT LEAST.
When I reached the System Design stage. I was given some question, and as part of the clarifying questions I asked "Can I use cloud computing service?. The interviewer said "Yes sure".
I started explaining how I would use AWS S3 to build this service. Now, I am not saying that my answer was good. But the Engineer was driving the conversation into a specific right answer. But that's not how System Design is about. It's about discussion and ideas. And I did answer all the concerns about the design.
I was rejected after this interview. Which is fine of course. But the feedback came with something like "You were focusing so much on using AWS, rather than building your own system".
But the funny part is: They are using AWS for this product !!. So they could have benefited from this AWS knowledge at work. In fact, I taught the interviewers something about AWS S3, that they didn't know about before.
If you want to imitate the FAANG System Design Interviews, at least do it right!
Let me start with another funny story. I had a recruiter call with a big tech-music company recently. The recruiter was looking at my CV and said: "How come you have many stuff in your skills section ?!". I said: "It's because I learned a few of them on my own?" He: "Well, let's go over each one of them, and see which ones you did professionaly?"
And yes, we went over each one of them, and he was crossing out each language that I didn't do at any job. Go, Python, ... etc. It was an interrogation.
I have built a side project, which is a realtime chess website, that has served tens of thousands of users. And I rarely get questions in any interview about it. And yes, I used Python/Flask in this project. But companies sadly don't care. A very few of them that cared.
This project, helped me indirectly to get 3 jobs, and improve my system design skills, that sadly I haven't got the chance to practice much at real-life work.
Usually, candidates are given around 5 - 10 minutes to ask questions at the end of the interviews. But I highly recommend you to have a 30-60 minutes call with any of the Engineers later, to ask some questions about the company. Especially in case you get an offer. Or also your future manager. That can be sometimes referred to as reverse interviewing.
My list of questions is usually changing, based on my recent job experience. Some questions that you might ask:
I am sure there are more questions that you can ask. But I just wanted to throw some ideas.
See what the others are saying about the company's culture and work. Especially on a website like teamblind.
Feel free to ask me questions, or comment on my post
My name is Omar Qunsul. I write these articles mainly as a future reference for me. So I dedicate some time to make them look shiny, and share them with the public.
You can find me on twitter @OmarQunsul, and on Linkedin.