Cover photo by https://unsplash.com/@gk3
Before we begin - never call yourself a programmer. Software engineer would have made my title too long for Dev.to to allow, so I used shorthand.
Okay. Let's talk about interviewing. This is a collection of advice and useful questions that I've personally collected. If you're in a rush and only want the TL;DR, read the bolded headlines.
I've already written up a really extensive history of my career, complete with past salaries, some negotiation tactics, and a discussion of Japanese work culture here. I'll be skipping all that to save time along with all the obvious interview questions that I see like "what does a typical day here look like?" - that information is everywhere.
These views will be based on me and what I value - every situation is different, but everyone should get good mileage out of the interview questions at the very least because they grant insight into the place you might be working.
Question set #1: What do you, personally, like the most about the company? What do you want to improve the most? (do not use the word dislike)
Most people give very safe answers to this question. This question serves two really good purposes, though.
- If they give a genuine answer (huge bonus points from me, by the way) that isn't immediately obvious, I ask them to tell me why they feel that way so I can learn more about the company as well as the interviewer who I will probably see again at some point in my life should I chose to work there.
- I forgot literally every single question I had prepared / they were all answered and I want to seem unorthodox and insightful.
If you ask what they like the most, they should give a genuine answer. "I like that we have good communication and work as a team / I like that we have a new coffee machine that does cappuccino and it's become the morning hangout spot / I like that we've got a very direct work culture." This is a fairly easy thing to answer, and I mostly gloss over the reply unless the answer is actually interesting.
When you ask what they like the least, this is where you learn about them. Do they give safe answers like "I wish we had more people"? That doesn't necessarily count against them, but it says more about the company culture if they can say (especially in front of their teammates) "We're working on being more honest and more forthcoming with our opinions so we can work more efficiently / We desperately need more people in leadership positions because we need someone to guide the less experienced devs / We got our overtime work down to an hour a day, but we want that to be even less". If you hear this, that is an excellent sign of honesty and wanting to genuinely improve the company. Huge plus.
Write down the positive point if you find it even remotely interesting. Before the next interview, take 10 seconds to look at your notes. If you're going to see that person again, it's impressive to say "Oh, John, I remember you telling me about the coffee machine! You do a cappuccino talk session today?". They will love you if you do this in a natural way.
Write down the negative points in your notes so you can come back next interview and talk or demonstrate in a round-about way about how great you would be at solving those things and how honest/communicative/not-overtimey you are.
Super small Japanese note because I found this super useful, the word you want here in Japanese is 離職率(rishokuritsu).
This number is incredibly important. Whether you should ask for a percentage or just a total number depends on your culture, but if they tell you a number that seems high, you should be concerned. I don't know what it's like in other parts of the world, but in Japan, for engineering anything higher than 5% is a problem.
I found out once by asking this question that the entire engineering team for a startup had at one point all quit. Literally every single person left, in the span of like two weeks. Ask the question. If you're afraid to ask, that says volumes about the work culture and you don't want to be there.
This is nice because it is polite conversation that isn't work focused. You get to see their passion for something outside of work, and you might get to see what their work-life balance is like. If they don't come up with anything (some people don't), no pressure. Just move on smoothly, or wait for the rebound and talk about something you like to do outside of work.
I ask this for bigger places. What are your meetings like? Are there a lot of them? Do you like them? Is there a rule on how long one can go on? Do the engineers go to them often? Etc.
Because meetings usually suck. They don't have to - if everyone in a meeting room is arguing / laughing / getting angry / brainstorming, that meeting is worth having. If no one has said anything of substance in two minutes, or if the meeting could have been an email, you're wasting your time.
This also, if you're lucky, can lend some insight into how fast the company moves and how much bureaucracy they have. A company with a lot of meetings rarely is process-free in other areas.
Ask for a code interview. It does two things:
1) You get to show off your skills if you know something, and learn a new type of problem if you don't.
2) It shows you what they value in their engineers.
If they ask you to architect a system or design a database for a realistic use-case, you are in good shape. If they ask you to do a quick sanity-test for coding like Fibonacci numbers, that's fine too if you're more junior / they scanned your Github and just need to check that you actually wrote that stuff.
You are not in good shape if they ask you:
- A math question disguised as a programming question.
- A pointless, easily googleable question about syntax like What’s the difference between varchar and varchar2 in Oracle 8i
- A general algorithms question. Hear me out on this one: If you are working for a place that requires novel solutions and original code, good. This is a valid question. Otherwise - if you won't use this in your day-to-day, why are you being asked it?
- An abstract question like "How many stop lights are there in Seattle?" to see how you think.
I am sure that you will find avid defenders of the above four questions in the comments, especially of that algorithms point. I stand by my views.
Useful for building rapport and general conversation with the interviewer. Also, if you care about career advancement, there's a bonus to asking this: The answer often tells you if they got promoted to that position or hired in as a manager already.
I'm serious. Spend most of your time just listening because eye contact, genuine expression, and communication are infintely better than extensive notes. Only write down answers to questions about things that you care about, things you forget easily that you'd wish you hadn't (names, for me), and impressions of the company and people.
I've found that writing down "seems overly serious at first, but actually really funny" helps me remember that person's personality a little more accurately later on. I've also found that it helps confirm any good or bad vibes that I had when I go in for another interview later. When I look at my notes and see something like "This engineering manager seems like they are painfully strict and don't respect their employee's free time" from last week, followed by "this HR manager seems like they don't care about their employee's time", that's some pretty hard evidence that I should stop there.
You can always send a followup email asking about a particular process or system or something that you forgot about or didn't write down. It's much harder to recall a hiring manager's attitude on work-life balance a few days after the interview, much less the week after when you're trying to decide what upcoming thing to cut from your schedule because you realized that smashing yes on each casual interview offer was a terrible idea.
Note: This is not saying that you shouldn't look into each interview offer, just don't smash yes.
I was super, super guilty of this. I would get a bunch of offers to "come to the office to chat about the position", took a bunch of them, got there, and this would happen like clockwork:
- 15 minutes of conversation
- I ask what the salary range is / overtime is like
- They answer with 1/2 my current salary / 20 hours a week
- I now have an hour and 45 minutes until my next interview, so I get to go pay Starbucks money again so I can sit there and wait until I can repeat this process.
It costs a company nothing to have you come to their office for one of these. If the casual interview goes badly, they just go back to work. You lost all that time to get there and do all the research to make it seem like you knew a bunch about their company.
I actually went to one casual interview to have the interviewer ask me if I had big data experience at a Facebook or Google scale. When I told him that I had not, in fact, worked at a company even close to that size, he was surprised. I think that if I had actually read the job description (and if he had read my resume), we would both have saved a lot of time. We talked about Russian face-recognition technology, which was kind of cool, but we could have done that over the phone.
If you see a place reach out to you that wants 3 years of front end experience but, like me, you would rather drink a mild poison than work with CSS, think about it. I'm not saying to skip the opportunity, but absolutely send them a message first. Mine is almost always:
"Hi! Thanks for sending me an invitation to come talk. I have a concern that I'd like to address first, if possible. You said that you specialize in X technology, but I've literally never heard of that before and don't even know how it's pronounced. I'm more of a Y technology type of person - is that still a good fit?"
Half the time, no response. Half the time, "Actually, that's an old job ad / a job for a different position, but we saw your skill set it matches something we have opening up."
Rarely, "You look like you have a lot of experience - I'm sure you can get good with X technology quickly, so I'm not worried."
Go to those.
I realize this might be obvious, but trying to talk salary with another engineer or someone who can't decide in an interview is usually not a good idea (and I have done this). Focus on the fit, then the money. If a manager without salary-deciding power comes out of an interview and says to HR "they wanted to know how much we can pay", it does not come off as "This person wants to work with us."
You asking for numbers in the first interview can be totally normal if that's your negotiation strategy. I do it occasionally to get a range of acceptable salary. If they ask you for your expected salary, they are not doing you a favor, they are trying to determine how much you'll cost before even seeing if you have what they want.
Let me put it this way - if I told you I was going to buy you a mysterious fruit that I had never seen before from an old man in a wizard robe on the street, your first question would not be "How much does it cost?" because there is so much more that needs to go into that decision before price even becomes a factor. People who decide on price at that stage are not people you want to be with.
That being said, if they ask and you respond with "what's the range of salary?" and they tell you, no problem. If they insist/are pushy, walk.
If you get to a company that answers every question you ask, or follows up if they don't have that info on hand, it is probably a great place to work if you value honesty and communication. If they don't answer the question, assume the worst. Sometimes this doesn't mean anything, sometimes it's incredibly important.
"How many engineers are working on your level 3 customer support team right now?"
"Can't say, sorry."
Completely fine, probably a business secret or something.
"You said that you're looking to grow a lot this year. How many engineers are you planning on hiring?"
"Can't say, sorry."
That shouldn't really be guarded information. Not a red flag by itself, but pay close attention and double check to make sure the company actually involves engineers in the business decisions.
"How many people have quit in the past year?" "How much runway do you have left?"
"Can't say, sorry."
Okay, weird title, but I'm serious.
If I'm going to work with a company, I am painfully honest and try to communicate as much as possible before the hiring stage. But I also try to think of the hiring process from the mind of someone who would have a toxic affect on the work environment and see if they've done anything that would have weeded me out.
If they talk a lot and don't let me talk much or ask many questions - I could be skilled but not a good person to be around. If I'm not introduced to anyone on the engineering team, they won't know if I have a clashing personality with our front-end engineer.
The reason this is important, of course, is because you want to know that the process is good so that when you join it is less likely that you will have to deal with a toxic person joining after you.
If you feel off about a single person that you interview with, strongly consider walking. Like a relationship - you have a few hours to decide maybe years of your life. Be smart about it.
If you feel like a company's atmosphere is too formal or casual, or the engineering area looks like a sterile hamster cage, or the sales people look like they'd rather be dead than at work, consider passing on it.
You get a bad gut feeling, walk.
When you see a job advertisement, that's actually the first chance you get to see what that company chooses to present to potential hires. If you see some copy-paste HR spiel (The successful candidate will have...), you're going to be working at a place with a very different vibe than a place that writes job ads like Google does. Prioritize applications accordingly.
Once, in an interview, I went in to find the CTO who was supposed to be interviewing me was going to be late. Not a problem, it happens. He came in later, picked up my resume that the HR person had left on the table in front of him, casually flipped through it like I would flip through a pamphlet on the benefits of pistachio water, and then asked me to introduce myself and all my skills.
Then he asked me about part of the Unity game I had been working on - specifically, sending data over a network. I told him, then he told me that couldn't be accurate. I told him it was. He then told me that TCP/UDP cannot be used over phones and asked me how the Unity game engine implemented networking on a fundamental level. I told him truthfully that I had no idea, but I was pretty sure that the online multiplayer realtime rpg I was working on had UDP. He did not believe me. He later went on to say that everyone in the company, regardless of level or performance, received the same bonus amount and suggested that if my performance did not meet expectations they would decrease my salary until it did.
They actually gave me an offer. I did not take it.
Really, if I had to sum this article up:
Company culture is everything. Ask the questions that give you the information you need to decide in two hours if you want to spend 8 hours a day working with these people.
I think I'm going to write an article about freelance/consulting vs. full time work (at least here, in Japan) and how my current job hunt is going. It might be after I've chosen where I'm going to work, so a few weeks at shortest. It will hopefully be shorter than this article. If there's anything you'd like me to talk about, mention it below. I have no idea what people want to hear about and I'd like to help.
Thank you for reading.