5 Interviews, 7 hours: Lessons From Not Getting A Big Tech Job Offer
Tags: career, programming, codenewbie, devjournal
Published: 2021-09-08 17:35:05

Earlier this year I broke one of my rules and interviewed with a tech company you _HAVE_ heard of, they aren't a FAANG but if the next tier down had an awkward acronym then they would be in that. I applied because I used this company's product daily for the better part of a decade and genuinely like it. It's well made, solves a huge pain point in the market and they have a loyal and growing user base.

I need to stress how much I like this company's product because I genuinely don't think applying for Big Tech is worth the time and effort (doubly so for non-traditional programmers like me) due to the number of rounds and the puzzle like coding tests they tend to use. I was making a big exception with this one.

## 1. The Application
I applied for a Senior Backend role, spent around 90 minutes on the initial application and then thought I would never hear back as, quite honestly, I didn't think I would cut the mustard on what they were looking for. I have a PhD in Electrical Engineering but I am a 100% self taught developer and they are big enough that "CS Degree" could easily be one of their initial filters. Given how the process went, they probably should, but more on that later.

Well, 24 hours after applying I had a request to book a coding test! To say I was excited is probably an understatement, I was grinning from ear to ear for the next day or so.

## 2. The Coding Test
The first coding test was very enjoyable. The problem was to make an algorithm where, given an array of numbers like:
```
[1,2,3,6,7,8,12,13]
```
I needed to produce a number of ranges to "describe" the series, so the above would be:
```
[[1,3],[6,8],[12,13]]
```
I initially didn't understand the requirements so I asked for it to be explained another way and the interviewer said "think of it like a compression algorithm" at which point it clicked.

I used a two pointer approach leaving one pointer looking at the start of the range and the other pointer traversing until the next number was greater than "the number I'm at + 1".

Had a fun chat at the end with the interviewer, asked about their deployment times, team make up and what their favourite thing about the company was.

**Lesson**: if you don't get the task on the first read ask for another interpretation rather than sweating and stewing on what you're supposed to do.

**Overall: 9/10, would do again.**

## 3. The Life Story
I was invited to the next stage a few days later and asked to arrange an hour to discuss my life and what brought me to this point. This was a non-technical discussion with an internal recruiter that was very enjoyable and overran by 10 minutes. I made two errors here that, while didn't damage my application I don't think, certainly made the interview more challenging.

1. I went to an odd but interesting 6th form college (last two years before university) and I started there, I planned to cover this in a couple of minutes and then move on. The problem was that this was 17 years ago and the interviewer got very interested in it. I spent nearly 10 minutes covering off the period of my life between 16 to 18 and immediately left me feeling pressed for time and added some stress.

2. Due to the above I then rushed some later sections and didn't really do them justice when those sections were far more relevant.

**Lesson**: Leave space for the recruiter to derail you, stick to relevant times in your life initially and if time allows reveal less relevant parts later on. 

**Overall: 7/10, would do again but would plan less content.**

## 4. Technical Conversation
I was invited to the next 3 stages in one go, blocking out a whole afternoon for 3 calls. The first was a technical chat with a principal engineer about a project of my choosing.

I felt like this went well however this was the first time I made a real misstep that I was later told contributed to me not getting the role. I am a talker, I can often get on a bit of a roll and not leave enough opportunity for others to interject, apparently I did this in this interview and the interviewer felt I lacked some self-awareness.

Wether I agree is somewhat irrelevant since it was how they felt and I am aware enough of my personality to know I do this sometimes. In person it is much easier for me to pick up on the body language that indicates someone else wants to talk, on a video call when sharing my screen this is all but impossible for me. 

**Lesson**: Leave intentional breaks to allow the interviewer to interject and ask questions.

**Suggestion for interviewer**: Don't raise your standing desk and awkwardly track you head up at the same time just after asking your first main question, it's incredibly distracting.

**Overall: 7/10, it was an enjoyable experience and it was fun to talk about what I had spent the last 8 months working on.**

## 5. Coding test 2
This. Went. Badly.

This interview is why I didn't get the job, I knew it half way through and my experience in this interview is why I just don't think self taught devs should apply to Big Tech unless you are prepared to waste a lot of time.

This was a "Pair Programming" test, in reality it was a coding test just like the first round and I was asked to implement Conway's Game of Life.

In speaking to lots of people afterwards this is apparently a common task to be set on degrees and in coding bootcamps, I had never even heard of it, let alone solved it before. I was also told by a number of that they thought it was "a bit harsh" to ask in an interview. I don't really have an opinion, I trust the interview knows what they are looking for.

I stumbled my way to a solution in 50 minutes, went down two dead ends, didn't understand a suggestion from the interviewer and generally wasn't proud of the code I had written.

When asked what else I would do at the end of this I said: 
> "I would significantly restructure this code, given that this is a solved problem I would research the best solution and implement it that way to get the best result". 

The follow up question was "if this wasn't a known problem with a solution what would you do if this were a work task" I said I would speak to my team to see if they had seen something similar and have someone review where I had gotten to and make suggestions.

Apparently this answer didn't make up for the code I had written as the feedback I was given was "Inelegant solution and poorly structured code" 🤷‍♂️ I will come back to this line at the end ....

**Lesson**: try to cover off as many of the potential interview puzzles ahead of time so you are reimplementing a solution rather than solving it for the first time.

**Overall: 1/10 I really didn't enjoy this interview.**

## 6. Final Coding Test
After a 20 minute break I had one more round to go. It never even crossed my mind to back out but my brain was fried and I was not feeling confident.

This interview was to implement and LRU Cache. I hadn't come across this before either but this is the kind of programming that is right up my alley. A known set of requirements, a tangible problem to be solved and a clear outcome.

I really enjoyed this test, it actually did almost feel like pair programming as well. The interviewer was very friendly, we had some side chat about Swift (even though I was testing in JS) and their experience with it which helped ease me back into a relaxed coding mode.

I was told in feedback that the solution I chose was their least favourite approach however that was fine because I discussed all of my reasons, the trades offs I knew I was making and why they were probably ok given the end use case.

I was also told that in response to the previous interviewers line of "Inelegant solution and poorly structured code" this interviewer said "Did we interview the same candidate?" which is nice.

**Lesson**: never quit a process until it's over, if I had walked away after the previous interview I wouldn't have experienced this one, I would have had a sour taste in my mouth over the whole thing and I would have missed out on an hour and a bit with an awesome person who I thoroughly enjoyed my time with.

**Overall: 10/10 would chat with again just for fun.**

## Feedback
After 5 days I got an email to say I was unsuccessful and that I could have a 15 minute chat if I liked to hear why.

I have weaved that feedback into the above narrative and it was very welcome. At the start of the call the recruiter asked if I had any ideas on why I didn't get an offer and I said "Conway's Game of Life" with a grin on my face, they chuckled (nicely) and said "yeah, pretty much".

They they also told me about talking too long in the technical conversation which was extra useful information.

## Summary
Overall I am glad I went through this process however, I don't intend to apply to a company with a lengthy interview process again. This took up 7 hours of my time and, while the process was managed well, the people were nice and I gained some experience, I still ultimately fell down on a puzzle that if I had a CS degree I would probably have come across before.

Outside of this I've had 10 job offers in the past 2 years off the back of 2 to 3 round interview processes so it is totally possible to get job offers without the hoops described above.

If you want more of this sign up to my mailing list at [Career Switch To Coding](https://careerswitchtocoding.com/)