I started a new job as Software Developer at Zillow in October 2019. This would have been hard to imagine when I left Zillow in August 2018, so I wrote a few blog posts detailing my experience:
I had a few things going for me in the switch to software development. I graduated with a degree in Computer Engineering from the University of Illinois. I spent the last ten years in product and engineering management, so I understood the software development process and how to deliver successful products. That was a good foundation, but I still needed to pass the interviews, so here’s what I did to prepare.
- Brush up on Algorithms and Data Structures
- Practice, practice, practice algorithm problems
- Prepare for system design interviews
- Build a hobby project
- Be ready for behavioral questions
Brush up on Algorithms and Data Structures
I wanted to make sure I remembered the basics so I picked up a college level textbook that covered algorithms and data structures. I used Data Structures and Algorithms in Python by Goodrich, Tamassia, and Goldwasser because it was available on O’Reilly Books. The point was to get a refresher on lists, trees, graphs, search, and sorting. I read through the book and did enough practice problems to feel comfortable with the material.
Practice, practice, practice algorithm problems
In the last nine months I’ve probably done between 200-300 interview problems. I think I started to feel comfortable with them around the 150 mark. I used InterviewBit, Leetcode, and Elements in Programming Interviews (EPI). InterviewBit was great because it organized types of problems and had some good explanations, I worked through their whole program first. I then supplemented my practice with Leetcode and EPI. The goal was to be comfortable with all types of questions.
Doing all of these problems I wish I had more discipline in time boxing them. There were many times that I spent a few hours trying to figure out a problem without looking at a solution because I felt looking at the solution would be cheating. It’s not, I should have set clear time boundaries and looked at hints after 30 minutes and the whole solution after 60. I would have learned faster and spent less time being frustrated.
Prepare for system design interview
I was already pretty comfortable drawing high level boxes of a system from my work as a product manager, but the system design primer and practice interviews through Pramp got me prepared for design questions that popped up at every interview. This was my biggest weakness and I’m not sure how I could have done better without actual work experience.
Build hobby projects
This whole journey started because I was really excited to build TorresApp (blog) while traveling. I think hobby projects are great because it’s easier to learn when you have a problem you’re trying to solve, they show initiative to potential employers, and they give you something to talk about when asked “tell me the hardest technical problem you’ve solved”. I always ended up talking about getting my scraper to detect async requests.
Most companies will ask some form of “Tell me about a time when…”. Companies that recruit based on their core values, which I believe are better companies, focus on these questions even more. Early in my year off I forced myself to write down some anecdotes that demonstrated Zillow’s Core Values. I later used them to make sure I have examples for a companies’ core values.