Applied online, emailed by recruiter for a phone screen. 35 min call to tell me about Garmin and ask me basic questions.
50 min technical screen call with Sr. Engineer Manager. Tell me about yourself, what technology are you most familiar with, tell me more about those, tell me about these technologies I see on your resume, technologies used in your projects and at internships, etc. Do you do testing with your code? He asked pretty good technical questions, not too difficult but not easy. Everything went really well and I was excited to hear that they wanted me to come onsite for a 3 hour interview.
I went onsite in Chanhassen, starting with a 30 min tour/benefits discussion with the office manager. The office looked very new, but the layout is terrible. It was highwall cubicles and dead silent for all their 40 employees. I didn't see a single person. I was surprised that we weren't the only two in the building. She took me to a conference room where I was met by an IT Manager (the one I had a phone screen with), Product Manager, Software Engineer, and an offsite software engineer called in. They started with basic behavioral questions read off of a script: What did you do when somebody didn't do their work? When was a time you couldn't work with somebody? Next, basic tech questions read off of a script: What is HTML? CSS? Do you know what relational databases are? The call-in guy asked: abstract class vs interface in Java? What are your specialties and what do you shine in? Why do you like software development? Why do you want to work at Garmin? In all, it was an hour.
For the next 1.5 hours, the call-in guy left and a software engineer walked in. This is where things started to get stressful and tiring. First whiteboard question: You are given two version numbers, write methods that check if one is up to date and tell you which one is newer. It seemed simple but I struggled to understand the wording of the question, like what were the inputs and what the purpose was. Did you want me to return a yes/no match, return the version number that is correct, return the incorrect one, or what? I eventually wrote a class that handled version numbers correctly according to their specifications. The next whiteboarding question was: Write methods to calculate the running average, where you are given two inputs, one is an array of ints, the other is the grouping number. This one was really easy and I wrote it fairly quickly with one minor mistake that got fixed in a second. The next whiteboard question was: explain the best algorithm to calculate the highest rolling average from the start of a matrix to the end of the matrix, but rules: can only move right and down and must go from top left corner to bottom right corner. The nature of this question was confusing...write methods? They said no, just explain how you would solve this. I explained some algorithmic ideas, time complexity, the difficulty of the problem, but this wasn't what they were looking for. They said you need to keep track of each average as you go through the matrix. They were only looking for their version of the answer. The last question was to design a recipe website with database, server, frontend, etc. Followed by changing requirements.
In all, the 2.5 hours of technical questions was way too long and painful. I've never seen a company give a technical interview longer than 1.5 hours and more than 2 whiteboarding questions. It seemed like they are looking for developers that are very technically smart and want to work independently. It's not a very collaborative environment, each team works in big cubicles scattered throughout the office. They do a mixture of agile and waterfall. However, they are very up to date with technology, which impressed me. I didn't feel like a fit for Garmin at this office.