Wednesday, November 21, 2018

Unity3D Interview Preparation

Over the past 13 years I’ve seen my fair share of the interview process from both sides of the table. The following tips can be applied for a variety of technologies but are mostly geared towards those interviewing for full time or contract Unity3D developer positions.
The hiring process can usually be broken down into four main hurdles:
  1. Introduction
  2. Quick Assessment
  3. Thorough Assessment
  4. The Offer
Step 1: Introduction
Unity3D jobs are typically for highly desirable positions such as game development or virtual reality. This means that the competition can be fairly intense for a good Unity3D contract or full time position. In order to move forward in the interview process you are going to need to stand out from the masses by using your portfolio, resume, and cover letter. Resumes and cover letters are pretty standard for most industries; there are a plethora of resources online covering them so I’ll hit one point on each and then focus on the Unity3D portfolio.
One item I would make sure you do not overlook on the resume is to ensure it is in a file format every OS can easily view such as PDF. It can be frustrating for an employer to try to open a ‘Pages’ document on their PC only to have it missing fonts and oddly formatted due to file conversions.
One Item I would make sure you do not overlook on the cover letter is to actually write one. I realize it is much easier to just send in a resume but the cover letter is your big chance at selling yourself. You should research the company you are applying for and tailor your letter to their ideals and needs. This is your chance to highlight your past experiences that exemplify the skills they are seeking. If you can not muster up the energy to write a cover letter for a potential job then that job may not be right for you. Ideally, you should feel excited about the job and your excitement should show through in your cover letter.
While the cover letter and resume are important, it is the portfolio that will move you past this step for a Unity3D job. I taught an entire course called ‘Online Portfolio’ as an adjunct lecturer at Butler University. We can’t go over everything here but the key points are to showcase your past work, clearly define your contributions, and ultimately prove you would be an asset to their team. A portfolio can be anything from an interactive website with examples they can download and play to a document with screenshots and brief paragraphs describing a few projects and your contributions. If you do not have any projects to share then it is time to dive into a hackathon or start a hobby project. Additionally, if you have code you are allowed to share I’d also include a link to your github as part of your portfolio.
Step 2: Quick Assessment
If you successfully complete step 1 then you will typically be asked to complete a phone interview or an online test. In both of these cases the company is trying to vet you to make sure you are worth the time and money for a more thorough assessment. This is especially true for out-of-state interviews as an onsite in that case can be costly.
Phone interviews and online tests typically involve technical coding challenges. The best thing you can do is practice. There are sites available for this such as HackerRank that provide coding challenge examples. All of the ones I have tried include a C# option so they can be applicable to Unity3D. Go through as many as you can leading up to the test as you can never over-prepare. Try to cover common data structures, search algorithms, and sorting algorithms, as well as the pros and cons of using each.
Besides general coding you will also want to brush up on your Unity specific topics. Here are some examples of things you should know: Asset Bundles, batching, coroutines, draw calls, scriptable objects, shaders (fragmented versus vertex), culling, debugging, and profiling. Debugging and profiling is my favorite topic to question when I am interviewing a potential hire. I want to make sure you know how to troubleshoot issues. Do you know how to add breakpoints in your IDE? Do you know how to diagnose frames per second spikes? Do you know how to track down a memory leak? If you answered ‘no’ to any of these questions then take some time to research profiling and debugging before your next interview.
Lastly, review some design patterns that are commonly used in Unity3D. ‘Object Pooling’ is a great pattern to reduce instantiation hitches. ‘Chain of Responsibility’ is used in most input systems to prevent multiple colliders from being triggered on the user interaction events. ‘Observer’ is commonly used to listen for events dispatched by low level objects such as an enemy being destroyed. ‘Factory’ is often used in user interfaces to build out common elements like lists for leaderboards and inventory selection screens.
Step 3: Thorough Assessment
If you made it to this point then they are interested and you are most likely one their top few candidates. They will either invite you to an onsite and put you through some white boarding or they will give you a small project to complete over the next couple of days.
If you are given an onsite then you will want to buy the following book and work through examples from each chapter. I did an onsite at Amazon and was amazed that two of the four interview questions were pulled directly from this book: 'Cracking the Interview Code'. You should also be aware that they aren’t just judging your code. They also are judging whether or not you fit the job and the team. I passed the technical portion of an interview at Facebook but then was turned down because they didn’t think I wanted the job. It was true too. I was more interested in another company but I was surprised that I made it obvious to them during my interview. Lesson learned, how you act is just as important as what you say. Make sure you show an interest in the company, its employees, the project, and ask a ton of questions.
If you are given a project then this is your chance to show off. Over the years I have had to remake Asteroids, build a variation of Donkey Kong, create a slot machine, and a trivia quiz. When given a Unity3D project to complete you should first read their requirements very carefully and make sure you hit each bullet point. They will be judging you not only on the final product but also what is under the hood. Break down the challenge into classes and take extra care in how you use inheritance and composition to adhere to S.O.L.I.D. object oriented design principles. One key is to separate data logic from the view by using scriptable objects. Another is to ensure your project and scenes are organized and variable names and methods are named appropriately. As always, comment your code and ensure it is easy to follow.
If you have time at the end then sprinkle on a bit of love into the project. The asteroids challenge I was given was for EA’s Playfish Studio. I decided to make it an underwater asteroid game using their fish logo as the ship. The trivia quiz challenge was given to me around Halloween so I made it themed around classic scary movies and even added a cheap scare at the end using a screaming clown face. These touches go a long way in standing out compared to the other candidates.
Step 4: The Offer
Throughout the entire process you should be making sure the company interviewing you is a good fit for you. The offer is where you really get to turn the tables and have them sell you. For example, they will most likely ask you what you currently make. Try your best to avoid answering that question and instead answer the real question which is how much do they need to offer you in order for you to take the job. This can be a difficult question but you can get a decent idea of how much you are worth by visiting sites such as ‘Glassdoor’ or browsing similar job posts on sites such as ‘Angel’ that include salaries. I tend to have two numbers in mind: my ideal and my bottom floor. Answer their salary question with your ideal and don’t settle for lower than your bottom floor. Sometimes it is good to request a general ballpark earlier in the interview process. After spending a couple days on the Halloween Trivia challenge, I was offered a salary half of what I was making at the time. Had we discussed ballparks earlier on it would have saved me a couple days of work.
Conclusion
Preparation for Unity3D interviews is similar to most technical jobs with the addition of the portfolio as well as brushing up on some key Unity3D concepts. Regardless of whether or not you land the job you want, learn from the experience and take it to your next interview. If you take the attitude of continuously learning, improving, and adding to your portfolio, then you will eventually succeed at landing a Unity3D contract or position.