Skip to main content

Some thoughts after interviewing at Facebook, Google and Microsoft and failing gloriously with confusing results

Since 2020 was pretty much a year spent locked inside the house, eventually I was bored and didn't have much to do except to sit all day in front of a screen, I decide to try my luck at some big companies, at least to get my foot at their doorstep with some interviews.

Now to apply for these companies and to actually get a semi decent chance to pass the phone interview, also known as the phone screening, you need to learn standard algorithmic stuff taught in the first years of university. This meant relearning a bit one of the most painful courses in university that I did, that "slaugthered"  many students, like "Programming and Algorithms" or "Algorithm design". 

"Luckily" for me, I was stuck inside my house so I didn't really have anything better to do. I started with a book, the standard book for interviewing at these companies called "Cracking the coding interview". I pretty much finished it in around 6 weeks by reading 4-5 hours each week and doing the exercises in it. They seemed pretty easy to me and actually made me think that I stood chance. But they were kind of boring, I could not last more than 4 hours to study those things. Most developers are bored to death of those and most people couldn't be more glad when they finished with the in university. 

This is one of the reasons why not many people want to apply to those companies.

After that book, I read that you need to do "Leetcode" exercises to further improve your skills. And, if I thought the exercises in the book that I read were boring, the problems on Leetcode were on another level of boring. Fortunately the pandemic was still going strong, so I didn't have anything better to do. I managed to reach the point to solve any medium level problem on leetcode and maybe around 30% of the hard ones. 

And those hard problems are really hard and as usual really boring. To be honest, a lot of them involved some kind of mathematical background with proofs that a solutions works and number crunching. This actually is another reason why so many people fail these interviews, because you need a bit of a mathematical and theoretical mind for them. Which I don't really have and I don't want to have one, so most people that work in normal IT jobs.

Anyway, continuing my adventure, I also made sure at work to put some extra work in interesting projects and things initiated by me, to have to show on my CV a bit. This is really important, I tried to look at what the job descriptions for these companies wanted, then I tried to insist more on tasks at work that were similar to those like making a rest api service mockup application or an identity service from scratch, which got me interviews for Facebook and Microsoft because for some job postings they wanted similar things. It was actually a win-win situation for everyone, the company was happy to have some nice cool tools built and I was happy that I got some interesting things on my CV to show. I think these companies appreciate if you saw a need for something at work, came up with your own proposal and then built something to solve a problem. 

I think I was really lucky here, because I had some people around me that allowed me to take initiative and appreciated my own initiative a lot. I am really thankful to them, they were really good managers, team leaders and so on.

 After I was a bit prepared, I tried my luck with Microsoft. I think I got a call for an interview a couple of days later after applying. The phone interview was pretty alright, I think the question that I got was a leetcode medium level, which I believe all questions should be. If you can't solve at least in a semi decent way the leetcode medium questions, you probably should not program at all. On the other hand the hard questions are for those that have nothing better to do with their time and should not be used in interviews.

The interviewer was really respectful, humble and down to earth. Honestly, it's a breath of fresh air when you see some humble interviewers, most of the people that I interviewed with were full of themselves more of less and thought their approach was the only right way. I also liked how the interviewer structured the interview, trying to see if I can find a balance between quality and actually finishing a solution and "releasing" it in production even if it's not 100 perfect. He preferred that I would do more iterations on my solution rather than coming up with everything at once. It was also alright if my solution worked well enough for the first run. I also think this is the right and proper approach. You should not start to optimize everything until you have some real life data and usages to see were and how you should optimize some things.

After that, I got a call around a week later for the "onsite" virtual interviews. Due to the pandemic, everyone did only virtual interviews. I was glad to be honest, I don't want to fly 2 days in another country for an interview, too much energy and effort wasted for that. And by the time I arrive at their offices, I would have been already pretty tired. I don't care about all that fancy stuff that they normally do for you, like keeping you at a 4-5 star hotel. Plus, their beds are really bad for me and I rarely get good sleep at those kind of hotels.

For the onsite interviews, at Microsoft, I had around 4 rounds of interviews. The first round was with a principal group manager. He seemed to read me like a book during the interview, and "figured" me out and what kind of person I was in around 10-15 minutes. It was oriented more on myself and on general things, what kind of developer I was, how I worked and so on. 

The next 3 interviews were mostly on the technical side, algorithmic things and system design. I think I was interviewing for a more senior position, so they ask you some system design questions. The second interview I think is what killed my performance and ruined my chances. I think it was a simple question really but it was formulated in a convoluted matter. I also sidetracked the discussion a bit, focusing more on what I enjoy, object oriented things. Because of that I could not reach the solution in time and I rushed the interview a bit. And the interviewer seemed a bit too arrogant which kind of turned me off and killed some of my enthusiasm. Also, this was one of the first interviews that was focused on how I model things, how I explain things and so on. One of the major aspects of it was how I design my solutions on a whiteboard. This is actually a really useful skill and an important one.

The third interview was alright, I did everything right. It was mostly focused on algorithmic things. I got along alright with the interviewer, he was objective, down to earth and straight to the point. I also liked the fact that he kind of guided me a bit to see that I had the qualities which he was looking for. Some interviewers prefer not to guide you too much, and leave you by yourself to try and convince them which is a bad approach in my opinion, because you can't read their minds.

The last interview was the system design interview. Here I think I rushed things too much and I came up with a too complicated solution from the beginning and didn't focus on the basic things enough. I also accidently dogged a question a bit from the interviewer which was related to messaging/queue systems. On the other hand, I asked the interviewer back another tricky question related to software development in general which I got asked in another similar interview, as a cross reference between these interviews. I was a bit disappointed that the interviewer gave me a crappy answer back but at another similar interviewer I was expected to come up with a detailed answer with proper arguments.

On the other hand, I am a bit disappointed with the interviewer. He was a technical lead and a people manager so he should have took more initiative to steer the discussion in the way he wanted. That's like literally part of his normal job, that was a bit of mistake on his behalf. I talked about this with other people and they agreed with me too.

After a week or so, I got the feedback. I was barely under their hiring bar and they thought I rushed through things, that I was a bit too scattered all over the place. So I spent a little time to practice not rushing through things.

The second interview was with Facebook. I found something on their page which was similar to something else that I worked on, and applied for that position. Within 2-3 weeks I got an answer back, Unfortunately it was a bit too late for me, and I had a small vacation/hiking trip prepared. So I ended up delaying things too much, canceling an interview because of that trip. I think this really ruined my chances with them because the position for which I was a really good match eventually was closed by the time I got back. 

I should have canceled the first hiking trip that caused me nothing but trouble and focused on the first interview. We all have some friends that sometimes don't know that we have serious things to do and focus on, that sometimes end dragging you into things that only cause you trouble later. They are not bad people but just too oriented on having as much fun as possible even when there are some other serious things to focus on. The second hiking trip was alright because it was planned ahead of time and I new exactly what I got myself into. I should have only did the second hiking trip and have an initial interview before that, instead of going on 2 trips/vacations like I initially planned things.

By the time I got back to the interviewer, the position or positions for which I applied were closed. I somehow managed to squeeze another call with my recruiter and have an initial, phone screen interview. 

During the interview, I was expected to solve as many problems as possible without focusing too much on code quality and actual implementation, as long as it was the fastest solution. I kind of disliked this approach and the interview felt forcibly rushed. 

I asked again, one of the questions that I got in another interview, back to the interviewer and I got a poor answer again. I was kind of disappointed at this.

After the phone screen, it was silence for 3 weeks. After a week of no answer, I pretty much new the answer, and it was a not. After 3 weeks I sent them a small reminder email and got the no answer back as a generic email. Ohh well, shouldn't have waited so long to interview with them.

Finally, the third interview was with Google. This one was a long one. I got an answer back after around 2 weeks after applying for a phone screen. The recruiter that contacted me to arrange a phone screen was really professional, really well prepared and had quite some insight into programming. Probably would have been a good developer. To me he seemed like the most professional recruiter of them all.

Then the phone interview was scheduled. During the phone interview, I really got to talk to an amazing developer that worked on an application that everyone really uses every day when they browse the web on their computer. He was really smart and I really had an amazing discussion with him. The funny thing was that I was interviewing in C#. The recruiter said that they will find me someone that knows C# and they got me someone that literally worked on C# language. How cool is that. And I really got into depth about some serious technical things. Overall it was a really fun and interesting interview. It was worth it just to meet that person. I liked how he wanted me to write the code, I usually code in the same style with detailed and self explanatory names for everything.

After the interview, I was contacted by the recruiter again and he told me that I passed the phone interview. He was really professional again and offered me a lot of useful insights into things. He really knew what he was doing.

Next came the virtual onsite interviews. I don't know if there were 4 or 5 interviews to be honest, there were so many that I forgot about them. But I had interviews which focused on algorithmic things, system design things. Also I saw that they also focused on object oriented things which was really a good thing for me.

The interviewers were alright. I think 2 of them were a bit too serious for my style but they knew their things. It was funny that usually on other interviews for local companies, appearances mean quite a lot to them, but for Google it didn't matter if you dressed in a hoodie or in a simple t shirt with cartoons on them as long as you knew what you were doing. It was actually funny when I saw  that one of the interviewers was actually renovating his house and I could see everything. Still, I actually appreciated this a lot, I mean that's something that we all have to do, I like this kind of honesty and openness. I think it shows us that we are all people at the end of the day even if we are working in a big company or corporation, and we should be treated like people and humans.

The rest of the interviewers were alright and funny, which is more like my style. Also I noticed that all the interviewers were pretty modest and down to earth. I really liked their attitude, you expect people at Google to be arrogant with the know it all attitude, but they were the exact opposite. I think being a little humble at least, is the right attitude to have, you can't never really know everything. If you think you already know everything, you will never try to learn new things because you will literally never accept that they even exist. I also liked that they valued logical arguments that made sense and could distinguish between a sound and well though argument which makes sense and between just plain bullshit.

Still, I tried to ask 2 questions back to the interviewers which I got at other interviews and I didn't get too many good answers. Again, a bit disappointing.

After the onsite interviews with them, I got yet another interview, what a surprise here with a compatible team for me. It was a bit more of a change to see if I was really compatible with them. I was scared of the interviewer when I saw his linkedin profile. I was completely wrong. He was really nice and funny. We also thought the same about some things and came up with similar ideas, we had a similar way of thinking. This was really really good, it meant that I was really compatible with that team, or actually group of teams. I nailed this interview really well.

Finally, after that interview,  the feedback from all the interviewers was sent to the hiring comitee. That's how things work at Google I guess. I waited for around 2 weeks I think. Then I got a call back from the recruiter. And guess what was the answer? More interviews haha. I seems that I missed some areas during interviews and they wanted to do 2 more interviews with me. Lucky me. I think during one or 2 of the interviews, I sidetracked things and missed the point of the interview. That was my fault there. The funny thing and kind of majorly disappointing thing was that I got the exact opposite feedback from them compared to Microsoft, they told me that I was too slow during my interviews. They wanted me too rush more. 

So back again to interviewing. The last 2 interviews were alright. I got along with the second interviewer more than with the first one. Also, they really asked me some serious questions related to my experience to see if it was really genuine. They are really good at telling if you are lying or not. I was not lying so my arguments made sense to them, I also spotted these things and knew what they were actually looking for.

Still, I was kind of bored of interviewing and really tired from work. I didn't want to get a day off just for the interviews, so I interviewed at the end of my schedule at my job when I was already pretty tired. I was not up to their standards during the interviews. If I really wanted I should have been more rested before the interviews. Eventually I figured out all the solutions after the interviews to their problems. I guess I am a bit of a slow thinker sometimes and I really like to take my time to tinker about things.

Also, they seemed to want me during the interviews to do things really fast and code really well at the same time unlike Facebook and Microsoft, which only wanted to focus on one of those.

One more thing, their interviews seemed to focus more than expected on things related to math. I think it's one of the most math focused company out there. And not many developers have that pure mathematical thinking. Maybe I am wrong here but I got the impression during the interviews that you should have a thing for numbers and findings patterns with them and know how to do inequalities really fast in your head. Plus some other mathematical concepts. I guess this is why they also accept people with mathematical background for their interviews.

Funny though, how some local company said that I didn't have enough experience with some things which Google actually makes and for what I was interviewing for with them. I should avoid that local company maybe.

Now to compare all the interviews between the companies. To me, Microsoft seemed like the most adult company out of them. If I was an adult, mature developer I would most likely join them. Facebook seemed like a company were young people join that dream about joining it with a really young attitude. To be honest I don't really fit with that kind of mindset anymore and it seems a bit annoying actually. I don't really see a ground up adult at 40 years really wanting to join Facebook, it just does not seem like a serious thing which they are doing. Plus, a lot of people hate Facebook and for good reason. So I got the feeling that the culture seems a bit immature there. Google was something in the middle between the other 2 companies. You might be really young or a bit older, you would still find your place at Google.

Still, I met some really smart people at all the companies, and I learned a lot of things from them.

And about the failures, I am an adult now. It's not a big deal for me to be honest, I am for sure at least a semi decent developer. If I was a fresh out of university, maybe I would have thrown a little tantrum but as a grown up adult, I was a bit disappointed for around 3 hours, then I moved on. I see a lot of people getting upset after these interviews when they fail. It's no big deal really, they should grow up. The right reaction to the interviews in my opinion should be this: ¯\_(ツ)_/¯. There are other good companies out there, no use to stress over this.

One more things, surprisingly, a lot of the interviewers seemed to contradict themselves a bit, especially the Microsoft versus the Google interviews. I think in the end, these interviews also are a bit of a gamble, at luck plays an important role at the end of the day. I would say luck plays at least 25% role in the interviews unfortunately. 

And you need to be careful with these interviews not to suck up your entire life. I had to make sure that I kept in touch with friends, family, interacted with them and didn't put my life on hold just for these interviews. I see a lot of people giving up on everything for them which is really wrong.

The right kind of motivation is also needed. A lot of people want to join these companies because they look cool and are impressive. But you should want to join them because they do things that you enjoy doing. That's it, it's that simple. That's the best motivation to have and reason to join these companies. Just look at one of their open source projects, see how they are made and see if you would enjoy working on something similar. If yes, then you should try to interview for them. Microsoft even clearly says this on their jobs descriptions.

In the end, I think getting into these companies need you to have the right approach and style as a developer suited to them, fitting their profile, having the right motivation, seeking the right opportunity as soon as it arises and a bit of luck.



Comments

Popular posts from this blog

Some software development common sense ideas

 I haven't really written here in a long time so it's time to write some new things. These are just some random common sense things that seemed to short to write about individually but seem really interesting and useful to me or other people 1. There is nothing fixed in software development, all things vary by circumstances and time Remember the documentation that didn't seem that important when you started the project, well after a couple of years one the application has grown and become really complicated, no one actually knows everything about the application anymore. So now you really need that documentation. What happens if you suddenly need much more people to develop the application because of some explosive growth? Without documentation, new developers will just look at the application like they look at a painting. This actually happened to me. Maybe in the beginning of a project, a technology really helped you a lot but as the project grew, it started making things

My thoughts as an experienced developer in this field.

To be honest, I would have never guessed that      I would end up saying these these things, especially jn the beginning of my career. As you become more experienced, you kind of get to see everything and you become less impressed by new things. Honestly there is some sort of repetitiveness in this field and we kind of like to reinvent the wheel quite often, because well, we become a bit too easily bored. Take for example how the web looks now, a lot of it has been borrowed from other places, mostly desktop development, especially the parts about making custom reusable components.  Or from older frameworks, like state management in the UI which actually was first properly implemented in Asp .Net Webforms, as far as I know, something like 20 years ago, where you used to have the dreaded view state.  But most likely something similar existed before that too. I was not that surprised when React adopted initially this idea. Or even less surprised when hooks where introduced that seemed a b

Some things which are often blindly applied and followed by developers which are not always good

This is probably one of the most controversial things that I have written so far but I am just tired of hearing about these things and discussing these things. Other developers that I know share part of my feelings. I would rather hear more about how people built things, overcame challenges or what new interesting ideas and concepts they implemented. Those things are really interesting and innovative, not hearing about the same theoretical things over and over again. I can just read and learn those things from 100 sources on the internet. Firstly, one of the most discussed and promoted things is agile/scrum development. I think I have been through 5-8 workshops about agile development methodology. And each time, some things differed. There is no 100% standard approach to this. Everyone uses their own version of this development methodology and seem to argue a lot that their approach is right and everyone else is doing it wrong. You go to an interview, this will be one of the first 10 t